Event Listening dari Test/Script
Penjelasan
Event adalah cara contract Solidity memberi sinyal ke luar (log) bahwa sesuatu terjadi, banyak dipakai off-chain untuk memicu aksi seperti notifikasi atau update UI. Di test Truffle, hasil transaksi (`await contract.someFunction()`) mengembalikan objek yang berisi `logs`, array event yang di-emit selama transaksi itu berjalan — bisa diperiksa nama event dan argumennya lewat `tx.logs[0].event` dan `tx.logs[0].args`. Untuk mendengarkan event secara real-time (bukan hanya dari hasil satu transaksi), web3.js menyediakan `contract.events.NamaEvent()` yang mengembalikan event emitter, berguna untuk script pemantauan yang berjalan terus-menerus mendengarkan aktivitas contract di blockchain.
Contoh Konsep
const SimpleBank = artifacts.require("SimpleBank");
contract("SimpleBank events", (accounts) => {
it("harus emit event Deposited saat deposit", async () => {
const bank = await SimpleBank.deployed();
const tx = await bank.deposit({
from: accounts[0],
value: web3.utils.toWei("1", "ether"),
});
const log = tx.logs[0];
assert.equal(log.event, "Deposited");
assert.equal(log.args.user, accounts[0]);
});
});
Praktikum
Tulis test yang memverifikasi contract SimpleBank meng-emit event Withdrawn dengan argumen user dan amount yang sesuai saat fungsi withdraw dipanggil.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Kalau event tidak muncul di tx.logs padahal contract sudah emit, cek apakah pemanggilan lewat internal call ke contract lain — event dari sub-call tetap tercatat, tapi kadang butuh decode manual lewat truffle-contract.