یکی از بزرگترین مشکلات برنامههای غیرمتمرکز (DApps) تجربه کاربری (UX) است. کار کردن با این برنامهها میتواند دشوار و ناخوشایند باشد. فراهم کردن اطلاعات آنی و به روز برای برنامههای غیرمتمرکز امری اساسی است. در اینجا نحوه مشترک شدن در رویدادهای قرارداد هوشمند مورد بحث قرار میگیرد که این امر باعث میشود که برنامه غیرمتمرکز شما همیشه به روزترین اطلاعات را از بلاک چین (blockchain) نمایش دهد.
۱- بارگذاری web3 برای متصل کردن MetaMask به برنامههای غیرمتمرکز
در ابتدا لازم است که با بارگذاری web3 در مرورگر خود، MetaMask را به برنامه غیرمتمرکز خود وصل کنیم. شکل بالا نحوه انجام این کار را نمایش میدهد.
خط ۴ نشاندهنده فرمانی است که تلاش میکند MetaMask را به برنامههای غیرمتمرکز متصل کند. زمانی که این فرمان درخواست شود، MetaMask یک پنجره برای وارد کردن ورودی را باز خواهد کرد و درخواست اتصال میکند.
زمانی که درخواست پذیرفته شد، برنامه غیرمتمرکز شما متصل میشود.
۲- بارگذاری قرارداد هوشمند
سپس لازم است که قرارداد هوشمند را بارگذاری کنیم که این قرارداد واقعهای را صادر میکند که ما میخواهیم در آن مشترک شویم. در این مثال، ما یک قرارداد هوشمند بنام MyContract داریم که واقعهای بنام MyEvent را صادر میکند.
نمودار بالا نحوه بارگذاری قرارداد هوشمند نمونه را به داخل برنامههای غیرمتمرکز نشان میدهد. در خط ۱، قرارداد هوشمند کامپایل شده (compiled) یعنی فایل JSON را وارد میکنیم. خطوط ۳ و ۴ جزئیات شبکه را جمعآوری میکنند. سپس خط ۵ نمونه قرارداد هوشمند ما را راهاندازی میکند. حالا میتوانیم با قرارداد هوشمند در بلاک چین و با استفاده از نمونه myContract تعامل داشته باشیم.
۳- مشترک شدن
با استفاده از نمونهای که در مرحله ۲ ایجاد کردیم، میتوانیم مشترک شویم تا در جریان همه رویدادهای صادر شده قرار بگیریم.
همچنان که قبلا گفته شد، رویدادی که ما میخواهیم متوجهاش شویم MyEvent نام دارد و شکل بالا هم نحوه آن را نمایش میدهد. نمونه myContract دارای یک دسترسی بنام events است که از آنجا میتوان MyEvent را نشانه گرفت. این یک عملکرد ناهمگام است که یک تعهد را برمیگرداند و هر زمان که MyEvent صادر میشود، این عملکرد فراخوانی خواهد شد.
خط ۳ به تعریف اتفاقی میپردازد که در زمان بازگشت دادهها از تعهد ایجاد میشود. در اینجا، ارزشهای رویداد را در کنسول (console) ثبت میکنیم. این در واقع جایی است که ما نماهایی مانند اعلانات و به روز رسانیهای سطح کاربری را کدگذاری کردهایم تا کاربر را از واقعهای که تازه روی داده است، مطلع کنیم.
با استفاده از این لوجیک (logic)، هر MyEvent که از MyContract صادر شود، در اینجا اعمال خواهد شد.