تسجيل البيانات من العقود الذكية باستخدام الأحداث
في Solidity، الأحداث هي إشارات مُرسلة يمكن للعقود الذكية إطلاقها. يمكن للتطبيقات اللامركزية (dapps)، أو أي شيء متصل بـ JSON-RPC API الخاص بإيثيريوم، الاستماع إلى هذه الأحداث والتصرف بناءً عليها. يمكن أيضًا فهرسة الحدث بحيث يمكن البحث في سجل الأحداث لاحقًا.
الأحداث
الحدث الأكثر شيوعًا على سلسلة الكتل لإيثيريوم في وقت كتابة هذا المقال هو حدث التحويل (Transfer) الذي تُصدره رموز ERC-20 عندما يقوم شخص ما بتحويل الرموز.
event Transfer(address indexed from, address indexed to, uint256 value);
يتم الإعلان عن توقيع الحدث داخل كود العقد ويمكن إصداره باستخدام الكلمة المفتاحية emit. على سبيل المثال، يسجل حدث التحويل من أرسل التحويل (from)، وإلى من (to)، ومقدار الرموز التي تم تحويلها (value).
إذا عدنا إلى العقد الذكي Counter الخاص بنا وقررنا التسجيل في كل مرة تتغير فيها القيمة. بما أن هذا العقد غير مخصص للنشر بل ليكون بمثابة أساس لبناء عقد آخر من خلال توسيعه: فإنه يُسمى عقدًا مجردًا (abstract contract). في حالة مثال العداد الخاص بنا، سيبدو هكذا:
pragma solidity 0.5.17;
contract Counter {
event ValueChanged(uint oldValue, uint256 newValue);
// متغير خاص من نوع unsigned int لحفظ عدد المرات
uint256 private count = 0;
// دالة تقوم بزيادة العداد الخاص بنا
function increment() public {
count += 1;
emit ValueChanged(count - 1, count);
}
// دالة جلب للحصول على قيمة العداد
function getCount() public view returns (uint256) {
return count;
}
}
لاحظ أن:
-
السطر 5: نعلن عن الحدث الخاص بنا وما يحتويه، القيمة القديمة والقيمة الجديدة.
-
السطر 13: عندما نقوم بزيادة متغير العداد (count) الخاص بنا، فإننا نُصدر الحدث.
إذا قمنا الآن بنشر العقد واستدعينا دالة الزيادة (increment)، فسنرى أن Remix سيعرضه تلقائيًا إذا نقرت على المعاملة الجديدة داخل مصفوفة تسمى السجلات (logs).
تعتبر السجلات مفيدة حقًا لتصحيح أخطاء العقود الذكية الخاصة بك ولكنها مهمة أيضًا إذا كنت تبني تطبيقات يستخدمها أشخاص مختلفون وتجعل من السهل إجراء تحليلات لتتبع وفهم كيفية استخدام عقدك الذكي. يتم عرض السجلات الناتجة عن المعاملات في مستكشفات الكتل الشائعة ويمكنك أيضًا على سبيل المثال استخدامها لإنشاء نصوص برمجية خارج السلسلة للاستماع إلى أحداث معينة واتخاذ إجراء عند حدوثها.
آخر تحديث للصفحة: 3 مارس 2026
