آموزش Emitting Events در سالیدیتی

در سالیدیتی، Emitting Events به معنای ثبت رویدادهایی در بلاکچین است که هنگام تغییر وضعیت قرارداد اتفاق می‌افتند و امکان پیگیری و مانیتورینگ آن تغییرات را برای محیط خارج از زنجیره فراهم می‌کنند. این رویدادها ابزار مهمی برای شفافیت و تعامل اپلیکیشن ها با قرارداد هوشمند هستند.

آموزش انتشار رویدادها (Emitting Events) در سالیدتی

از نظر فنی، توکن “ERC20” ما هنوز به‌طور کامل مطابق با استاندارد ERC20 نیست. چون یک ویژگی مهم در آن وجود ندارد: رویدادها (Events).

یک قانون کلی: اگر تابعی باعث تغییر وضعیت (State Change) شود، باید آن را ثبت (Log) کرد.

چرا چیزی را ثبت کنیم؟ مگر نه اینکه بلاکچین هر تراکنش را به‌صورت تغییرناپذیر ذخیره می‌کند؟

این درست است؛ رویدادها از نظر فنی الزامی نیستند. اما آن‌ها فرآیند ممیزی (Auditing) گذشته را بسیار آسان‌تر می‌کنند. به جای جستجو در میان مجموعه‌ای از تراکنش ها، کاربر می‌تواند براساس لاگی که به آن علاقه دارد، فیلتر کند و به‌سرعت رویدادهایی (تراکنش هایی) را پیدا کند که اهمیت دارند.

به همین روش، کیف پول رمزارزی شما به‌سرعت می‌تواند موجودی توکن ERC20 شما را شناسایی کند. در غیر این صورت باید تمام تراکنش های تاریخچه یک توکن را بررسی کند تا بفهمد شما مالک آن هستید یا نه. اما لاگ ها طوری ذخیره می‌شوند که بازیابی آن‌ها کارآمد باشد.

نکته مهم: رویدادها توسط قراردادهای هوشمند دیگر قابل مشاهده نیستند. آن‌ها به‌گونه‌ای طراحی شده‌اند که برای پردازش‌های خارج از زنجیره (Off-chain) بهینه باشند.

بیایید یک مثال ببینیم.

یک رویداد (event) می‌تواند حداکثر تا ۳ پارامتر index شده داشته باشد، اما برای تعداد پارامترهای غیر index شده محدودیتی وجود ندارد.

اگر با پایگاه داده (database) آشنایی دارید، می‌توانید index در رویدادها را دقیقاً مانند ایندکس های یک پایگاه داده تصور کنید.

ضمناً، نوشتن نام آرگومان ها بعد از نوع داده اختیاری است. برای مثال، می‌توانستیم رویداد بالا را به صورت زیر بنویسیم:

و هیچ مشکلی هم ایجاد نمی‌شد، البته ممکن است خوانایی کد کمی کمتر شود.

چه زمانی یک متغیر باید index شود و چه زمانی نه؟

اگر فکر می‌کنید ممکن است بخواهید آن مقدار را سریع پیدا کنید—مثل اینکه “آیا یک آدرس خاص با این قرارداد توکن تعامل داشته؟”—در آن صورت باید آن را index کنید.

اما احتمالاً برای شما مهم نیست که “آیا کسی دقیقاً ۱٬۳۷۰٬۹۰۴ توکن در این قرارداد انتقال داده؟”، پس نیازی نیست مقدار مبلغ را index کنید.

در ادامه، نسخه کامل قرارداد ERC20 با رویدادهای اضافه‌شده را داریم. توجه داشته باشید که این رویدادها طبق استاندارد ERC20 اجباری هستند.

با دقت ببینید رویدادها کجا اضافه شده‌اند، مخصوصاً در تابع mint! استفاده از address(0) به‌عنوان منبع به این معناست که توکن ها از هیچ به وجود آمده‌اند، نه از آدرسی دیگر.

به این مطلب امتیاز دهید

راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.

آموزش گام به گام برنامه نویسی اندروید با B4A (پروژه محور)
  • انتشار: ۱۶ اردیبهشت ۱۴۰۴

دسته بندی موضوعات

آخرین محصولات فروشگاه

مشاهده همه

نظرات

بازخوردهای خود را برای ما ارسال کنید