Soliditas - Acara

Acara adalah anggota kontrak yang diwariskan. Suatu peristiwa dipancarkan, ia menyimpan argumen yang diteruskan dalam log transaksi. Log ini disimpan di blockchain dan dapat diakses menggunakan alamat kontrak sampai kontrak ada di blockchain. Peristiwa yang dihasilkan tidak dapat diakses dari dalam kontrak, bahkan yang telah membuat dan memancarkannya pun tidak.

Sebuah event bisa dideklarasikan dengan menggunakan kata kunci event.

//Declare an Event
event Deposit(address indexed _from, bytes32 indexed _id, uint _value);

//Emit an event
emit Deposit(msg.sender, _id, msg.value);

Contoh

Coba kode berikut untuk memahami bagaimana sebuah event bekerja di Solidity.

Pertama Buat kontrak dan keluarkan acara.

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);
   }
}

Kemudian akses acara kontrak dalam kode JavaScript.

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);
});

Ini harus mencetak detail yang mirip dengan berikut -

Keluaran

{
   "returnValues": {
      "_from": "0x1111...FFFFCCCC",
      "_id": "0x50...sd5adb20",
      "_value": "0x420042"
   },
   "raw": {
      "data": "0x7f...91385",
      "topics": ["0xfd4...b4ead7", "0x7f...1a91385"]
   }
}