الدرس رقم 4

التفاعلات ونشر العقد الذكي

العقود الذكية يمكنها التفاعل مع عقود أخرى على سلسلة الكتل Ethereum، مما يتيح استدعاء الوظائف، قراءة المتغيرات، وتحويل الإيثر أو الرموز.

التفاعل مع العقود الخارجية

العقود الذكية يمكنها التفاعل مع عقود أخرى على سلسلة الكتل الخاصة بإثريوم، مما يتيح لها استدعاء الوظائف، وقراءة المتغيرات، وإرسال الإيثر أو الرموز. طريقة واحدة لتيسير هذا التفاعل هو باستخدام Web3j، وهي مكتبة Java خفيفة الوزن للعمل مع إثريوم. يمكن لـ Web3j توليد تلقائي لشفرة تغليف العقد الذكي، مما يتيح نشرًا سلسًا وتفاعلًا مع العقود الذكية من JVM.

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

الأحداث والسجلات

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

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

مثال: نشر عقد ذكي باستخدام Remix و MetaMask

الخطوة 1: افتح بيئة العمل Remix
أولاً، افتح بيئة العمل المتكاملة لـ Remix ( https://remix.ethereum.org/في متصفح الويب الخاص بك.

الخطوة 2: إنشاء ملف جديد
انقر فوق الزر "+" في الزاوية العلوية اليسرى من IDE لإنشاء مساحة عمل فارغة جديدة. ثم انقر فوق صفحة "ملف جديد" لإنشاء ملف جديد

اسم الصفحة "Auction.sol".

الخطوة 3: تحديد العقد
انسخ والصق الكود التالي في ملف "Auction.sol" الجديد:

TypeScript// SPDX-License-Identifier: MIT // حدد صلابة إصدار الصلابة ^ 0.8.0;// تحديد عقد المزاد المزاد { // إعلان متغيرات الحالة عنوان المالك العام المستحق الدفع ؛ // مالك العقد (يمكنه إلغاء المزاد) uint publicstartBlock ؛ // رقم الكتلة الذي يبدأ عنده المزاد في النهاية العامة ؛ // رقم الكتلة الذي ينتهي عنده المزاد سلسلة ipfsHash العامة ؛ // تجزئة IPFS للعنصر الذي يتم بيعه بالمزاد العلني تم إلغاؤه ؛  ما إذا كان المزاد قد تم إلغاؤه انتهى العلني ؛ ما إذا كان المزاد قد انتهى إلى أعلى عطاء عام ؛ أعلى عطاء حتى الآن عنوان أعلى مزايد عام مستحق الدفع ؛ عنوان أعلى مزايد // إعلان الأحداث حدث AuctionCanceled(); الحدث المنبعث عند إلغاء المزاد الحدث HighestBidWide(عنوان مقدم العطاء ، مبلغ uint) ؛ الحدث المنبعث عند تعيين أعلى عرض سعر جديد حدث AuctionEnd (الفائز بالعنوان ، مبلغ uint) ؛ الحدث المنبعث عند انتهاء المزاد // إعلان تعيين التعيينات (العنوان = > uint256) الأرصدة العامة ؛    منشئ وظيفة المنشئ () { المالك = مستحق الدفع (msg.sender) ؛ // تعيين المالك على العنوان الذي ينشر العقد startBlock = block.number ؛ // تعيين كتلة البداية إلى رقم الكتلة الحالي endBlock = startBlock + 40320 ؛ // تعيين كتلة النهاية إلى 1 أسبوع (40320 كتل) بعد كتلة البدء ipfsHash = "" ؛ قم بتهيئة تجزئة IPFS إلى سلسلة فارغة } // وظيفة لوضع وظيفة عرض سعر placeBid() مستحق الدفع العام { تتطلب (block.number > = startBlock && block.number < = endBlock ، "المزاد غير نشط.") ؛ // تحقق من أن المزاد نشط يتطلب (msg.value > أعلى عطاء ، "يوجد بالفعل عرض سعر أعلى.") ؛ // تحقق من أن العطاء الجديد أعلى من أعلى عرض سعر حالي (!تم إلغاؤه ، "تم إلغاء المزاد.") ؛ // تحقق من عدم إلغاء المزاد        إذا كان هناك مزايد أعلى سابق ، أضف مبلغ العرض الخاص به إلى رصيده إذا كان (أعلى مزايد != العنوان (0)) { أرصدة [أعلى مزايد] += أعلى عطاء ؛    } // تعيين أعلى عرض سعر جديد وأعلى مزايد = msg.value;        أعلى مزايد = مستحق الدفع (msg.sender) ؛        إرسال حدث للإشارة إلى تعيين أعلى عرض سعر جديد ينبعث منه أعلى سعر (msg.sender ، msg.value) ؛    } // وظيفة لإلغاء وظيفة المزاد cancelAuction() public { require(msg.sender == owner, "يمكن للمالك فقط إلغاء المزاد."); // تحقق من أن المرسل هو المالك يطلب(!انتهى, "انتهى المزاد بالفعل."); // تحقق من أن المزاد لم ينته بالفعل // قم بتعيين العلامة الملغاة وإرسال حدث للإشارة إلى إلغاء المزاد ملغى = صحيح ؛        تنبعث منها المزادتم إلغاؤه ();    } // وظيفة لإنهاء وظيفة المزاد endAuction() public { require(block.number > endBlock, "المزاد لم ينته بعد."); // تحقق من أن المزاد قد انتهى يتطلب (!تم إلغاؤه, "تم إلغاء المزاد."); // تحقق من أن المزاد لم يتم إلغاؤه يتطلب (!انتهى، "انتهى المزاد بالفعل."); // تحقق من أن المزاد لم ينته بالفعل // قم بتعيين العلامة المنتهية وإرسال حدث للإشارة إلى انتهاء المزاد = صحيح ؛        تنبعث منها المزاد المنتهي (أعلى مزايد ، أعلى مزايدة) ؛        تحويل أعلى مبلغ عرض إلى المالك المالك.نقل (أعلى عطاء) ؛        إذا كان هناك مزايد أعلى سابق ، أضف مبلغ العرض الخاص به إلى رصيده إذا كان (أعلى مزايد!= العنوان (0)) { أرصدة [أعلى مزايد] += أعلى عطاء ؛        } } // وظيفة لتعيين تجزئة IPFS للعنصر الذي يتم بيعه بالمزاد العلني وظيفة setIpfsHash (تجزئة ذاكرة السلسلة) عامة { تتطلب (msg.sender == المالك ، "يمكن للمالك فقط تعيين تجزئة IPFS."); // تحقق من أن المرسل هو المالك ipfsHash = تجزئة ؛ // اضبط تجزئة IPFS على القيمة المقدمة }}

يحدد هذا الكود مزادالعقد، الذي يسمح للمستخدمين بوضع عروض على عنصر ما وينهي المزاد بعد فترة محددة. العقد لديه أيضًا وظيفة لإلغاء المزاد ووظيفة لتعيين تجزئة IPFS للعنصر الذي يتم بيعه في المزاد.

الخطوة 4: جمع العقد

انقر فوق علامة التبويب "مترجم الصلابة" في القائمة اليسرى. تحت "تجميع مزاد.sol"، انقر فوق زر "تجميع". يجب تجميع العقد بنجاح، ويجب رؤية علامة صح خضراء بجوار "مزاد.sol" في مستكشف الملفات.

الخطوة 5: نشر العقد

انقر فوق علامة التبويب "نشر وتشغيل المعاملات" في القائمة الموجودة على اليسار. فيما يتعلق بـ "البيئة"، حدد "Web3 المحقن" كبيئة. فيما يتعلق بـ "العقد"، حدد "مزاد" كالعقد الذي سيتم نشره. انقر فوق زر "نشر".

الخطوة 6: تفاعل مع العقد
بمجرد نشر العقد، يمكنك التفاعل معه باستخدام الوظائف المختلفة المحددة في العقد. على سبيل المثال ، يمكنك الاتصال ب placeBid()وظيفة لوضع عرض على البند

من خلال استخدام Remix و MetaMask ، يمكنك بسهولة نشر والتفاعل مع العقود الذكية على شبكة Ethereum ، مما يمكّن من تطوير واختبار التطبيقات اللامركزية في بيئة سهلة الاستخدام.

يبرز
العقود الذكية يمكن أن تتفاعل مع عقود أخرى على سلسلة الكتل الخاصة بإثريوم، مما يتيح استدعاء الوظائف، قراءة المتغيرات، ونقل الإيثر أو الرموز.
Web3j هي مكتبة Java خفيفة الوزن تسهل التفاعل مع إيثريوم. يمكنها توليد تلقائي للشفرة الملفقة للعقد الذكي لنشر سلس والتفاعل مع العقود من JVM.
الأحداث ضرورية لتتبع ومراقبة نشاط العقد على blockchain. إنها تنبعث منها سجلات يمكن تخزينها واستردادها بواسطة أنظمة خارج السلسلة ، مما يتيح تحديثات في الوقت الفعلي ل dApps.
السجلات، وهي السجلات التي تتم إصدارها من خلال الأحداث، تلعب دوراً حاسماً في التواصل الفعال بين العقود الذكية وأنظمة خارج السلسلة. إنها مفهرسة، مما يتيح التصفية والبحث السهل عن الأحداث أو نقاط البيانات المحددة.
يوضح المثال المقدم عملية نشر عقد ذكي باستخدام Remix IDE و MetaMask. ويشمل خطوات مثل إنشاء ملف جديد، تحديد العقد، تجميعه، نشره، والتفاعل مع وظائفه.

إخلاء المسؤولية
* ينطوي الاستثمار في العملات الرقمية على مخاطر كبيرة. فيرجى المتابعة بحذر. ولا تهدف الدورة التدريبية إلى تقديم المشورة الاستثمارية.
* تم إنشاء الدورة التدريبية من قبل المؤلف الذي انضم إلى مركز التعلّم في Gate. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.
الكتالوج
الدرس رقم 4

التفاعلات ونشر العقد الذكي

العقود الذكية يمكنها التفاعل مع عقود أخرى على سلسلة الكتل Ethereum، مما يتيح استدعاء الوظائف، قراءة المتغيرات، وتحويل الإيثر أو الرموز.

التفاعل مع العقود الخارجية

العقود الذكية يمكنها التفاعل مع عقود أخرى على سلسلة الكتل الخاصة بإثريوم، مما يتيح لها استدعاء الوظائف، وقراءة المتغيرات، وإرسال الإيثر أو الرموز. طريقة واحدة لتيسير هذا التفاعل هو باستخدام Web3j، وهي مكتبة Java خفيفة الوزن للعمل مع إثريوم. يمكن لـ Web3j توليد تلقائي لشفرة تغليف العقد الذكي، مما يتيح نشرًا سلسًا وتفاعلًا مع العقود الذكية من JVM.

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

الأحداث والسجلات

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

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

مثال: نشر عقد ذكي باستخدام Remix و MetaMask

الخطوة 1: افتح بيئة العمل Remix
أولاً، افتح بيئة العمل المتكاملة لـ Remix ( https://remix.ethereum.org/في متصفح الويب الخاص بك.

الخطوة 2: إنشاء ملف جديد
انقر فوق الزر "+" في الزاوية العلوية اليسرى من IDE لإنشاء مساحة عمل فارغة جديدة. ثم انقر فوق صفحة "ملف جديد" لإنشاء ملف جديد

اسم الصفحة "Auction.sol".

الخطوة 3: تحديد العقد
انسخ والصق الكود التالي في ملف "Auction.sol" الجديد:

TypeScript// SPDX-License-Identifier: MIT // حدد صلابة إصدار الصلابة ^ 0.8.0;// تحديد عقد المزاد المزاد { // إعلان متغيرات الحالة عنوان المالك العام المستحق الدفع ؛ // مالك العقد (يمكنه إلغاء المزاد) uint publicstartBlock ؛ // رقم الكتلة الذي يبدأ عنده المزاد في النهاية العامة ؛ // رقم الكتلة الذي ينتهي عنده المزاد سلسلة ipfsHash العامة ؛ // تجزئة IPFS للعنصر الذي يتم بيعه بالمزاد العلني تم إلغاؤه ؛  ما إذا كان المزاد قد تم إلغاؤه انتهى العلني ؛ ما إذا كان المزاد قد انتهى إلى أعلى عطاء عام ؛ أعلى عطاء حتى الآن عنوان أعلى مزايد عام مستحق الدفع ؛ عنوان أعلى مزايد // إعلان الأحداث حدث AuctionCanceled(); الحدث المنبعث عند إلغاء المزاد الحدث HighestBidWide(عنوان مقدم العطاء ، مبلغ uint) ؛ الحدث المنبعث عند تعيين أعلى عرض سعر جديد حدث AuctionEnd (الفائز بالعنوان ، مبلغ uint) ؛ الحدث المنبعث عند انتهاء المزاد // إعلان تعيين التعيينات (العنوان = > uint256) الأرصدة العامة ؛    منشئ وظيفة المنشئ () { المالك = مستحق الدفع (msg.sender) ؛ // تعيين المالك على العنوان الذي ينشر العقد startBlock = block.number ؛ // تعيين كتلة البداية إلى رقم الكتلة الحالي endBlock = startBlock + 40320 ؛ // تعيين كتلة النهاية إلى 1 أسبوع (40320 كتل) بعد كتلة البدء ipfsHash = "" ؛ قم بتهيئة تجزئة IPFS إلى سلسلة فارغة } // وظيفة لوضع وظيفة عرض سعر placeBid() مستحق الدفع العام { تتطلب (block.number > = startBlock && block.number < = endBlock ، "المزاد غير نشط.") ؛ // تحقق من أن المزاد نشط يتطلب (msg.value > أعلى عطاء ، "يوجد بالفعل عرض سعر أعلى.") ؛ // تحقق من أن العطاء الجديد أعلى من أعلى عرض سعر حالي (!تم إلغاؤه ، "تم إلغاء المزاد.") ؛ // تحقق من عدم إلغاء المزاد        إذا كان هناك مزايد أعلى سابق ، أضف مبلغ العرض الخاص به إلى رصيده إذا كان (أعلى مزايد != العنوان (0)) { أرصدة [أعلى مزايد] += أعلى عطاء ؛    } // تعيين أعلى عرض سعر جديد وأعلى مزايد = msg.value;        أعلى مزايد = مستحق الدفع (msg.sender) ؛        إرسال حدث للإشارة إلى تعيين أعلى عرض سعر جديد ينبعث منه أعلى سعر (msg.sender ، msg.value) ؛    } // وظيفة لإلغاء وظيفة المزاد cancelAuction() public { require(msg.sender == owner, "يمكن للمالك فقط إلغاء المزاد."); // تحقق من أن المرسل هو المالك يطلب(!انتهى, "انتهى المزاد بالفعل."); // تحقق من أن المزاد لم ينته بالفعل // قم بتعيين العلامة الملغاة وإرسال حدث للإشارة إلى إلغاء المزاد ملغى = صحيح ؛        تنبعث منها المزادتم إلغاؤه ();    } // وظيفة لإنهاء وظيفة المزاد endAuction() public { require(block.number > endBlock, "المزاد لم ينته بعد."); // تحقق من أن المزاد قد انتهى يتطلب (!تم إلغاؤه, "تم إلغاء المزاد."); // تحقق من أن المزاد لم يتم إلغاؤه يتطلب (!انتهى، "انتهى المزاد بالفعل."); // تحقق من أن المزاد لم ينته بالفعل // قم بتعيين العلامة المنتهية وإرسال حدث للإشارة إلى انتهاء المزاد = صحيح ؛        تنبعث منها المزاد المنتهي (أعلى مزايد ، أعلى مزايدة) ؛        تحويل أعلى مبلغ عرض إلى المالك المالك.نقل (أعلى عطاء) ؛        إذا كان هناك مزايد أعلى سابق ، أضف مبلغ العرض الخاص به إلى رصيده إذا كان (أعلى مزايد!= العنوان (0)) { أرصدة [أعلى مزايد] += أعلى عطاء ؛        } } // وظيفة لتعيين تجزئة IPFS للعنصر الذي يتم بيعه بالمزاد العلني وظيفة setIpfsHash (تجزئة ذاكرة السلسلة) عامة { تتطلب (msg.sender == المالك ، "يمكن للمالك فقط تعيين تجزئة IPFS."); // تحقق من أن المرسل هو المالك ipfsHash = تجزئة ؛ // اضبط تجزئة IPFS على القيمة المقدمة }}

يحدد هذا الكود مزادالعقد، الذي يسمح للمستخدمين بوضع عروض على عنصر ما وينهي المزاد بعد فترة محددة. العقد لديه أيضًا وظيفة لإلغاء المزاد ووظيفة لتعيين تجزئة IPFS للعنصر الذي يتم بيعه في المزاد.

الخطوة 4: جمع العقد

انقر فوق علامة التبويب "مترجم الصلابة" في القائمة اليسرى. تحت "تجميع مزاد.sol"، انقر فوق زر "تجميع". يجب تجميع العقد بنجاح، ويجب رؤية علامة صح خضراء بجوار "مزاد.sol" في مستكشف الملفات.

الخطوة 5: نشر العقد

انقر فوق علامة التبويب "نشر وتشغيل المعاملات" في القائمة الموجودة على اليسار. فيما يتعلق بـ "البيئة"، حدد "Web3 المحقن" كبيئة. فيما يتعلق بـ "العقد"، حدد "مزاد" كالعقد الذي سيتم نشره. انقر فوق زر "نشر".

الخطوة 6: تفاعل مع العقد
بمجرد نشر العقد، يمكنك التفاعل معه باستخدام الوظائف المختلفة المحددة في العقد. على سبيل المثال ، يمكنك الاتصال ب placeBid()وظيفة لوضع عرض على البند

من خلال استخدام Remix و MetaMask ، يمكنك بسهولة نشر والتفاعل مع العقود الذكية على شبكة Ethereum ، مما يمكّن من تطوير واختبار التطبيقات اللامركزية في بيئة سهلة الاستخدام.

يبرز
العقود الذكية يمكن أن تتفاعل مع عقود أخرى على سلسلة الكتل الخاصة بإثريوم، مما يتيح استدعاء الوظائف، قراءة المتغيرات، ونقل الإيثر أو الرموز.
Web3j هي مكتبة Java خفيفة الوزن تسهل التفاعل مع إيثريوم. يمكنها توليد تلقائي للشفرة الملفقة للعقد الذكي لنشر سلس والتفاعل مع العقود من JVM.
الأحداث ضرورية لتتبع ومراقبة نشاط العقد على blockchain. إنها تنبعث منها سجلات يمكن تخزينها واستردادها بواسطة أنظمة خارج السلسلة ، مما يتيح تحديثات في الوقت الفعلي ل dApps.
السجلات، وهي السجلات التي تتم إصدارها من خلال الأحداث، تلعب دوراً حاسماً في التواصل الفعال بين العقود الذكية وأنظمة خارج السلسلة. إنها مفهرسة، مما يتيح التصفية والبحث السهل عن الأحداث أو نقاط البيانات المحددة.
يوضح المثال المقدم عملية نشر عقد ذكي باستخدام Remix IDE و MetaMask. ويشمل خطوات مثل إنشاء ملف جديد، تحديد العقد، تجميعه، نشره، والتفاعل مع وظائفه.

إخلاء المسؤولية
* ينطوي الاستثمار في العملات الرقمية على مخاطر كبيرة. فيرجى المتابعة بحذر. ولا تهدف الدورة التدريبية إلى تقديم المشورة الاستثمارية.
* تم إنشاء الدورة التدريبية من قبل المؤلف الذي انضم إلى مركز التعلّم في Gate. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.