تخطٍ إلى المحتوى الرئيسي

تسجيل البيانات من العقود الذكية مع الأحداث

العقود الذكيه
Remix
Solidity
أحداث
المستوى المتوسط
jdourlens
3 أبريل 2020
2 دقيقة قراءة

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

الأحداث

إن أكثر الأحداث شيوعًا على بلوكتشين إيثريوم في وقت كتابة هذا المقال هو حدث التحويل (Transfer) الذي يصدر عن رموز ERC20 عندما يقوم شخص ما بنقل الرموز.

1event Transfer(address indexed from, address indexed to, uint256 value);

يتم الإعلان عن توقيع الحدث داخل رمز العقد ويمكن إصداره باستخدام الكلمة الأساسية emit. على سبيل المثال، تسجل سجلات حدث التحويل من أرسل التحويل (from)، وإلى من (to)، وكمية الرموز التي تم تحويلها (value).

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

1pragma solidity 0.5.17;
2
3contract Counter {
4
5 event ValueChanged(uint oldValue, uint256 newValue);
6
7 // متغير خاص من النوع الصحيح غير المؤشر للاحتفاظ بعدد العدّات
8 uint256 private count = 0;
9
10 // وظيفة تزيد العداد الخاص بنا
11 function increment() public {
12 count += 1;
13 emit ValueChanged(count - 1, count);
14 }
15
16 // دالة Getter للحصول على قيمة العد
17 function getCount() public view returns (uint256) {
18 return count;
19 }
20
21}
إظهار الكل

لاحظ أن:

  • السطر 5: نعلن عن حدثنا وما يحتويه، القيمة القديمة والقيمة الجديدة.

  • السطر 13: عندما نزيد متغير العد لدينا، نصدر الحدث.

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

لقطة شاشة ريميكس

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

آخر تحديث للصفحة: 12 فبراير 2025

هل كانت تعليمات الاستخدام هذه مفيدة؟