كيف تكتب عقدك الذكي الأول؟



تعلم أساسيات تطوير العقود الذكية وابدأ في كتابة عقدك الذكي الأول. ستعرف أيضًا كيفية اختبار العقد الذكي.

في ال ، لقد تعرفت على ماهية العقود الذكية ولغات العقود الذكية المختلفة وكيفية إعداد بيئة تطوير العقود الذكية. في هذه المقالة ، ستتعلم كيفية إنشاء أول عقد ذكي لك. سأستخدمRemix IDE لتطوير واختبار عقد ذكي.

يتم تناول الموضوعات التالية في هذا البرنامج التعليمي لتطوير العقود الذكية:





بناء عقدك الذكي

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



هيكل العقد الذكي

عقد سوليديتي الذكي ، في جوهره ، عبارة عن مجموعة من التالي

  • البيانات - الذي يحافظ على الوضع الحالي للعقد
  • وظيفة - التي تطبق منطق الانتقال إلى حالة العقد

تتبع عقود سوليديتي الذكية هيكل قياسي. يبدأ أي عقد ذكي بالبيان التالي



توجيه براغما

يمكن استخدام الكلمة الأساسية 'pragma' لتمكين بعض ميزات المترجم أو عمليات التحقق. يوضح البيان أدناه أن الملف المصدر (العقد الذكي) لن يتم تجميعه باستخدام مترجم أقدم من 0.4.0 وإصدار مترجم بعد 0.6.0. يضمن هذا الإعلان عدم تقديم أي سلوك غير مقصود عند تقديم إصدار مترجم جديد.

صلابة براغما> = 0.4.0<=0.6.0 

إعلان العقد

يتم الإعلان عن العقد باستخدام الكلمة الأساسية 'عقد'. هذا يعلن عن عقد فارغ محدد بالاسم 'PurchaseOrder'.

أمر شراء بموجب عقد {}

تخزين البيانات ذات الصلة بالعقد

قد يتطلب كل عقد أو بشروط عامة كل برنامج لتخزين بعض البيانات. توفر إضافة البيانات إلى البرنامج مستوى من المرونة. يعد الابتعاد عن القيم المشفرة في البرنامج إلى القيم التي يوفرها المستخدم ميزة مهمة. تتيح لك المتغيرات تخزين البيانات وتسمية البيانات واسترداد البيانات ومعالجة البيانات.

تطوير العقود الذكية: إدخال المتغيرات

في الصلابة ، المتغيرات من نوعين

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

إضافة البيانات إلى العقد الذكي

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

pivot and unpivot في خادم SQL

المتغير الذي نقدمه الآن هو عدد صحيح بدون إشارة ويتم تمثيله بواسطة uint256 ، 256 هنا يشير إلى سعة تخزين 256 بت.

  • يو - غير موقعة (بمعنى أن هذا النوع يمكن أن يمثل فقط الأعداد الصحيحة الموجبة ، وليس الأعداد الصحيحة الموجبة والسالبة)
  • INT - عدد صحيح
  • حجم 256 - 256 بت
  • الحد الأدنى للقيمة التي يمكن تعيينها لـ uint256 هو 0
  • الحد الأقصى للقيمة التي يمكن تعيينها uint256 هو 2 ^ 256-1 [عدد كبير جدًا]

كمية المنتج ليست سوى قيمة موجبة والافتراض الحالي هو أننا سنقوم بتلبية قيمة كبيرة جدًا لكمية المنتج.

المتغير 'product_quantity' المُعلن عنه هو جزء من حالة العقد وبالتالي يتم الاحتفاظ به أو تخزينه في مساحة العقد. حاليًا ، سيكون هذا المتغير افتراضيًا على القيمة 0.

عقد شراء أمر {uint256 product_quantity}

تحديد المنشئ

يتم استدعاء المُنشئ عند نشر العقد. يقوم المنشئ بتهيئة العقد ببعض القيم. في السيناريو الحالي ، يتم تعيين كمية المنتج على 100 ، عند نشر العقد. يمكن أيضًا إنشاء مُنشئ ذي معلمات من خلال تمرير متغير وتهيئة product_quantity باستخدام القيمة التي تم تمريرها.

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

منشئ () عام {product_quantity = 100}

إضافة وظائف

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

احصل على الوظيفة

أحد المتطلبات الأكثر شيوعًا لأي برنامج هو قراءة القيمة المخزنة. في العقد التالي ، سنحتاج إلى قراءة قيمة 'كمية_المنتج'. من أجل توفير هذه الإمكانية ، تمت إضافة وظيفة قراءة أو وظيفة get. في هذه الوظيفة ، لا نقوم بأي معالجة للقيمة المخزنة ، بل نقوم فقط باسترداد القيمة المخزنة.

الوصف الوظيفي لمدير نظام لينوكس

دعنا الآن نقسم وظيفة get (get_quantity)

لا. الكلمة الرئيسية القيمة
واحد get_quantity (){لم يتم تمرير أي معلمات}
2 عامة{يمكن لأي شخص الوصول إلى الوظيفة}
3 رأي{تشير إلى أن الوظيفة تقرأ حالة العقد فقط ، ولا تغير حالة العقد ، ومن ثم يتم عرض}
4 إرجاع متغير من النوع uint256 {تعريف ما يتم إرجاعه بواسطة الوظيفة}
دالة get_quantity () إرجاع طريقة العرض العامة (uint256) {return product_quantity}

وظائف واضعة

قراءة البيانات ضرورية وقد أنجزناها في القسم الأخير ، لكن معظم السيناريو يتطلب أيضًا القدرة على كتابة / تحديث البيانات أيضًا. يتم توفير هذه القدرة المحددة عن طريق إضافة وظيفة setter. تأخذ هذه الوظيفة قيمة من المستخدم في شكل معلمة إدخال. باستخدام القيمة المقدمة للدالة من قبل المستخدم ، تتم كتابة / تحديث قيمة المتغير 'product_quantity'.

دعونا الآن نفصل وظيفة المجموعة لدينا (update_quantity)

إضافة دالة لتحديث قيمة كمية المنتج

لا. الكلمة الرئيسية القيمة
واحد update_quantity (قيمة uint256){تم تمرير قيمة المعلمة من النوع uint256}
2 عامة{يمكن لأي شخص الوصول إلى الوظيفة}
3 غير مطلوب حيث يتم تحديث الحالة بواسطة الوظائف
4 إرجاع متغير من النوع uint256 (يعرف ما يتم إرجاعه بواسطة الوظيفة)
دالة update_quantity (قيمة uint256) عامة {product_quantity = كمية_المنتج + القيمة}

بتوصيل كل هذا معًا ، هكذا يجب أن يبدو العقد الإجمالي.

صلابة براغما> = 0.4.0<=0.6.0 contract PurchaseOrder{ uint256 product_quantity //state variable /*Called with the contract is deployed and initializes the value*/ constructor() public{ product_quantity = 100 } // Get Function function get_quantity() public view returns(uint256){ return product_quantity } // Set Function function update_quantity(uint256 value) public { product_quantity = product_quantity + value } } 

نشر العقد الذكي

حان الوقت لاختبار العقد الذكي. من أجل اختبار هذا العقد الذكي ، سنستخدم ريمكس IDE عبر الإنترنت .

ريمكس هو ملعب على الانترنت ل عقد ذكي ethereum . ريمكس هو المتصفح بالكامل. يوفر لك Remix IDE عبر الإنترنت (بيئة تطوير متكاملة) حيث يمكنك كتابة عقودك الذكية. يوفر لك Remix إمكانية مترجم الصلابة عبر الإنترنت. يمكن تجميع العقد الذكي في Remix IDE باستخدام إصدار مترجم محدد بسلاسة.

يوفر Remix أيضًا القدرة على اختبار العقد الذكي بسرعة.

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

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

قامت Remix مؤخرًا بترقية واجهة المستخدم الخاصة بهم.

Remix-UI-Smart-Contracts-Edureka

انقر فوق رمز الملف كما هو موضح في الصورة أعلاه ، وسيفتح مستكشف الملفات.

  1. بالضغط على أيقونة الجمع ، يمكن إنشاء ملف جديد ، قم بتسمية الملف PurchaseOrder.sol
  2. سيؤدي هذا إلى إنشاء ملف فارغ باسم PurchaseOrder.sol ، انقر فوق هذا الملف وافتحه.
  3. دعنا ننسخ ولصق العقد بالكامل في PurchaseOrder.sol.
  4. انقر فوق الرمز الثاني ، في القائمة اليسرى أسفل رمز الملف مباشرةً ، يجب أن يظهر خيار مترجم الصلابة.
  5. تحت تسمية المترجم ، حدد إصدار المترجم. الإصدار الحالي المحدد هو 0.5.8.
  6. بعد تحديد إصدار المترجم ، انقر فوق 'Compile PurchaseOrder.sol'. سيؤدي هذا إلى تجميع العقد الذكي.

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

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

8. من أجل اختبار العقد الذكي ، يجب نشر العقد الذكي. من أجل نشر العقد الذكي ، انقر فوق الرمز التالي في القائمة اليسرى ، أسفل أيقونة الترجمة. سوف تظهر الشاشة التالية. من أجل اختبار العقد الذكي ، يجب نشر العقد الذكي. من أجل نشر العقد الذكي ، انقر فوق الرمز التالي في القائمة اليسرى ، أسفل رمز الترجمة. سوف تظهر الشاشة التالية.

خيار النشر

توفر شاشة النشر ، خيارين ، دعونا نلقي نظرة عليها واحدة تلو الأخرى.

  • البيئة: يمكن التفكير في هذا كخيار مشابه لاختيار شراء كمبيوتر محمول من أمازون ، فليبكارت ، نيو إيغ (كل هذه متاجر تجزئة عبر الإنترنت) تقوم باختيار المكان الذي تريد الشراء منه ، بناءً على متطلباتك. وبالمثل ، في حالة Remix ، لدينا خيار مكان نشر العقد الذكي واختبار العقد الذكي. توفر القائمة المنسدلة بجوار تسمية البيئة ثلاثة اختيارات
    • JavaScript VM - عقدة إيثريوم مفردة محلية يتم نسجها في ذاكرة المتصفح وتوفر 5 حسابات اختبار مسبقة التمويل يمكن استخدامها للمعاملة (النشر ، وظائف استدعاء)
    • توفير Web3 المحقون - يعتمد هذا على MetaMask. Metamask هو مثل الوسيط أو الوسيط ، والذي يسمح لتطبيقات الويب بالتفاعل مع العقد الذكي. يوفر Metamask القدرة على إدارة الهويات وكذلك توقيع المعاملات ليتم إرسالها إلى شبكة ethereum هذا الوسيط أو 3بحث وتطويرتقدم لك الجهة المساعدة في تحديد شبكة blockchain التي سيتم نشر العقد الذكي عليها.
    • Web3 Provider - إذا كنت تقوم بتشغيل عقدة Ethereum محلية وكانت نقطة نهاية RPC متاحة ، فيمكن استخدام هذا الخيار. سيتم نشر العقد الذكي في عقدة Ethereum المحلية.
  • الحسابات: يتم ملء هذه المعلومات بناءً على البيئة المحددة. فمثلا. يوفر JavaScript VM 5 حسابات اختبار مسبقة التمويل. في حالة مزود Web3 و Injected Web3 لا يوفران حسابات اختبار مسبقة التمويل.
  • حد الغاز: يحدد الحد الأقصى لمقدار الغاز الذي يرغب البادئ في إنفاقه في أي معاملة. هذا هو المكان المناسب للحماية من الحلقة اللانهائية واستنفاد جميع أموال الحساب في حالة حالة الحلقة اللانهائية.
  • القيمة: القيمة التي قد تكون مطلوبة لإرسالها أثناء نشر العقد الذكي. هذه قيمة اختيارية.

من أجل نشر العقد ، حدد خيار JavaScript VM ، وحدد الحساب الأول من القائمة المنسدلة للحسابات ، ولاحظ رصيد الحساب (100 ether).

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

جافا الحصول على التاريخ من السلسلة

  1. يتغير رصيد الحساب من 100 إيثر إلى 99.999999 إيثر ، والمبلغ المخصوم هو تكلفة المعاملة لنشر العقد الذكي.
  2. بموجب العقد المنشور ، ستظهر لوحة جديدة للعقد الذكي ، والتي ستوفر أيضًا عنوان العقد الذكي الجديد شيئًا كهذا (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. ستظهر المعلومات التالية في نافذة وحدة التحكم
    1. تجزئة المعاملة - تحدد بشكل فريد نشر العقد
    2. تكلفة المعاملة
    3. عنوان العقد

التعامل مع العقد المنشور

  1. بموجب العقد المنشور ، تتوفر طريقتان للتفاعل التاليتان update_quantity و get_quantity.
  2. كلتا طريقتي التفاعل هاتين هما الطريقتان العامتان المحددتان في عقد 'أمر الشراء'.
  3. يتطلب أسلوب كمية التحديث 'كمية التحديث' معلمة إدخال ، ومن ثم مربع الإدخال.
  4. يسترد أسلوب الحصول على الكمية 'get_quantity' قيمة كمية المنتج.
  5. دعونا نتحقق مما يحدث عند استدعاء get_quantity ، تظهر القيمة المعادة 100 ، والتي تمت تهيئتها في المنشئ. هذا لا يتسبب في حدوث صفقة
  6. دعونا نستدعي update_quantity ونقدم 30 كمدخل. هذا يتسبب في حدوث معاملة

باختصار ، أي عملية تؤدي إلى عملية كتابة لحالة العقد (أي تغيير متغيرات العقد) ستؤدي إلى معاملة.

أي عملية تقرأ فقط حالة العقد لا تؤدي إلى معاملة.

استنتاج تطوير العقد الذكي

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

في المدونة التالية التي تعد استمرارًا لسلسلة تطوير العقود الذكية ، سوف نتعمق أكثر في أساسيات الصلابة ، ونتعمق أكثر في نشر العقود الذكية.

بهذا ، أختتم هذا عقد ذكي مدونة التطوير. أتمنى أن تكون قد استمتعت بقراءة هذه المدونة ووجدتها مفيدة.

أناإذا كنت ترغب في تعلم العقود الذكية ، وبناء مستقبل وظيفي في مجال Blockchain واكتساب الخبرة في برمجة Ethereum ، قم بالتسجيل في البث المباشر عبر الإنترنت هنا ، يأتي ذلك مع دعم 24 * 7 لإرشادك طوال فترة التعلم.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات في 'تطوير العقد الذكي' وسنقوم بالرد عليك في البدايةش.