Events & Logging di Solidity
Penjelasan
Event dideklarasikan dengan `event NamaEvent(tipe parameter, ...)`, dan dipicu (dicatat ke log blockchain) dengan `emit NamaEvent(nilai, ...)`. Event TIDAK bisa dibaca dari dalam kontrak lain, tapi aplikasi luar (mis. website yang terhubung ke kontrak) bisa "mendengarkan" event ini secara real-time — cara utama kontrak "memberi tahu" dunia luar bahwa sesuatu terjadi (mis. transfer token). Parameter yang ditandai `indexed` bisa dipakai untuk filter pencarian event dengan cepat.
Contoh Konsep
contract Token {
event Transfer(address indexed dari, address indexed ke, uint256 jumlah);
mapping(address => uint256) public saldo;
function transfer(address ke, uint256 jumlah) public {
saldo[msg.sender] -= jumlah;
saldo[ke] += jumlah;
emit Transfer(msg.sender, ke, jumlah); // catat ke log blockchain
}
}
Praktikum
Buat event PesananDibuat(address indexed pembeli, uint256 idPesanan), lalu emit event itu di dalam function buatPesanan(uint256 idPesanan).
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Event jauh lebih MURAH secara gas dibanding menyimpan data yang sama ke variabel storage — kalau data itu cuma perlu "dicatat sebagai riwayat" (bukan dibaca ulang oleh kontrak lain), event adalah pilihan yang jauh lebih efisien.