رویدادها Events در برنامه نویسی Solidity
رویدادها Events در سالیدیتی Solidity چیست؟
رویدادها در قراردادهای هوشمند سالیدیتی (solidity events) مانند رویدادها در هر زبان برنامهنویسی دیگری، روشی است تا در خصوص وضعیت فعلی قراردادها اطلاعرسانی کند. یک رویداد عضوی قابل وراثتی از قرارداد هوشمند است که آرگومانهای ارسال شده در اسناد و گزارشهای تراکنش را در هنگام انتشار، ذخیره میکند. در این روش فعالیتها و تغییرات جدید ایجاد شده در قرارداد هوشمند، ثبت میشوند و به شکلی مجزا در بلاک چین ذخیره میشوند.
ثبت و ذخیره این اطلاعات به شکل رویدادها در سالیدیتی برای استفاده در برنامههایی که نیازمند اطلاع از تغییرات وضعیت قرارداد و حسابها هستند و یا به دنبال اطلاع از رویدادهای گذشته هستند، اهمیت زیادی دارد. تا زمان وجود آدرس قرارداد در بلاک چین، دسترسی به اسناد و گزارش این رویدادها از طریق وب 3 و آدرس قرارداد امکانپذیر است. زیرا همانطور که گفته شد این رویدادها به طور مجزا در بلاک چین ذخیره میشوند در نتیجه از داخل قرارداد هوشمند نمیتوان به آنها رسید. برای آشنایی بیشتر با رویدادها در قراردادهای هوشمند سالیدیتی با این مقاله در توکن خان همراه باشید.
قبل از مطالعه کامل مقاله “رویدادها Events در سالیدیتی Solidity” پشنهاد میکنیم مقالات دیگر حوزه آموزش سالیدیتی را هم مطالعه کنید.
Mapping در قرارداد هوشمند Solidity
تابع بازگشتی Fallback Function در سالیدیتی
توسعه قرارداد هوشمند در محیط ریمیکس Remix
توابع modifiers در سالیدیتی solidity
حلقه های تکرار در سالیدیتی Solidity Loop
دستور Enums در برنامه نویسی سالیدیتی
نکاتی کلیدی در مورد Event ها در سالیدیتی
- کلمه کلیدی که برای اعلام رویدادها استفاده میشود کلمه event است که به دنبال آن یک شناسه و لیست پارامترها اعلام میشوند و با یک نقطه ویرگول به پایان میرسند. یک رویداد را میتوان از هر متدی با استفاده از نام آن و ارسال پارامترهای مورد نیاز فراخوانی کرد. (ایجاد یک رویداد)
1event <eventName>(parameters) ; - کلمه کلیدی که برای انتشار رویداد در یک تابع استفاده میشود کلمه emit است.
- رویدادها Events در اسناد و گزارشهای تراکنشهای بلاک چین transaction logs ثبت میشوند.
- دسترسی به رویدادها به طور مستقیم از داخل قراردادهای هوشمند میسر نیست.
- کاربران میتوانند برای پیدا کردن رویدادها، نام و یا پارامترهای آن را جستجو کنند.
- دو نوع پارامتر رویداد Solidity به صورت ایندکسشده و ایندکسنشده وجود دارند. (به رویدادهای ایندکسشده میتوان حداقل سه پارامتر اضافه کرد، پارامترهای ایندکس نشده در قسمت اطلاعات لاگ با ABI کدگذاری میشوند).
اهمیت رویدادها در قراردادهای هوشمند سالیدیتی در اتریوم
در واقع وجود رویدادها Events در بلاک چین اتریوم بسیار تاثیرگذار و مهم است چون موجب تسهیل برقراری ارتباط بین قراردادهای هوشمند و رابط کاربری میشوند. در بلاک چین اتریوم در زمان انجام و استخراج یک تراکنش، رویدادها توسط قراردادهای هوشمند منتشر میشوند و گزارشهایی را در بلاک چین مینویسند که کاربر میتواند آنها را پردازش کند.
همچنین رویدادها در توسعه برنامهها نقشی مهم دارند از این جهت که بیشتر اعمالی که کاربران انجام میدهند زمان بر است و برخی اوقات انجام عمل بعدی مستلزم نتیجه گرفتن از آن تراکنش خاص قبلی است. با کمک رویدادها کاربر متوجه میشود که آیا تراکنشی که انجام داده، کامل شده یا مسدود شده و یا در انتظار برای انجام است. در نتیجه میتوان آن را نوعی ارتباط دهنده بین قرارداد هوشمند و کاربران دانست. به همین دلیل است که برای انجام هر تغییری باید بلاک چین را بررسی کنید.
در حقیقت ما با انجام بارگذاریهای متعدد و بررسی دقیق تراکنشها میتوانیم اطلاعات وضعیت آنها را به دست بیاوریم اما این کار بسیار دشوار و شاید غیرممکن باشد. با وجود رویدادها رسیدن به این اطلاعات بسیار آسانتر انجام میشود و در اینجاست که نقش رویدادها مانند یک راه میانبر مطرح میشود. رویدادها در سالیدیتی در اصل نوعی ذخیره کردن دادهها به صورت مجزا است که به راحتی میتواند توسط نودها nodes خوانده شود.
نمونهای از چگونگی اعلام رویدادها در قراردادهای هوشمند سالیدیتی
در ادامه میتوانید یک مثال از نحوه اعلام یک رویداد را در قرارداد هوشمند مشاهده کنید. همانطور که میبینید در این مثال نام این قرارداد MyFirstContract است.
1 2 3 4 5 6 7 8 9 10 11 |
pragma solidity ^0.7.0; //contract name is MyFirstContract contract MyFirstContract { //create a variable called name string private name; //declare an event event nameEvent(string newName); |
حال مثال بالا را با فراخوانی یک تابع و سپس انتشار رویداد ادامه میدهیم و به این ترتیب رویداد انتشار یافته ثبت میشود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
pragma solidity ^0.7.0; //contract name is MyFirstContract contract MyFirstContract { //create a variable called name string private name; //declare an event event nameEvent(string newName); //set name and emit an event function setName(string memory newName) public { name = newName; //emit an event to the log when this function is called emit nameEvent(name); } } |
کاربرد Event ها در سالیدیتی
از آنجا که قراردادهای هوشمند با همکاری و تعامل بین گروهی از توسعهدهندگان و تیمهای تجاری انجام میشود در نتیجه این افراد قادر خواهند بود فعالیتهای خود را در جهت پاسخ دادن به رویدادها در مسیری درست پیش ببرند. برخی از کاربردهای رویدادها در سالیدیتی به ترتیب زیر است:
- با کمک رویدادها میتوان ایجاد قراردادهای هوشمند را به صورت آزمایشی و برای مشاهده نتیجه، برای متغیرهایی خاص مورد استفاده قرار داد.
- با کمک رویدادها میتوان تعدادی از متغیرها را به منظور بازسازی وضعیت ذخیرهسازی لیست کرد.
- با کمک رویدادها میتوان تغییراتی در فرانتاند Front End ایجاد کرد. (فرانت اند به بخش قابل مشاهده یک برنامه یا وبسایت توسط کاربران گفته میشود)
- با کمک رویدادها میتوان به ایجاد زیرگراف برای بررسی و خواندن سریع دادهها اقدام کرد.
سخن آخر
از رویدادها در سالیدیتی میتوان به عنوان یک فضای ذخیرهسازی ارزان یاد کرد که پارامترهای آن در لاگ تراکنشهای بلاک چین و به صورت مجزا ثبت میشوند. در نتیجه از داخل قراردادهای هوشمند نمیتوان به طور مستقیم به آنها دسترسی داشت. کاربران میتوانند برای دسترسی به رویدادها با نام و یا آدرس قرارداد آن را جستجو کنند، ذخیره کنند و با استفاده از کلمه کلیدی emit، آن را منتشر کنند.
رویدادها در قراردادهای هوشمند سالیدیتی نقشی اساسی در تسهیل ارتباط بین قراردادهای هوشمند و رابط کاربری و به عبارتی کاربران دارند و همچنین به توسعه برنامههای متکی به بلاک چین و قرارداد هوشمند کمک میکنند.
منابع معتبر مرتبط:
مطالب زیر را حتما مطالعه کنید
بررسی رفتار توابع View و Pure در سالیدیتی Solidity
توابع Payable در قراردادهای هوشمند Solidity
سالیدیتی Solidity چیست؟
سطح دسترسی Visibility در سالیدیتی Solidity
توابع Function در سالیدیتی Solidity
انواع حافظه در قرارداد هوشمند سالیدیتی
8 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
مطلب بی نظیری بود
مطلب خوبی بود
کجا می تونم اطلاعات کاملتری درباره این موضوع پیدا کنم؟
مقالاتتون عالین واقعا!
مثل همیشه عالی و کاربردی
خیلی محتوای خوبی بود مهندس
این مطلب حرف نداشت
خیلی ممنون از توضیحات خوبتون