كيفية إنشاء شهادات على Ethereum blockchain - الجزء 1

في هذا البرنامج التعليمي ، ستنشئ تطبيقًا لا مركزيًا يتيح للمستخدمين إنشاء شهادات ذكية.

وضع كلماتك على blockchain يجعلها غير قابلة للتغيير. لن تعتمد على أي حكومات أو مؤسسات للحفاظ على سجلاتك. بدلاً من ذلك ، سوف نعتمد على أكثر من 16000 عقدة حول العالم ، ونعمل على تأمين الشبكة ، التي يملكها أشخاص مثلك أو مثلي.

سنستخدم شهادات الزواج كمثال عملي. سنمنح أيضًا عقود الشهادة هذه بعض القدرات الخاصة ، أي سجل زواج يمكنه قبول الهدايا.

الشكل: مثال عملي لشهادة زواج Ethereum في forevermore.io.

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

بحلول نهاية هذا البرنامج التعليمي ، ستعرف كيفية إنشاء عقود ذكية بسيطة والتفاعل معها ونشرها في سلسلة Ethereum blockchain.

إعداد البيئة

  1. تنزيل Metamask: معالج محفظة عبر الإنترنت [5 دقائق]. لا تقلق بشأن شراء مواد إثير حقيقية حتى الآن ، حيث يمكنك النشر على شبكات الاختبار أولاً.
  2. الوصول إلى ريمكس: لاستخدام Solidity IDE عبر الإنترنت [دقيقة واحدة]

العمارة DApp الشاملة

إليك تمثيل رسومي لما سنفعله. سنستخدم نمط المصنع لإنشاء عقد المصنع ، والذي بدوره سيولد عقود الشهادة الخاصة بنا.

في الجزء 1 من هذا البرنامج التعليمي ، سنركز فقط على عقد الشهادة.

هل هذا التشبيه المكدس تبدو مألوفة؟

  • على مستوى عالٍ ، يمكنك التفكير في blockchain كبديل للواجهات والخوادم التقليدية. لذلك عندما نبني هذه العقود ، فإننا في الواقع نقوم بتصميم هياكل البيانات ، وعلاقات البيانات في تطبيقنا.
  • نوصي نمط المصنع. تسهل عليك إنشاء وتتبع فئة محددة من العقود. المزيد عن هذا في الجزء 2.

الجزء 1 - بناء عقد الزواج

في هذا البرنامج التعليمي ، تحتاج عقود زواجك إلى:

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

هيا بنا نبدأ. في Remix ، قم بإنشاء ملف يسمى Wedding.sol باستخدام ما يلي:

// هذا يحدد إصدار برنامج التحويل البرمجي Solidity الذي ينشئ
/ / رموز التشغيل و ABI لتخزينها على blockchain
براغما صلابة ^ 0.4.19 ؛
عقد زواج
    / / سوف تعلن هنا عن vars العالمية
    المنشئ () العام {
        / / سوف تقوم بتفعيل عقدك هنا
    }
}

تنويه:

  • "الجمهور" هو معدّل وظيفة يتيح لأي شخص إنشاء مثيل جديد لعقد زواجك
  • تأكد من أنك تستخدم أحدث إصدار من برنامج التحويل البرمجي الثابت.

تخزين صاحب عقد الزواج

جميع المحافظ والعقود الذكية في Ethereum لها عناوين ، والتي تعمل بمثابة المعرفات الرئيسية.

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

  1. داخل العقد زواج {، حدد متغيرًا عالميًا لتخزين عنوان المالك.
// Set owner public var ، حتى يتمكن أي شخص من معرفة من يملك العقد
عنوان المالك العام ؛

إشعار: "العنوان" هو نوع بيانات في Solidity. يمكن أن تحدد العناوين إما عقدًا ذكيًا أو محفظة شخصية.

2. بعد ذلك ، احفظ العنوان في كل مرة يتم فيها إنشاء عقد شهادة جديد. تعديل وظيفة المنشئ الخاص بك على النحو التالي:

مُنشئ (عنوان _owner) عام {
    المالك = _المالك ؛
}

تنويه:

  • سوف نعتمد على عقد المصنع المستقبلي لاستدعاء وظيفة المنشئ هذه وتمرير عنوان المالك.
  • إذا لم نكن نعمل مع عقود المصانع ، فأنت ستعين المالك على "msg.sender" مساوي ، وهو العنوان الذي يحاول إنشاء هذا العقد.

تخزين أسماء الزوجين وعود الزواج

لا تتردد في الحصول على الإبداع هنا وتغيير العقد الذكي الخاص بك لتمثيل نوع مختلف من العقد القانوني أو الشهادة!

  1. أضف المتغيرات العامة التالية:
عقد زواج
// عنوان المالك
    عنوان المالك العام ؛
// تفاصيل عقد الزواج
    سلسلة leftName العامة ؛
    سلسلة leftVows العامة ؛
    سلسلة اسم اليمين العام ؛
    سلسلة rightVows العامة ؛
    تاريخ الزواج العام ؛
    مُنشئ (عنوان _owner ، string _leftName ، string _leftVows ، string _rightName ، string _rightVows ، uint _date) public {
        المالك = _المالك ؛
        leftName = _leftName ؛
        leftVows = _leftVows؛
        rightName = _rightName ؛
        rightVows = _rightVows؛
        تاريخ الزواج
    }
}

إشعار: بالإضافة إلى "العنوان" ، تتميز Solidity بأنواع البيانات الثابتة الأخرى مثل "string" و "uint". إليك نظرة أعمق على كيفية تخزين Ethereum للبيانات.

مبروك! لقد قمت بإنشاء كائن فئة زواج. سيكون هذا العقد الذكي هو قالب إنشاء عقود زواج مستقبلية على blockchain.

عقد الزواج الثابت الذي يعرض النص فقط ليس متعة. دعونا نشفّر بعض المنطق والأتمتة.

ألن يكون رائعًا إذا كان عقد زواجك يمكن أن يكون أيضًا سجل زفاف؟

السماح للناس هدية الإيثرات إلى العقد

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

  1. إنشاء دالة تسمى ringBell (). تقدم Ethereum وظيفة نوع "مستحقة الدفع" خاصة للتعامل مع هذه المعاملات النقدية:
// ringBell هي وظيفة مستحقة الدفع تسمح للناس بالاحتفال بزواج الزوجين عن طريق إرسال إثيرات إلى عقد الزواج
وظيفة ringBell () مستحقة الدفع {...}

وراء الكواليس ، تتلقى وظائف Solidity متغيرات مهمة:

  • msg.value: يحتوي على الكمية المصممة من المرسل. تقوم وظيفة النوع "المستحق الدفع" تلقائيًا بتخزين قيمة msg.val هذه في دفتر الأستاذ الخاص بها.
  • msg.sender: هو عنوان من أرسل لك المال.

2. لنكن جشعين ونستخدم معرفتنا بالقيمة msg.value لفرض حد أدنى لقيمة الهدية. ماذا عن الحد الأدنى من هدية من الأثير .0001 (~ 5 سنتات)؟

// ringBell هي وظيفة مستحقة الدفع تسمح للناس بالاحتفال بزواج الزوجين عن طريق إرسال إثيرات إلى عقد الزواج
وظيفة ringBell () مستحقة الدفع العامة {
    يتطلب (msg.value> .0001 ether) ؛
}

تنويه:

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

السماح لأصحاب العقود بسحب أموالهم

  1. قم بتعريف دالة collect () التي تنقل الأثيرات من عقد ذكي إلى محفظة المستخدم.
وظيفة جمع () {
    owner.transfer (عنوان (هذا) .balance)؛
}

تنويه:

  • يشير هذا إلى العقد نفسه. لذا ، يقوم "owner.transfer (...)" بنقل رصيد العقد بالكامل إلى محفظة المالك.

لنأخذ لحظة هنا للتفكير في الأمن. تريد التأكد من أن مالك العقد فقط هو الذي يستطيع الانسحاب.

طريقة واحدة للتعامل مع هذا هي "تتطلب (مالك == msg.sender)". ولكن قد تضطر إلى إجراء عملية التحقق هذه "تطلب من المالك" كثيرًا - حيث تريد إضافة المزيد من الميزات للمالكين. الحل؟

الشيكات العاكسة الشرطية في معدلات وظيفة

يعتبر أفضل ممارسة ل refactor تتطلب () يتحقق في وظائف التعديل الخاصة بهم.

  1. قم بإنشاء معدّل وظيفة يسمى "onlyOwner":
// وظيفة التعديل القابلة لإعادة الاستخدام
معدّل onlyOwner () {
    يتطلب (msg.sender == owner) ؛
    _؛
}
// لاستخدام معدّل ، قم بإلحاقه بنهاية اسم الوظيفة
الدالة collect () خارجي onlyOwner {
    owner.transfer (عنوان (هذا) .balance)؛
}

تنويه:

  • "_" هو عنصر نائب لمحتويات وظيفة الميزة التي تقوم بتعديلها باستخدام onlyOwner ().
  • نحن نستخدم معدل الوظيفة الخارجية لتوفير بعض رسوم المعاملات للمالك.

أخيرًا ، قم بإنشاء وظيفة مساعد للواجهة الأمامية لدينا:

  1. قم بإنشاء وظيفة تسمح فقط لأصحاب العقد بالتحقق من مقدار الأثير الذي يحتوي عليه عقده:
/ / السماح للمالكين فقط بالتحقق من رصيد العقد
الدالة getBalance () العرض العام onlyOwner إرجاع (uint) {
    عنوان المرسل (هذا).
}

هذا هو! لقد صممت أول فئة عقود ذكية.

يمكنك الآن استخدام Remix لإنشاء عقود زواج ذكية على blockchain. كل ما تبقى هو إنشاء عقد المصنع وواجهة مستخدم بسيطة.

الخطوات التالية

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