Study
Truffle

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.

Editor Latihan

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.