Events
Events are data emitted by transactions for off-chain consumers (indexers, frontends).
Events are data emitted by transactions for off-chain consumers (indexers, frontends). They are not readable by Move code.
24.1 Sui events
Event types must have copy and drop and be defined in the emitting package's module.
Query via RPC/GraphQL by event type (0xPKG::events_demo::ItemListed), sender, transaction, or subscribe through indexers.
module market::events_demo;
use sui::event;
public struct ItemListed has copy, drop {
item_id: ID,
seller: address,
price: u64,
}
public fun list(item_id: ID, price: u64, ctx: &TxContext) {
event::emit(ItemListed { item_id, seller: ctx.sender(), price });
}24.2 Aptos module events
Struct must be annotated #[event] and have drop + store.
Older Aptos code uses handle-based events (EventHandle<T>, event::emit_event(&mut handle, e)), now deprecated in favor of module events.
module my_addr::market {
use aptos_framework::event;
#[event]
struct ItemListed has drop, store {
item: address,
seller: address,
price: u64,
}
public entry fun list(seller: &signer, item: address, price: u64) {
event::emit(ItemListed {
item,
seller: std::signer::address_of(seller),
price,
});
}
}24.3 Event design tips
Include IDs/addresses of everything involved Indexers can join data Emit after state changes succeed
Events in aborted transactions are discarded anyway, but logic is clearer Use one event type per action Don't rely on events for on-chain logic Move code cannot read events