تسجيل البيانات من العقود الذكية مع الأحداث
في سوليديتي، الأحداث هي إشارات مُرسلة يمكن للعقود الذكية إطلاقها. يمكن للتطبيقات اللامركزية، أو أي شيء متصل بواجهة برمجة تطبيقات إيثريوم JSON-RPC، الاستماع إلى هذه الأحداث والتصرف وفقًا لذلك. يمكن أيضًا فهرسة الحدث بحيث يمكن البحث في سجل الأحداث لاحقًا.
الأحداث
إن أكثر الأحداث شيوعًا على بلوكتشين إيثريوم في وقت كتابة هذا المقال هو حدث التحويل (Transfer) الذي يصدر عن رموز ERC20 عندما يقوم شخص ما بنقل الرموز.
1event Transfer(address indexed from, address indexed to, uint256 value);يتم الإعلان عن توقيع الحدث داخل رمز العقد ويمكن إصداره باستخدام الكلمة الأساسية emit. على سبيل المثال، تسجل سجلات حدث التحويل من أرسل التحويل (from)، وإلى من (to)، وكمية الرموز التي تم تحويلها (value).
إذا عدنا إلى عقد العداد الذكي الخاص بنا وقررنا تسجيل كل مرة يتم فيها تغيير القيمة. بما أن هذا العقد ليس مخصصًا للنشر ولكن ليكون بمثابة أساس لبناء عقد آخر عن طريق تمديده: يطلق عليه عقد مجرد. في حالة مثال العداد الخاص بنا، سيبدو الأمر كما يلي:
1pragma solidity 0.5.17;23contract Counter {45 event ValueChanged(uint oldValue, uint256 newValue);67 // متغير خاص من النوع الصحيح غير المؤشر للاحتفاظ بعدد العدّات8 uint256 private count = 0;910 // وظيفة تزيد العداد الخاص بنا11 function increment() public {12 count += 1;13 emit ValueChanged(count - 1, count);14 }1516 // دالة Getter للحصول على قيمة العد17 function getCount() public view returns (uint256) {18 return count;19 }2021}إظهار الكللاحظ أن:
-
السطر 5: نعلن عن حدثنا وما يحتويه، القيمة القديمة والقيمة الجديدة.
-
السطر 13: عندما نزيد متغير العد لدينا، نصدر الحدث.
إذا قمنا الآن بنشر العقد واستدعاء وظيفة الزيادة، فسنرى أن ريميكس سيعرضه تلقائيًا إذا قمت بالنقر فوق المعاملة الجديدة داخل مصفوفة تسمى السجلات.
السجلات مفيدة حقًا لتصحيح أخطاء عقودك الذكية ولكنها مهمة أيضًا إذا كنت تبني تطبيقات يستخدمها أشخاص مختلفون وتسهل إجراء تحليلات لتتبع وفهم كيفية استخدام عقدك الذكي. يتم عرض السجلات التي تم إنشاؤها بواسطة المعاملات في مستكشفات الكتل الشائعة، ويمكنك أيضًا على سبيل المثال استخدامها لإنشاء نصوص برمجية خارج السلسلة للاستماع إلى أحداث معينة واتخاذ إجراء عند وقوعها.
آخر تحديث للصفحة: 12 فبراير 2025
