اسمارٹ کانٹریکٹس سے ایونٹس کے ذریعے ڈیٹا لاگ کرنا
Solidity میں، ایونٹس وہ بھیجے گئے سگنلز ہیں جو اسمارٹ کانٹریکٹس فائر کر سکتے ہیں۔ Dapps، یا Ethereum JSON-RPC API سے منسلک کوئی بھی چیز، ان ایونٹس کو سن سکتی ہے اور اس کے مطابق عمل کر سکتی ہے۔ ایک ایونٹ کو انڈیکس بھی کیا جا سکتا ہے تاکہ بعد میں ایونٹ کی ہسٹری کو تلاش کیا جا سکے۔
ایونٹس
اس مضمون کو لکھنے کے وقت Ethereum بلاک چین پر سب سے عام ایونٹ Transfer ایونٹ ہے جو ERC20 ٹوکنز کے ذریعے اس وقت خارج (emit) ہوتا ہے جب کوئی ٹوکنز منتقل کرتا ہے۔
1event Transfer(address indexed from, address indexed to, uint256 value);ایونٹ کے دستخط (signature) کو کانٹریکٹ کوڈ کے اندر ڈکلیئر کیا جاتا ہے اور اسے emit کی ورڈ کے ساتھ خارج کیا جا سکتا ہے۔ مثال کے طور پر، ٹرانسفر ایونٹ یہ لاگ کرتا ہے کہ ٹرانسفر کس نے بھیجا (from)، کس کو بھیجا (to) اور کتنے ٹوکنز منتقل کیے گئے (value)۔
اگر ہم اپنے Counter اسمارٹ کانٹریکٹ پر واپس جائیں اور فیصلہ کریں کہ جب بھی ویلیو تبدیل ہو تو اسے لاگ کیا جائے۔ چونکہ یہ کانٹریکٹ ڈیپلائے کرنے کے لیے نہیں ہے بلکہ اسے ایکسٹینڈ کر کے دوسرا کانٹریکٹ بنانے کے لیے بنیاد کے طور پر کام کرتا ہے: اسے ایک ایبسٹریکٹ (abstract) کانٹریکٹ کہا جاتا ہے۔ ہماری کاؤنٹر کی مثال میں، یہ کچھ اس طرح نظر آئے گا:
1pragma solidity 0.5.17;23contract Counter {45 event ValueChanged(uint oldValue, uint256 newValue);67 // کاؤنٹس کی تعداد کو محفوظ رکھنے کے لیے unsigned int ٹائپ کا پرائیویٹ ویری ایبل8 uint256 private count = 0;910 // وہ فنکشن جو ہمارے کاؤنٹر میں اضافہ کرتا ہے11 function increment() public {12 count += 1;13 emit ValueChanged(count - 1, count);14 }1516 // کاؤنٹ کی ویلیو حاصل کرنے کے لیے گیٹر17 function getCount() public view returns (uint256) {18 return count;19 }2021}سب دکھائیںغور کریں کہ:
-
لائن 5: ہم اپنا ایونٹ ڈکلیئر کرتے ہیں اور یہ بتاتے ہیں کہ اس میں کیا شامل ہے، پرانی ویلیو اور نئی ویلیو۔
-
لائن 13: جب ہم اپنے count ویری ایبل میں اضافہ (increment) کرتے ہیں، تو ہم ایونٹ کو خارج (emit) کرتے ہیں۔
اگر اب ہم کانٹریکٹ کو ڈیپلائے کریں اور increment فنکشن کو کال کریں، تو ہم دیکھیں گے کہ اگر آپ logs نامی ایک سرنی (array) کے اندر نئی ٹرانزیکشن پر کلک کرتے ہیں تو Remix اسے خود بخود ظاہر کر دے گا۔
لاگز آپ کے اسمارٹ کانٹریکٹس کی ڈیبگنگ کے لیے واقعی مفید ہیں لیکن یہ اس وقت بھی اہم ہوتے ہیں جب آپ مختلف لوگوں کے زیر استعمال ایپلی کیشنز بناتے ہیں اور یہ تجزیات (analytics) بنانے کو آسان بناتے ہیں تاکہ یہ ٹریک کیا جا سکے اور سمجھا جا سکے کہ آپ کا اسمارٹ کانٹریکٹ کیسے استعمال ہو رہا ہے۔ ٹرانزیکشنز کے ذریعے تیار کردہ لاگز مقبول بلاک ایکسپلوررز میں دکھائے جاتے ہیں اور آپ مثال کے طور پر انہیں مخصوص ایونٹس کو سننے اور ان کے وقوع پذیر ہونے پر کارروائی کرنے کے لیے آف چین (offchain) اسکرپٹس بنانے کے لیے بھی استعمال کر سکتے ہیں۔
صفحہ کی آخری اپ ڈیٹ: 12 فروری، 2025
