مشخصات مقاله
آموزش Event در سالیدیتی
رویداد عضوی ارث برده شده، از یک قرارداد است. هنگامی که یک رویداد منتشر می شود، آرگومان های ارسال شده در گزارش های تراکنش را ذخیره می کند. این گزارشها روی بلاک چین ذخیره میشوند و تا زمانی که قرارداد روی بلاک چین وجود داشته باشد، با استفاده از آدرس قرارداد قابل دسترسی هستند. یک رویداد ایجاد شده از درون قراردادها قابل دسترسی نیست، حتی رویدادی که آنها را ایجاد و منتشر کرده است.
یک رویداد را می توان با استفاده از کلمه کلیدی event ایجاد کرد.
//Declare an Event event Deposit(address indexed _from, bytes32 indexed _id, uint _value); //Emit an event emit Deposit(msg.sender, _id, msg.value);
برای درک نحوه عملکرد یک رویداد در Solidity کد زیر را امتحان کنید. ابتدا یک قرارداد ایجاد و یک event را منتشر نمایید.
pragma solidity ^0.5.0; contract Test { event Deposit(address indexed _from, bytes32 indexed _id, uint _value); function deposit(bytes32 _id) public payable { emit Deposit(msg.sender, _id, msg.value); } }
سپس به event قرارداد در کد جاوا اسکریپت دسترسی پیدا نمایید.
var abi = /* abi as generated using compiler */; var ClientReceipt = web3.eth.contract(abi); var clientReceiptContract = ClientReceipt.at("0x1234...ab67" /* address */); var event = clientReceiptContract.Deposit(function(error, result) { if (!error)console.log(result); });
باید جزئیاتی مانند موارد زیر چاپ شود :
{ "returnValues": { "_from": "0x1111...FFFFCCCC", "_id": "0x50...sd5adb20", "_value": "0x420042" }, "raw": { "data": "0x7f...91385", "topics": ["0xfd4...b4ead7", "0x7f...1a91385"] } }