مرکزی مواد پر جائیں

اسمارٹ کانٹریکٹس سے ایونٹس کے ذریعے ڈیٹا لاگ کرنا

اسمارٹ کانٹریکٹس
Remix
Solidity
ایونٹس
درمیانی
jdourlens
3 اپریل، 2020
3 منٹ کی پڑھائی

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;
2
3contract Counter {
4
5 event ValueChanged(uint oldValue, uint256 newValue);
6
7 // کاؤنٹس کی تعداد کو محفوظ رکھنے کے لیے unsigned int ٹائپ کا پرائیویٹ ویری ایبل
8 uint256 private count = 0;
9
10 // وہ فنکشن جو ہمارے کاؤنٹر میں اضافہ کرتا ہے
11 function increment() public {
12 count += 1;
13 emit ValueChanged(count - 1, count);
14 }
15
16 // کاؤنٹ کی ویلیو حاصل کرنے کے لیے گیٹر
17 function getCount() public view returns (uint256) {
18 return count;
19 }
20
21}
سب دکھائیں

غور کریں کہ:

  • لائن 5: ہم اپنا ایونٹ ڈکلیئر کرتے ہیں اور یہ بتاتے ہیں کہ اس میں کیا شامل ہے، پرانی ویلیو اور نئی ویلیو۔

  • لائن 13: جب ہم اپنے count ویری ایبل میں اضافہ (increment) کرتے ہیں، تو ہم ایونٹ کو خارج (emit) کرتے ہیں۔

اگر اب ہم کانٹریکٹ کو ڈیپلائے کریں اور increment فنکشن کو کال کریں، تو ہم دیکھیں گے کہ اگر آپ logs نامی ایک سرنی (array) کے اندر نئی ٹرانزیکشن پر کلک کرتے ہیں تو Remix اسے خود بخود ظاہر کر دے گا۔

Remix اسکرین شاٹ

لاگز آپ کے اسمارٹ کانٹریکٹس کی ڈیبگنگ کے لیے واقعی مفید ہیں لیکن یہ اس وقت بھی اہم ہوتے ہیں جب آپ مختلف لوگوں کے زیر استعمال ایپلی کیشنز بناتے ہیں اور یہ تجزیات (analytics) بنانے کو آسان بناتے ہیں تاکہ یہ ٹریک کیا جا سکے اور سمجھا جا سکے کہ آپ کا اسمارٹ کانٹریکٹ کیسے استعمال ہو رہا ہے۔ ٹرانزیکشنز کے ذریعے تیار کردہ لاگز مقبول بلاک ایکسپلوررز میں دکھائے جاتے ہیں اور آپ مثال کے طور پر انہیں مخصوص ایونٹس کو سننے اور ان کے وقوع پذیر ہونے پر کارروائی کرنے کے لیے آف چین (offchain) اسکرپٹس بنانے کے لیے بھی استعمال کر سکتے ہیں۔

صفحہ کی آخری اپ ڈیٹ: 12 فروری، 2025

کیا یہ ٹیوٹوریل مددگار تھا؟