رویدادها در Solidity – انجمن DEV
رویدادها رابطهایی با قابلیت ثبت EVM هستند که به توسعهدهندگان اجازه میدهند تغییرات در قراردادهای هوشمند را ردیابی کنند.
رویدادهای یکپارچگی سیگنال هایی هستند که قراردادهای هوشمند می توانند شلیک کنند، که باعث می شود آرگومان ها در گزارش تراکنش ذخیره شوند. رویدادها برای توسعه دهندگان قراردادهای هوشمند بسیار مهم هستند زیرا به قراردادهای هوشمند اجازه می دهند تا متغیرها را به منظور بازسازی مرحله ذخیره سازی فهرست بندی کنند، به به روز رسانی خودکار رابط کاربری کمک کنند و امکان آزمایش متغیرهای خاص را فراهم کنند. رویدادها اعضای ارثی یک قرارداد هستند که آرگومانهای ارسال شده در گزارشهای تراکنش را هنگام انتشار ذخیره میکنند. این گزارشها روی بلاک چین ذخیره میشوند و تا زمانی که قرارداد روی بلاک چین وجود داشته باشد، با استفاده از آدرس قرارداد قابل دسترسی هستند.
رویدادها برنامه های کاربردی را در مورد تغییرات ایجاد شده در قراردادها و برنامه هایی که می توانند برای اجرای منطق وابسته استفاده شوند، آگاه می کنند. رویدادهای Solidity به ما این امکان را میدهند که به راحتی «موارد» را که در بلوکها و تراکنشها اتفاق افتاده است، جستجو کنیم. اگر یک گره بلاک چین اجرا می کنید، می توانید به رویدادهای Solidity گوش دهید و مطابق با آن واکنش نشان دهید. دانستن نحوه استفاده از رویدادها در Solidity توسعه قرارداد هوشمند را آسانتر میکند.
در زیر مثالی از نحوه اعلام یک رویداد آورده شده است:
event Transfer(address indexed _from, address indexed _to, uint256 _value);
این رویداد به برنامه خارجی اطلاع می دهد که چیزی در بلاک چین تغییر کرده است. مثال بعدی یک رویداد ایجاد می کند که دارای دو پارامتر است: آدرس فرستنده و یک پیام رشته:
event Message(address indexed sender, string message);
نمونه های رویداد Solidity شامل تعریف و انتشار یک رویداد برای انتقال است. این کد برای یک برنامه انتقال اتریوم که در آن رویداد در یک انتقال فعال می شود، اعمال می شود. کد اضافی را می توان اضافه کرد تا به رویداد اجازه دهد، پس از راه اندازی، رابط کاربری را که نشان می دهد انتقال انجام شده است، به روز کند. برای ایجاد یک رویداد، باید در قراردادها به عنوان جهانی تعریف شود و در توابع آنها فراخوانی شود. رویدادها با استفاده از کلمه کلیدی رویداد و به دنبال آن یک شناسه و لیست پارامترهایی که با نقطه ویرگول به پایان می رسد، اعلام می شوند. مقادیر پارامتر برای ثبت اطلاعات یا اجرای منطق شرطی استفاده می شود.
در Solidity، زمانی که یک رویداد منتشر میشود، به بخشی ارثی از قرارداد تبدیل میشود و آرگومانهایی را که در لاگ تراکنشها ارائه شده است، نگه میدارد. تا زمانی که قرارداد بر روی بلاک چین وجود دارد، این گزارشها در بلاک چین ذخیره میشوند و با استفاده از آدرس قرارداد برای پیمایش به آنها میتوان به آنها دسترسی داشت.
تولید رویداد از درون قراردادها، از جمله قراردادی که در وهله اول رویداد را ایجاد و منتشر کرده است، قابل دسترسی نیست. به طور کلی، رویدادها برای اطلاع رسانی به برنامه تماس گیرنده در مورد وضعیت فعلی قرارداد استفاده می شود که از طریق استفاده از قابلیت ثبت گزارش ارائه شده توسط ماشین مجازی اتریوم انجام می شود.
برنامه هایی که ممکن است برای اجرای منطق وابسته استفاده شوند، از تغییرات قراردادها و برنامه هایی که می توانند برای اطلاع رسانی برنامه های کاربردی از تغییرات قراردادها استفاده شوند، مطلع می شوند. از کلمه کلیدی رویداد می توان برای اعلام یک رویداد خاص استفاده کرد.
یک مثال کد خوب برای رویدادها در Solidity به شرح زیر است:
event MyEvent(uint indexed _value);
function doSomething() public {
emit MyEvent(42);
}
رویدادها در قراردادها به عنوان رویدادهای جهانی تعریف می شوند که می توانند از درون عملکردهای قرارداد فراخوانی شوند. با استفاده از کلمه کلیدی رویداد و به دنبال آن یک شناسه و لیست پارامترها و پایان دادن به نقطه ویرگول، می توانید رویدادها را در برنامه خود اعلام کنید.
مقادیر پارامتر برای ثبت اطلاعات یا برای اجرای منطق شرطی بسته به موقعیت استفاده می شود. اطلاعات و مقادیر مرتبط با آن به عنوان بخشی از تراکنش هایی که در داخل بلوک انجام می شود ثبت می شود. هیچ الزامی برای ارائه متغیرها وجود ندارد. در عوض فقط انواع داده مورد نیاز است.
یک رویداد را می توان از هر متدی با ارجاع به نام و ارسال پارامترهای لازم برای تکمیل کار به آن فراخوانی کرد.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Event {
// Event declaration
// Up to 3 parameters can be indexed.
// Indexed parameters helps you filter the logs by the indexed parameter
event Log(address indexed sender, string message);
event AnotherLog();
function test() public {
emit Log(msg.sender, "Hello Neuron!");
emit Log(msg.sender, "Welcome to Tech Neuron!");
emit AnotherLog();
}
}
برای مطالب بیشتر، مرا در – https://linktr.ee/shlokkumar2303 دنبال کنید