كيفية بناء شبكة blockchain باستخدام Hyperledger Fabric and Composer

برنامج تعليمي لمطوري blockchain الجدد

قبل أن أبدأ ، يعمل Hyperledger Fabric فقط على أنظمة التشغيل المستندة إلى Unix. نتيجة لذلك ، لن يكون قادرًا على العمل على Windows وستكون لديك قيود على ما يمكنك القيام به. أقترح إعداد جهاز افتراضي إذا كنت تقوم بتشغيل Windows قبل المتابعة.

تفترض هذه المقالة بعض المعرفة بجافا سكريبت. إنه ليس برنامجًا تعليميًا موجهًا للمبرمجين المبتدئين ، بل يستهدف المبرمجين المبتدئين في مجال blockchain.

ماذا نبني؟

إذن ، هل تريد إنشاء تطبيق blockchain ولكن ليس لديك فكرة من أين تبدأ؟ لا تقلق. من خلال هذا البرنامج التعليمي ، سننشئ شبكة بطاقات تداول. سيتمكن الأشخاص المختلفون Traderالذين يمتلكون TradingCardلاعبي البيسبول وكرة القدم والكريكيت من تبادل البطاقات فيما بينهم.

سنقوم أيضًا بإعداد خادم REST API للسماح لبرنامج العميل بالتفاعل مع شبكة أعمالنا. أخيرًا ، سننشئ أيضًا تطبيق Angular 4 الذي يستخدم واجهة برمجة تطبيقات REST للتفاعل مع شبكتنا.

يمكنك العثور على الكود النهائي الكامل لما نحن على وشك البناء عليه في Github repo

هل أنت مستعد للبدء؟

جدول المحتويات

  • مقدمة في Hyperledger Fabric والتطبيقات ذات الصلة
  • تثبيت المتطلبات الأساسية والأدوات ووقت تشغيل Fabric
  • إنشاء ونشر شبكة أعمالنا
  • اختبار شبكة أعمالنا
  • إنشاء خادم REST API
  • إنشاء تطبيق Angular يستخدم واجهة برمجة تطبيقات REST

مقدمة في Hyperledger Fabric والتطبيقات ذات الصلة

Hyperledger Fabric هو إطار عمل مفتوح المصدر لإنشاء شبكات أعمال بلوكشين خاصة (مرخصة) ، حيث تُعرف هويات وأدوار الأعضاء للأعضاء الآخرين. تعمل الشبكة المبنية على القماش كطرف خلفي ، مع واجهة أمامية للتطبيق من جانب العميل. تتوفر SDK لـ Nodejs و Java لبناء تطبيقات العميل ، مع دعم Python و Golang قريبًا.

Hyperledger Composer عبارة عن مجموعة من الأدوات والبرامج النصية المستندة إلى Javascript والتي تبسط إنشاء شبكات Hyperledger Fabric. باستخدام هذه الأدوات ، يمكننا إنشاء أرشيف لشبكة الأعمال (BNA) لشبكتنا . يغطي الملحن بشكل عام هذه المكونات:

  • أرشيف شبكة الأعمال (BNA)
  • ملعب الملحن
  • خادم REST الملحن

أرشيف شبكة الأعمال - يسمح لنا الملحن بتجميع بعض الملفات المختلفة وإنشاء أرشيف يمكن نشره بعد ذلك على شبكة Fabric. لإنشاء هذا الأرشيف ، نحتاج إلى:

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

Composer Playground هي واجهة مستخدم قائمة على الويب يمكننا استخدامها لتصميم واختبار شبكة أعمالنا. يعد Playground مفيدًا لنمذجة إثباتات بسيطة للمفهوم ، حيث يستخدم التخزين المحلي للمتصفح لمحاكاة شبكة blockchain. ومع ذلك ، إذا كنا نقوم بتشغيل وقت تشغيل Fabric محلي ونشرنا شبكة إليه ، فيمكننا أيضًا الوصول إليه باستخدام Playground. في هذه الحالة ، لا يحاكي Playground الشبكة ، بل يتواصل مع وقت تشغيل Fabric المحلي مباشرةً.

Composer REST Server هي أداة تتيح لنا إنشاء خادم REST API استنادًا إلى تعريف شبكة الأعمال لدينا. يمكن استخدام واجهة برمجة التطبيقات هذه بواسطة تطبيقات العميل وتسمح لنا بدمج تطبيقات غير blockchain في الشبكة.

تثبيت المتطلبات الأساسية والأدوات ووقت تشغيل Fabric

1. تثبيت الشروط المسبقة

الآن بعد أن أصبح لدينا فهم عالي المستوى لما هو مطلوب لبناء هذه الشبكات ، يمكننا البدء في التطوير. قبل أن نفعل ذلك ، نحتاج إلى التأكد من أن لدينا المتطلبات الأساسية مثبتة على نظامنا. يمكن العثور على قائمة محدثة هنا.

  • محرك Docker و Docker Compose
  • Nodejs و NPM
  • شخص سخيف
  • Python 2.7.x

بالنسبة لمستخدمي Ubuntu ، يحتوي Hyperledger على برنامج نصي bash متاح لجعل هذه العملية سهلة للغاية. قم بتشغيل الأوامر التالية في جهازك الطرفي:

لسوء الحظ ، يتعين على مستخدمي Mac تثبيت الأدوات المذكورة أعلاه يدويًا والتأكد من توفر جميع المتطلبات الأساسية على نظامهم. يتم تحديث هذه الصفحة بإرشادات التثبيت.

2. تركيب الأدوات لتسهيل التطوير

قم بتشغيل الأوامر التالية في الوحدة الطرفية الخاصة بك ، وتأكد من أنك لا تستخدم sudo عند تشغيل أوامر npm.

composer-cli هي الحزمة الأساسية الوحيدة. البقية ليست مكونات أساسية ولكنها ستصبح مفيدة للغاية بمرور الوقت. سوف نتعلم المزيد حول ما يفعله كل من هؤلاء عندما نصادفهم.

3. تثبيت وقت التشغيل المحلي Hyperledger Fabric

دعنا نذهب من خلال الأوامر ونرى ما تعنيه. أولاً ، نقوم بإنشاء دليل جديد وإدخاله. بعد ذلك ، نقوم بتنزيل واستخراج الأدوات المطلوبة لتثبيت Hyperledger Fabric.

نحدد بعد ذلك إصدار Fabric الذي نريده ، في وقت كتابة هذا التقرير نحتاج إلى 1.2 ، ومن ثم hlfv12 . بعد ذلك ، نقوم بتنزيل وقت تشغيل النسيج وبدء تشغيله.

أخيرًا ، نقوم بإنشاء PeerAdminبطاقة. يمكن للمشاركين في شبكة Fabric الحصول على بطاقات شبكة عمل مماثلة لبطاقات العمل الواقعية. كما ذكرنا سابقًا ، تعد Fabric طبقة أساسية لبناء سلاسل الكتل الخاصة عليها. يتمتع حامل بطاقة العمل PeerAdmin بصلاحية نشر شبكات الأعمال وحذفها وإدارتها في وقت تشغيل Fabric هذا (ويعرف أيضًا بك!)

إذا سارت الأمور على ما يرام ، فسترى ناتجًا مثل هذا:

أيضًا ، إذا lsكتبت ، فسترى هذا:

ما فعلناه هنا هو مجرد تنزيل وبدء شبكة محلية من النسيج. يمكننا التوقف عن الاستخدام ./stopFabric.shإذا أردنا ذلك. في نهاية جلسة التطوير لدينا ، يجب أن نجري./teardownFabric.sh

ملاحظة: من المفترض أن يتم تشغيل وقت التشغيل المحلي هذا وإيقافه وهدمه بشكل متكرر للاستخدام في التطوير. لوقت تشغيل مع حالة أكثر ثباتًا ، ستحتاج إلى نشر الشبكة خارج بيئة التطوير. يمكنك القيام بذلك عن طريق تشغيل الشبكة على Kubernetes أو على الأنظمة الأساسية المدارة مثل IBM Blockchain. ومع ذلك ، يجب عليك متابعة هذا البرنامج التعليمي أولاً للحصول على فكرة.

إنشاء ونشر شبكة أعمالنا

حفظ الحزم yoو generator-hyperledger-composerقمنا بتثبيت في وقت سابق؟

yoيوفر لنا نظامًا بيئيًا للمولدات حيث تكون المولدات عبارة عن مكونات إضافية يمكن تشغيلها باستخدام الأمر yo. يستخدم هذا لإعداد تطبيقات نموذج معياري لمختلف المشاريع. generator-hyperledger-composerهو منشئ Yo الذي سنستخدمه لأنه يحتوي على مواصفات لإنشاء شبكات أعمال معيارية من بين أشياء أخرى.

1. إنشاء شبكة أعمال

افتح Terminal في دليل من اختيارك واكتب yo hyperledger-composer

سيتم الترحيب بك بشيء مشابه لما سبق. حدد Business Networkوقم بتسميته cards-trading-networkكما هو موضح أدناه:

2. نمذجة شبكة أعمالنا

الخطوة الأولى والأكثر أهمية نحو إنشاء شبكة أعمال هي تحديد الموارد الموجودة. لدينا أربعة أنواع من الموارد في لغة النمذجة:

  • الأصول
  • المشاركين
  • المعاملات
  • الأحداث

بالنسبة لنا cards-trading-network، سنحدد نوع الأصل ونوع TradingCardالمشارك Traderوالمعاملة TradeCardوالحدث TradeNotification.

انطلق وافتح الملفات التي تم إنشاؤها في محرر كود من اختيارك. افتح org.example.biznet.ctoأي ملف النمذجة. احذف كل الكود الموجود فيه لأننا سنعيد كتابته (باستثناء إعلان مساحة الاسم).

هذا يحتوي على مواصفات الأصول الخاصة بنا TradingCard. يجب أن يكون لدى جميع الأصول والمشاركين معرف فريد لهم والذي نحدده في الكود ، وفي حالتنا ، هوcardId

أيضًا ، تمتلك أصولنا GameType cardTypeخاصية تستند إلى العداد المحدد أدناه. يتم استخدام Enums لتحديد نوع يمكن أن يحتوي على ما يصل إلى N من القيم المحتملة ، ولكن لا شيء آخر. في هذا المثال، لا TradingCardيمكن أن يكون لها cardTypeبخلاف Baseball، FootballأوCricket

الآن ، لتحديد Traderنوع مورد المشارك ، أضف الكود التالي في ملف النمذجة

هذا أبسط نسبيًا ويسهل فهمه. لدينا نوع مشارك Traderويتم التعرف عليهم بشكل فريد من خلال traderIdأنواعهم.

الآن ، نحتاج إلى إضافة مرجع إلى TradingCardبطاقاتنا للحصول على مرجع يشير إلى مالكها حتى نعرف من تنتمي البطاقة. للقيام بذلك ، أضف السطر التالي داخل TradingCardالأصل الخاص بك :

--> Trader owنير

بحيث يبدو الرمز بالشكل التالي:

هذه هي المرة الأولى التي استخدمنا فيها --&gt ؛ ولا بد أنك تتساءل ما هذا. هذه علاقة بوانت r. oa nd -> كيف نفرق بين خصائص المورد الخاصة مقابل العلاقة بنوع مورد آخر. نظرًا لأن المالك is a Trader وهو مشارك في الشبكة ، فإننا نريد مرجعًا إلى that Trader مباشرة ، وهذا بالضبط whفي -> يفعل.

أخيرًا ، امض قدمًا وأضف هذا الرمز في ملف النمذجة الذي يحدد المعلمات المطلوبة لإجراء معاملة وإصدار حدث.

3. إضافة منطق لمعاملاتنا

لإضافة منطق خلف TradeCardالوظيفة ، نحتاج إلى ملف منطق جافا سكريبت. أنشئ دليلًا جديدًا باسم libمجلد مشروعك وأنشئ ملفًا جديدًا باسم logic.jsالكود التالي:

ملاحظة: المصمم في التعليقات أعلاه الوظيفة مهم جدا. بدون ال @param {org.example.biznet.TradingCard} trade، ليس للوظيفة أي فكرة Transactionعن الرمز الذي يشير إليه من لغة النمذجة تأكد أيضًا من أن اسم المعلمة الذي يتم تمريره (أي trade) هو الاسم الذي تمرره في تعريف الوظيفة بعد ذلك مباشرة.

يتحقق هذا الرمز بشكل أساسي مما إذا كانت البطاقة المحددة بها forTrade == trueويقوم بتحديث مالك البطاقة في هذه الحالة. بعد ذلك ، يتم تشغيل TradeNotificationالحدث لهذه البطاقة.

4. تحديد الأذونات وقواعد الوصول

أضف قاعدة جديدة permissions.aclلمنح المشاركين الوصول إلى مواردهم. في الإنتاج ، قد ترغب في أن تكون أكثر صرامة مع قواعد الوصول هذه. يمكنك معرفة المزيد عنهم هنا.

5. إنشاء أرشيف شبكة الأعمال (BNA)

الآن وقد تم الانتهاء من جميع عمليات الترميز ، فقد حان الوقت لإنشاء ملف أرشيف لشبكة أعمالنا حتى نتمكن من نشره في وقت تشغيل Fabric المحلي. للقيام بذلك ، افتح Terminal في دليل المشروع واكتب هذا:

composer archive create --sourceType dir --sourceName .

يخبر هذا الأمر Hyperledger Composer أننا نريد إنشاء BNA من دليل وهو مجلد الجذر الحالي.

ملاحظة: اسم وإصدار BNA يأتيان من package.jsonالملف. عند إضافة المزيد من التعليمات البرمجية ، يجب عليك تغيير رقم الإصدار هناك لنشر أرشيفات فريدة قادرة على ترقية شبكات الأعمال الحالية.

6. تثبيت ونشر ملف BNA

يمكننا تثبيت ونشر الشبكة في وقت تشغيل Fabric المحلي الخاص بنا باستخدام PeerAdminالمستخدم. لتثبيت شبكة الأعمال ، اكتب

composer network install --archiveFile [email protected] --card [email protected]

لنشر شبكة الأعمال ، اكتب

composer network start --networkName cards-trading-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card [email protected] --file cards-trading-admin.card

و networkNameو networkVersionيجب أن تكون هي نفسها كما هو محدد في حياتك package.jsonوإلا فإنه لن ينجح.

--fileيأخذ اسم الملف الذي سيتم إنشاؤه لبطاقة عمل هذه الشبكة. يجب استيراد هذه البطاقة بعد ذلك حتى يمكن استخدامها عن طريق الكتابة

composer card import --file cards-trading-admin.card

رائعة حقا. يمكننا الآن التأكد من أن شبكتنا تعمل عن طريق الكتابة

composer network ping --card [email protected]

--card تأخذ هذه المرة بطاقة المسؤول الخاصة بالشبكة التي نريد إجراء الأمر ping عليها.

إذا سارت الأمور على ما يرام ، يجب أن ترى شيئًا مشابهًا لهذا:

اختبار شبكة أعمالنا

الآن بعد أن أصبحت شبكتنا تعمل على Fabric ، يمكننا بدء Composer Playground للتفاعل معها. للقيام بذلك ، اكتب composer-playgroundTerminal وافتح //localhost:8080/في متصفحك وسترى شيئًا مشابهًا لهذا:

اضغط على Connect Now من أجل [email protected]وستتم استقبالك بهذه الشاشة:

ل تحديد الصفحة هي حيث يمكننا إجراء تغييرات على الكود، نشر هذه التغييرات إلى ترقية شبكتنا، والمحفوظات شبكة أعمال التصدير.

توجه إلى صفحة الاختبار من القائمة العلوية ، وسترى هذا:

اختر Traderمن بين المشاركين ، وانقر على إنشاء مشارك جديد بالقرب من أعلى اليمين ، وقم بعمل جديد Traderمشابه لهذا:

انطلق واصنع المزيد من الصور Trader. إليكم كيف يبدو التجار الثلاثة لديّ مع الأسماء Haardik و John و Tyrone.

الآن ، لنصنع بعض الأصول. انقر فوق TradingCardمن القائمة اليسرى واضغط على Create New Asset . لاحظ كيف أن ownerالمجال مثير للاهتمام بشكل خاص هنا ، حيث يبدو شيئًا كهذا:

هذه علاقة. هذا ما --&gt؛ يعني. نحدد نوع المورد الدقيق متبوعًا بمعرفهم الفريد وفويلا ، لدينا مؤشر علاقة.

انطلق وقم بإنهاء عمل TradingCardشيء مشابه لهذا:

لاحظ كيف ownerتشير الحقول إلى Trader#1الملقب Haardikبالنسبة لي. forTradeانطلق واصنع بضع بطاقات أخرى ، وقم بتمكين الزوجين من التعيين على صحيح.

لاحظ كيف لي Card#2له forTrade == true؟

الآن من أجل الأشياء الممتعة ، لنجرب بطاقات التداول: د

انقر على إرسال عملية في الجهة اليسرى وجعل cardأشر إلى TradingCard#2و newOwnerأشر إلى Trader#3مثل هذا:

اضغط على إرسال وألق نظرة على صورك TradingCard، وسترى أن Card#2مالكها الآن Trader#3: د

إنشاء خادم REST API

إجراء المعاملات مع Playground أمر جميل ، ولكنه ليس مثاليًا. يتعين علينا أن نصنع برامج من جانب العميل للمستخدمين لتزويدهم بتجربة سلسة ، ولا يتعين عليهم بالضرورة معرفة تقنية blockchain الأساسية. للقيام بذلك ، نحتاج إلى طريقة أفضل للتفاعل مع شبكة أعمالنا. لحسن الحظ ، لدينا composer-rest-serverالوحدة لمساعدتنا في ذلك.

اكتب composer-rest-serverTerminal ، [email protected]وحدد ، وحدد عدم استخدام مساحات الأسماء مطلقًا ، وتابع مع الخيارات الافتراضية للباقي على النحو التالي:

افتح //localhost:3000/explorer/وسيتم استقبالك بنسخة موثقة من REST API التي تم إنشاؤها تلقائيًا: D

إنشاء تطبيق Angular يستخدم واجهة برمجة تطبيقات REST

تذكر yo hyperledger-composerالمولد؟ يمكنها أن تفعل أكثر من مجرد إنشاء شبكة أعمال. يمكنه أيضًا إنشاء تطبيق Angular 4 يعمل مقابل REST API الذي أنشأناه أعلاه.

لإنشاء تطبيق الويب Angular ، اكتب yo hyperledger-composerTerminal ، وحدد Angular ، واختر الاتصال بشبكة أعمال حالية باستخدام البطاقة [email protected]، والاتصال بواجهة برمجة تطبيقات REST موجودة أيضًا. ( تحرير: قد تطلب الإصدارات الأحدث من البرنامج ملف البطاقة بدلاً من اسم البطاقة فقط)

سيستمر تشغيل هذا npm install، امنحه دقيقة ، وبمجرد الانتهاء من كل شيء ، ستتمكن من التحميل //localhost:4200/والاستقبال بصفحة مشابهة لهذه:

تحرير: قد تتطلب منك الإصدارات الأحدث من البرنامج تشغيل npm installنفسك ثم تشغيلهاnpm start

يمكنك الآن اللعب بشبكتك من هذا التطبيق مباشرة ، والتي تتصل بالشبكة من خلال خادم REST الذي يعمل على المنفذ 3000.

تهانينا! لقد قمت للتو بإعداد أول شبكة أعمال blockchain باستخدام Hyperledger Fabric و Hyperledger Composer: D.

يمكنك إضافة المزيد من الميزات إلى شبكة تداول البطاقات وتحديد الأسعار على البطاقات وإعطاء رصيد للجميع Trader. يمكنك أيضًا الحصول على المزيد من المعاملات التي تسمح لـ Traders بتبديل قيمة forTrade. يمكنك دمج هذا مع تطبيقات غير blockchain والسماح للمستخدمين بشراء بطاقات جديدة تتم إضافتها إلى حساباتهم ، والتي يمكنهم بعد ذلك تداولها على الشبكة.

الاحتمالات لا حصر لها ، فماذا ستستفيد منها؟ اسمحوا لي أن أعرف في التعليقات: د

خطأ معروف: هل لا يتعامل تطبيق الويب Angular الخاص بك مع المعاملات بشكل صحيح؟

في وقت كتابة هذا التقرير ، يواجه المولد الزاوي مشكلة حيث لا يقوم زر Invoke الأرجواني في صفحة المعاملات بأي شيء. لإصلاح ذلك ، نحتاج إلى إجراء بعض التغييرات على التطبيق الزاوي الذي تم إنشاؤه.

1. احصل على مشروط لفتح عند الضغط على الزر

التغيير الأول الذي نحتاج إلى إجرائه هو جعل الزر يفتح النافذة المشروطة. يحتوي الكود بالفعل على النافذة المشروطة المطلوبة ، فالزر يفتقد فقط إلى السمات (click)و data-target.

لحل هذا ، افتح /cards-trading-angular-app/src/app/TradeCard/TradeCard.component.html

يمكن أن يختلف اسم الملف بناءً على transactionاسمك. إذا كان لديك عدة ملفات transactionفي شبكة عملك ، فسيتعين عليك إجراء هذا التغيير عبر جميع ملفات HTML من نوع مورد المعاملة.

قم بالتمرير لأسفل حتى النهاية وسترى ملف on> tag. Go ahead and add these two attributes to that tag:

(click)="resetForm();" data-target="#addTransactionModal"

so the line looks like this:

Invoke<;/button>

The (click) attribute calls resetForm(); which sets all the input fields to empty, and data-target specifies the modal window to be opened upon click.

Save the file, open your browser, and try pressing the invoke button. It should open this modal:

2. Removing unnecessary fields

Just getting the modal to open isn’t enough. We can see it requests transactionId and timestamp from us even though we didn’t add those fields in our modeling file. Our network stores these values which are intrinsic to all transactions. So, it should be able to figure out these values on it’s own. And as it turns out, it actually does. These are spare fields and we can just comment them out, the REST API will handle the rest for us.

In the same file, scroll up to find the input fields and comment out the divs responsible for those input fields inside addTransactionModal

Save your file, open your browser, and press Invoke. You should see this:

You can now create transactions here by passing data in these fields. Since card and newOwner are relationships to other resources, we can do a transaction like this:

Press Confirm, go back to the Assets page, and you will see that TradingCard#2 now belongs to Trader#1:

Congratulations! You have successfully built and deployed a blockchain business network on Hyperledger Fabric. You also generated a REST API server for that network and learnt how to make web apps which interact with that API.

If you have any questions or doubts, drop it in the comments and I will get back to you.

Email: [email protected]

LinkedIn: //www.linkedin.com/in/haardikkk