
مساء الخير ، أيها القراء الأعزاء ، اسمي نيكولاي نيفيدوف ، أنا مستشار تقني في شركة IBM ، أود في هذه المقالة أن أقدمكم إلى منصة blockchain - Hyperledger Fabric. تم تصميم النظام الأساسي لإنشاء تطبيقات الأعمال على مستوى المؤسسة (فئة المؤسسات). مستوى المقالة - للقراء غير المدربين الذين لديهم معرفة أساسية بتكنولوجيا المعلومات.
Hyperledger Fabric هو مشروع مفتوح المصدر ، أحد فروع مشروع مفتوح المصدر Hyperledger ، وهو اتحاد لمؤسسة Linux. تم إطلاق Hyperledger Fabric في الأصل بواسطة Digital Assets و IBM. الميزة الرئيسية لمنصة Hyperledger Fabric هي تركيزها على تطبيقات الشركات. لذلك ، تم تطوير النظام الأساسي مع الأخذ في الاعتبار سرعة المعاملات العالية وتكلفتها المنخفضة ، وكذلك تحديد جميع المشاركين. يتم تحقيق هذه المزايا من خلال فصل خدمة التحقق من المعاملة وتكوين كتل جديدة من السجل الموزع ، وكذلك استخدام مرجع مصدق وإذن للمشاركين.
مقالتي جزء من سلسلة من المقالات حول Hyperledger Fabric والتي في إطارها نصف تصميم نظام للمحاسبة للطلاب الذين يدخلون الجامعة.
عام Hyperledger النسيج العمارة
Hyperledger Fabric عبارة عن شبكة بلوكشن موزعة تتكون من مكونات وظيفية مختلفة مثبتة على عقد الشبكة. مكونات Hyperledger Fabric عبارة عن حاويات Docker يمكن تنزيلها مجانًا من DockerHub. يمكن أيضًا تشغيل Hyperledger Fabric في بيئات Kubernetes.
لكتابة العقود الذكية (chaincode في سياق Hyperledger Fabric) ، استخدمنا Golang (على الرغم من أن Hyperledger Fabric يسمح لك باستخدام لغات أخرى). في حالتنا ، تم استخدام Node.js مع Hyperledger Fabric SDK المطابق لتطوير تطبيق مخصص.
تنفذ العقد منطق الأعمال (العقد الذكي) - السلسلة الرئيسية وتخزين حالة السجل الموزع (بيانات دفتر الأستاذ) وتنفيذ خدمات النظام الأخرى للنظام الأساسي. العقدة هي وحدة منطقية فقط ، ويمكن أن توجد عقد مختلفة على نفس الخادم الفعلي. الأهم من ذلك هو كيفية تجميع العقد (مجال موثوق) وما هي وظائف شبكة blockchain المرتبطة بها.
العمارة العامة هي كما يلي:

الصورة 1. العمارة العامة للنسيج Hyperledger
تطبيق المستخدم (Submitting Client) - تطبيق يعمل به المستخدمون مع شبكة blockchain. للعمل ، يجب أن تكون مفوضًا ولديك الحقوق المناسبة لأنواع مختلفة من الإجراءات على الشبكة.
يأتي الأقران في عدة أدوار:
- Endorsing Peer - العقدة التي تحاكي تنفيذ المعاملة (تنفذ رمز عقد ذكي). بعد التحقق من العقد الذكي وتنفيذه ، تُرجع العقدة نتائج تطبيق العميل مع توقيعها.
- خدمة الطلب - خدمة موزعة على عدة عقد ، تعمل على تشكيل كتل جديدة من السجل الموزع وإنشاء سلسلة من المعاملات. لا تضيف خدمة الطلب كتل جديدة إلى السجل (لتحسين الأداء ، تم نقل هذه الوظيفة إلى أقرانهم).
- ارتكاب الند - العقدة التي تحتوي على سجل موزع وتضيف كتل جديدة إلى السجل (الذي شكلته خدمة الطلب). تحتوي كافة أقران الالتزام على نسخة محلية من السجل الموزع. يقوم Committing Peer ، قبل إضافة كتلة جديدة محليًا ، بفحص جميع المعاملات داخل الكتلة للتأكد من صحتها.
سياسة المصادقة هي سياسة للتحقق من صحة المعاملات. تحدد هذه السياسات مجموعة العقد الضرورية التي يجب أن يتم تنفيذ العقد الذكي من أجل الاعتراف بها باعتبارها صالحة.
يتكون السجل الموزع - Lerger - من جزأين: WolrldState (وتسمى أيضًا - State DataBase) و BlockChain.
BlockChain عبارة عن سلسلة من الكتل تخزّن سجلات جميع التغييرات التي حدثت مع كائنات التسجيل الموزعة.
WolrldState هو أحد مكونات السجل الموزع الذي يخزن القيم الحالية (القصوى) لجميع الكائنات في التسجيل الموزع.
WorldState هي قاعدة بيانات ، في الإصدار الأساسي - LevelDB أو أكثر تعقيدًا - CouchDB ، والتي تحتوي على أزواج ذات قيمة رئيسية ، على سبيل المثال: الاسم الأول - إيفان ، الاسم الأخير - إيفانوف ، تاريخ التسجيل في النظام - 12/12/21 ، تاريخ الميلاد - 12/17/1961 ، إلخ يجب أن يكون WorldState والسجل الموزع متناسقين مع جميع أعضاء هذه القناة.
نظرًا لأن Hyperledger Fabric هي شبكة يعرف فيها جميع المشاركين ويصادقون عليها ، يتم هنا استخدام مرجع مصدق مخصص - المرجع المصدق (CA). تعمل CA على أساس X.509 القياسية والبنية التحتية للمفتاح العام - PKI.
خدمة العضوية هي خدمة يتحقق من خلالها المشاركون من ملكية كائن في مؤسسة أو قناة معينة.
المعاملة ، في معظم الحالات ، هي سجل للبيانات الجديدة في السجل الموزع.
هناك أيضًا معاملات لإنشاء قنوات أو عقود ذكية. يتم بدء المعاملة بواسطة تطبيق المستخدم وينتهي بسجل في السجل الموزع.
القناة عبارة عن شبكة فرعية مغلقة تتكون من مشاركين أو أكثر في شبكة blockchain ، وهي مصممة لإجراء معاملات سرية داخل دائرة محدودة ولكن معروفة من المشاركين. يتم تعريف القناة من قبل المشاركين ، سجلها الموزع ، العقود الذكية ، خدمة الطلب ، WorldState. يجب أن يُسمح لكل عضو في القناة بالوصول إلى القناة وله الحق في إجراء أنواع مختلفة من المعاملات. يتم إجراء التفويض باستخدام خدمة العضوية.
سيناريو تنفيذ المعاملة النموذجي
بعد ذلك ، أود أن أتحدث عن سيناريو نموذجي لتنفيذ المعاملات باستخدام مشروعنا كمثال.
كجزء من مشروعنا الداخلي ، أنشأنا شبكة Hyperledger Fabric ، المصممة لتسجيل وتسجيل الطلاب الذين يدخلون الجامعات. تتكون شبكتنا من منظمتين تابعتين للجامعة A و University B. تحتوي كل مؤسسة على تطبيق عميل ، بالإضافة إلى نظير Committing and Endorsing. نحن نستخدم أيضًا خدمة الطلب على الخدمات المشتركة وخدمة الميمبرز وشهادة التصديق.
1) بدء المعاملات
يبدأ تطبيق المستخدم ، باستخدام Hyperledger Fabric SDK ، في طلب معاملة وإرسال طلب إلى العقد بعقود ذكية. قد يكون طلب التعديل أو القراءة من سجل موزع (دفتر الأستاذ). إذا أخذنا في الاعتبار مثالًا على تكوين اختبار نظامنا لطلاب جامعة المحاسبة ، فإن تطبيق العميل يرسل طلب معاملة إلى العقدتين الجامعتين A و B ، والتي يتم تضمينها في سياسة المصادقة الخاصة بالعقد الذكي المسمى. العقدة A هي عقدة موجودة في جامعة تسجل طالبًا واردة ، والعقدة B هي عقدة موجودة في جامعة أخرى. حتى يتم تخزين المعاملة في سجل موزع ، من الضروري أن توافق جميع العقد التي وفقًا لمنطق الأعمال على المعاملة بنجاح العقود الذكية مع نفس النتيجة. العقدة A تطبيق المستخدم ، باستخدام أدوات Hyperledger Fabric SDK ، يتلقى سياسة المصادقة ويعرف أي العقد تحتاج إلى إرسال طلب معاملة إلى. هذا طلب لاستدعاء عقد ذكي محدد (وظيفة chaincode) لقراءة أو كتابة بيانات معينة إلى سجل موزع. من الناحية الفنية ، يستخدم SDK للعميل الوظيفة المقابلة ، والتي تقوم واجهة برمجة التطبيقات بتمرير كائن به معلمات المعاملة ، وتضيف أيضًا توقيع العميل وترسل هذه البيانات عبر المخزن المؤقت للبروتوكول عبر gRPC إلى العقد المقابلة (أقران أقرانهم).

صورة 2. بدء المعاملة
2) الوفاء بعقد ذكي
العقد (Endorsing أقران) ، بعد تلقي طلب معاملة ، والتحقق من توقيع العميل ، وإذا كان كل شيء على ما يرام ، فإنها تأخذ كائن مع بيانات الطلب والبدء في محاكاة تنفيذ العقد الذكي (وظيفة chaincode) مع هذه البيانات. يعتبر العقد الذكي منطقًا تجاريًا لمعاملة ما ، ومجموعة معينة من الشروط والتعليمات (في حالتنا ، يكون التحقق من الطالب ، أو طالبًا جديدًا ، أو هل هو مسجل بالفعل ، أو التحقق من العمر ، وما إلى ذلك). لتنفيذ عقد ذكي ، ستحتاج أيضًا إلى بيانات من WorldState. نتيجة لمحاكاة العقد الذكي على نظير Endorsing ، يتم الحصول على مجموعتي بيانات - مجموعة القراءة والكتابة. تعد مجموعة القراءة والكتابة هي القيم الأصلية والجديدة لـ WorldState. (جديد - بالمعنى الذي تم الحصول عليه أثناء محاكاة عقد ذكي).

صورة 3. تنفيذ عقد ذكي
3) إعادة البيانات إلى تطبيق العميل
بعد محاكاة العقد الذكي ، تُرجع Endorsing Peers إلى تطبيق العميل البيانات الأولية ونتائج المحاكاة ، بالإضافة إلى مجموعة RW الموقعة بشهادتهم. في هذه المرحلة ، لا توجد تغييرات على السجل الموزع. يتحقق تطبيق العميل من توقيع Endorsing Peer ، كما يقارن البيانات المصدر للمعاملة التي تم إرسالها والبيانات التي تم إرجاعها (أي ، يتحقق ما إذا كانت البيانات المصدر التي تمت محاكاة المعاملة عليها مشوهة). إذا كانت المعاملة مخصصة فقط لقراءة البيانات من السجل ، فإن تطبيق العميل يتلقى وفقًا لذلك مجموعة القراءة الضرورية وهذا عادة ما يكمل المعاملة بنجاح دون تغيير السجل الموزع. في حالة المعاملة التي من المفترض أن تغير البيانات في السجل ، يتحقق تطبيق العميل بالإضافة إلى ذلك من تنفيذ سياسة المصادقة. من الممكن ألا يتحقق تطبيق العميل من نتيجة "سياسة الإقرار" ، ولكن توفر منصة Hyperledger Fabric في هذه الحالة فحص السياسات على العقد (Comitting Peers) في مرحلة إضافة معاملة إلى السجل.

صورة 4. إعادة البيانات إلى تطبيق العميل
4) إرسال مجموعات RW إلى ترتيب الأقران
يرسل تطبيق العميل المعاملة مع البيانات المرتبطة إلى خدمة الطلب. يتضمن ذلك مجموعة RW ، أقران أقرانهم ، ومعرف القناة.
طلب الخدمة - بناءً على الاسم ، فإن الوظيفة الرئيسية لهذه الخدمة هي بناء المعاملات الواردة بالترتيب الصحيح. بالإضافة إلى تكوين كتلة جديدة من السجل الموزع والتسليم المضمون للكتل المشكلة الجديدة إلى جميع العقد Commiting ، وبالتالي ضمان اتساق البيانات على جميع العقد التي تحتوي على السجل الموزع (Commiting أقرانهم). في الوقت نفسه ، لا تغير خدمة الطلب نفسها التسجيل بأي طريقة. تعتبر خدمة الطلب مكونًا حيويًا في النظام ، لذا فهي مجموعة من عدة عقد. لا تتحقق "خدمة الطلب" من المعاملة للتأكد من صحتها ، فهي ببساطة تقبل المعاملة بمعرف قناة محدد ، وترتب المعاملات الواردة في ترتيب معين وتشكل كتل جديدة من السجل الموزع منها. يمكن لخدمة الطلب الواحد أن تخدم عدة قنوات في وقت واحد. تشتمل "خدمة الطلب" على مجموعة "كافكا" التي تدعم قائمة انتظار المعاملات الصحيحة (بدون تغيير) (انظر الفقرة 7).

الصورة 5. تقديم مجموعات RW إلى ترتيب الأقران
يتم إرسال الكتل المشكلة في خدمة الطلب إلى جميع عقد الشبكة. كل عقدة ، بعد أن حصلت على كتلة جديدة ، تتحقق من توافقها مع سياسة الإقرار ، وتتحقق من أن جميع أقران الإقران تلقوا نفس النتيجة (مجموعة الكتابة) نتيجة لمحاكاة عقد ذكي ، وكذلك بالتحقق مما إذا كانت القيم الأولية قد تغيرت (أي - قراءة مجموعة - قراءة البيانات بواسطة عقد ذكي من WorldState) منذ بدء المعاملة. في حالة استيفاء جميع الشروط ، تكون المعاملة صالحة ؛ وإلا ، فإن المعاملة تتلقى حالة غير صالحة.

صورة 6. إرسال كتل مشكلة إلى Committing Peer
6) إضافة كتلة إلى التسجيل
تضيف كل عقدة معاملة إلى نسختها المحلية من السجل الموزع ، وإذا كانت المعاملة صالحة ، فسيتم تطبيق مجموعة الكتابة على WorldState (الحالة الحالية) ، وبالتالي ، يتم تسجيل قيم جديدة للكائنات التي تأثرت بالمعاملة. إذا تلقت المعاملة علامة - غير صالحة (على سبيل المثال ، حدثت معاملتان بنفس الكائنات داخل نفس الكتلة ، فستتحول إحدى المعاملات إلى أنها غير صالحة ، حيث إن القيم الأولية قد تم تغييرها بالفعل بواسطة المعاملة الأخرى). تتم إضافة هذه المعاملة أيضًا إلى السجل الموزع برمز غير صالح ، ولكن لا تنطبق "مجموعة الكتابة" من هذه المعاملة على الحالة الحالية لـ WorldState ، وبالتالي لا تقوم بتعديل الكائنات المشاركة في المعاملة. بعد ذلك ، يتم إرسال إشعار إلى تطبيق المستخدم بأن المعاملة تتم إضافتها إلى الأبد إلى السجل الموزع ، وكذلك حالة المعاملة ، هل هي صالحة أم لا ...

صورة 7. إضافة كتلة إلى التسجيل
خدمة الطلب
تتكون "خدمة الطلب" من مجموعة "كافكا" مع عقد "حديقة الحيوان" المقابلة وعقد "خدمة الطلب" (OSN) ، والتي تقع بين عملاء خدمة "الطلب" و "مجموعة كافكا". يعد Kafka Cluster نظامًا أساسيًا لتوزيع التدفق (المراسلة) متسامح مع الخطأ. كل قناة (موضوع) في كافكا هي سلسلة ثابتة من السجلات التي تدعم فقط إضافة سجل جديد (حذف سجل حالي غير ممكن). ويرد أدناه توضيح لهيكل الموضوع. إنها خاصية Kafka التي يتم استخدامها لبناء منصة blockchain.

مأخوذة من kafka.apache.org
صورة 8. ترتيب هيكل خدمة الموضوع
روابط مفيدة
Youtube - بناء blockchain للعمل مع Hyperledger Project
مستندات Hyperledger النسيج
نسيج Hyperledger: نظام تشغيل موزع للكتل المسموح بها
شكر
أعرب عن عميق امتناني للمساعدة في إعداد المقال لزملائي:
نيكولاي مارينا
ايجور هابوف
ديمتري غورباتشوف
ألكساندر زيمتسوف
ايكاترينا كوردينكوفا
ايكاترينا جوسيفا