كيفية إنشاء كاتب عدل على كتلة سلسلة Ethereum - الجزء 2

ستنشئ تطبيقًا لامركزيًا ينشر شهادات رسمية إلى Ethereum في هذا البرنامج التعليمي

في الجزء 1 ، أنشأنا عقدًا ذكيًا لتمثيل الشهادات.

دعنا ننهي عقد المصنع المسؤول عن نشر وإدارة عقود الشهادة الخاصة بك. أخيرًا ، سوف نستخدم Next.js للالتفاف على واجهة أمامية بسيطة لتمكين أي شخص من إنشاء شهادة على DApp عبر واجهة مستخدم نموذجية:

عرض عرض توضيحي مباشر للمنتج النهائي على https://www.forevermore.io/

هيا بنا نبدأ! إليك تمثيل رسومي لما سنفعله.

انظر الجزء 1 حول كيفية جعل عقود الشهادة.

الخطوة 1 - إنشاء عقد المصنع

  1. في ملف Wedding.sol نفسه كعقد الشهادة ، قم بإنشاء عقد زواج الزواج (أو عقد الزواج):
براغما صلابة ^ 0.4.19 ؛
عقد زواج
    // لكى يفعل
}
عقد زواج {...}

على وجه التحديد ، فإن عقد المصنع هذا سوف:

  • إنشاء شهادة ذكية جديدة العقد
  • تتبع قائمة الشهادات التي تم إنشاؤها مسبقا

2. لنقم بتخزين قائمة العقود التي تم إنشاؤها مسبقًا في مجموعة من العناوين. يجب أن يكون متغير الصفيف قابلاً للعرض من قِبل أي شخص ، على سبيل المثال ، برنامج التفاف الواجهة الأمامية الذي سيعرض الشهادات السابقة.

العنوان [] مسجلة الزواج العام ؛

أفضل نصائح الممارسة:

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

3. بعد ذلك ، أعلن وظيفة لإنشاء شهادات الزواج في المستقبل. سيتصل المستخدمون بهذه الوظيفة بأنفسهم ، مع تفاصيل مثل أسماء الزوجين ووعودهما.

وظيفة createMarriage (string _leftName ، string _leftVows ، string _rightName ، string _rightVows، uint _date) public {
}

4. إنشاء عقد زواج جديد وحفظ عنوان العقد الذكي الذي تم إنشاؤه حديثًا. تذكر أن تدفع العنوان إلى صفحتك من الزيجات المسجلة.

وظيفة createMarriage (...) عامة {
    عنوان newMarriage = زواج جديد (msg.sender ، _leftName ، _leftVows ، _rightName ، _rightVows ، _date) ؛
    
    // حفظ العنوان حتى يتمكن عميل الواجهة الأمامية من العثور عليه
    registeredMarriages.push (newMarriage)؛
}

دعونا نفكر في التفاعل الأمامي لمدة دقيقة هنا. عندما تنشئ عقد زواج جديد ، فإن الأمر يستغرق وقتًا حتى يتم كتابة عقد الشهادة الجديد إلى blockchain.

ملاحظة: createMarriage هو إرسال () إلى blockchain الذي "يعد" بإرجاع صواب أو خطأ ، اعتمادًا على نجاح المعاملة. لن يُرجع أي قيم ، مثل عنوان العقد الجديد ، إلى العميل الأمامي. وبالتالي ، لن يعرف عميل الويب الخاص بك على الفور العنوان بعد إرسال طلب createMarriage.
نظرًا لأننا نريد إعادة توجيه المستخدمين إلى هذا العقد الذي تم إنشاؤه حديثًا (عبر عنوانه) ، فسوف نحتاج إلى طريقة (رخيصة) لعقد المصنع للتواصل مع العميل بمجرد حل هذا "الوعد".

5. لنجعل هذا العقد ينبعث منه حدث لنقل هذه الرسالة.

الحدث ContractCreated (عنوان contractAddress) ؛
وظيفة createMarriage (...) عامة {
    ...
    تنبعث منها ContractCreated (newMarriage) ؛
    ...
}

أفضل نصائح الممارسة:

  • استخدم الأحداث كشكل "رخيص" للتخزين. هذا مفيد في Ethereum ، حيث التخزين مكلف.
  • استخدم الأحداث لتتبع سجل المستخدم أو اللحظات البارزة ، مثل نتائج عرض أسعار ، أو تم تغيير بعض السجلات في blockchain.
  • يتم تسجيل الأحداث على الشبكة ويمكن مشاهدتها بحرية من الواجهة الأمامية. بمعنى آخر. نرى هذا الحدث إلى الأبد حيث رن شخص ما جرس زفافي.
  • على الرغم من أن العقود تنبعث منها أحداث ، فإن الأحداث غير قابلة للقراءة من داخل العقد. إنه مخصص للعميل الخارجي.

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

الدالة getDeployedMarriages () عرض الإرجاع العام (العنوان []) {
 عودة الزيجات المسجلة ؛
}

تنويه:

  • يمنحك Solidity عرض وظائف لأنواع البيانات الثابتة مجانًا. هذا هو السبب في أنه يمكنك عرض uint عمومي دون دالة getUint () getter.
  • هذا لا ينطبق على المصفوفات. يجب أن تعلن عن وظيفة الاسترجاع الخاصة بك في هذه الحالة. يجب أن يرفع هذا أيضًا العلامات التي قد لا تكون getArrays () أفضل ممارسة للصفائف التي ستنمو بشكل كبير.

لقد أكملت جزء برمجة العقد الذكي في هذا البرنامج التعليمي! أحسنت.

الخطوة 2 - اختبار ونشر العقود الخاصة بك في ريميكس

Remix عبارة عن IDE عبر الإنترنت يقوم بتجميع واختبار ونشر عقودك لشبكات الاختبار مجانًا.

  1. انسخ الشفرة والصقها في IDE.
  2. التبديل إلى علامة التبويب ترجمة وحل أي أخطاء الترجمة. يعد Remix رائعًا في الإشارة إلى كل من المشكلة ويعلمك كيفية حلها. إذا كنت غير متأكد من الشفرة الخاصة بك في هذه المرحلة ، فيرجى الرجوع إلى ورقة الإحتيال هذه.
  3. قم بالتبديل إلى جدول Run والتأكد من ضبط البيئة على Javascript VM. يؤدي هذا إلى نشر العقد الخاص بك على جهاز افتراضي داخل متصفحك بدلاً من الشبكة الرئيسية أو شبكة الاختبار (التي تستغرق وقتًا أطول ويمكن أن تكلف مالًا).
  4. حدد المتزوج نوتاري من القائمة المنسدلة. انقر فوق نشر. تذكر أنك تعتمد على مصنع لإنشاء الشهادات ، وليس إنشاءها باليد!
  5. مشاهدة النشر تنجح :)
  6. عرض جميع الطرق المتاحة ضمن المتزوج ، بما في ذلك وظيفة إنشاء شهادات جديدة.

كاتب العدل الخاص بك هو الآن على blockchain الظاهري! هل لديك إنشاء شهادة عن طريق الكتابة داخل وظيفة createMarriage:

"ريك" ، "Get shwiftayyy" ، "Morty" ، "لا يوجد أحد عن قصد" ، 1532706206

تنويه:

  • يتم تخزين التاريخ مع uint ، لذلك استخدم محول عصر
  • لا تنسَ إدخال سلسلة نصية ، حيث إن ريمكس صارم في هذا الصدد
  1. ابحث عن العقدإدخال العنوان في وحدة التحكم ، والذي قمت بإصداره بشكل مريح في أحداث المتزوجين
  2. حدد الزواج من القائمة المنسدلة
  3. الصق عنوان العقد وانقر فوق "العنوان" لاسترداد مثيل عقد الزواج الذي أنشأته حديثًا
  4. المنسدلة لرؤية قائمة الوظائف والبيانات المتاحة في عقد الزواج
  5. النقر على LeftVows يجب أن يمنحك الآن "get shwiftayyy"

نشر كاتب العدل الخاص بك شهادة في blockchain الظاهري!

الخطوة 3 - نشر DApp الخاص بك إلى Ethereum

إصدار UI التالي لـ Forevermore.io - أي مساهم؟

إذا كنت ترغب في نشر العقود الخاصة بك إلى Ethereum بدون واجهة مستخدم ، يمكنك فقط استخدام Remix. هذا موصى به لنشر سريع للعقد فقط. ما عليك سوى تغيير بيئتك إلى Injected Web3 والتأكد من أن حساب Metamask يحتوي على ما يكفي من Ether لإكمال معاملة النشر.

لنشر العقد الخاص بك مع موقع ويب مصاحب ، هناك بعض الخيارات:

  1. استخدم Truffle: مستحسن لنشر DApp الكامل ، دون وجود الكثير من التكوينات
  2. استخدم قاعدة الشفرة إلى الأبد: مستحسن إذا كنت ترغب في تخصيص DApp هذا وجعله خاصًا بك. أنه يحتوي على برنامج ترجمة مخصص ونشر README.

ملحوظة:

Forevermore موجود على Next.js ، وهو إطار React الذي يتعامل مع العرض من جانب الخادم. يُعد Next.js متوافقًا بشكل كبير مع Web3 ، واجهة برمجة تطبيقات Ethereum javascript الفعلية.

التعليمات الكاملة لإعداد تبعيات DApp الكاملة موجودة في هذا README. يرجى بحرية شوكة ذلك وتقديم أي مشاكل إلى المساهمين مفتوحة المصدر هنا.

تريد المزيد؟

  • سنبدأ سلسلة تعلم أمن Ethereum وأفضل مبادئ التصميم بعد ذلك. تابعنا وابقوا معنا.

قروض

  • تحقق من التطبيق النهائي هنا والمشروع مفتوح المصدر الكامل هنا.
  • ائتمانات: دانيال (زوج المبرمج) ، ستيفن (دروس)