Events
The Contract
interface also have APIs to help you work with fully-typed contract events easily and smoothly.
Decode contract events from transaction events
import { ContractEvent } from 'dedot/contract';
// Initialize Contract instance
const contract = new Contract<FlipperContractApi>(client, flipperMetadata, contractAddress, { defaultCaller: ALICE });
const { raw } = await contract.query.flip();
// Extracting contract events from transaction events
const { events } = await contract.tx.flip({
gasLimit: raw.gasRequired,
storageDepositLimit: raw.storageDeposit.value // required for ink! v6
})
.signAndSend(ALICE)
.untilFinalized();
const flippedEvent = contract.events.Flipped.find(events);
console.log('Old value', flippedEvent.data.old);
console.log('New value', flippedEvent.data.new);
// an array of Flipped event
const flippedEvents = contract.events.Flipped.filter(events);
// Get all contract events from current transactions
const contractEvents: ContractEvent[] = contract.decodeEvents(events);
// Another way to get the Flipper event
const flippedEvent2 = contractEvents.find(contract.events.Flipped.is);
Decode contract events from system events
// Extracting contract events from system events
await client.query.system.events((events) => {
// fully-typed event
const flippedEvent = contract.events.Flipped.find(events); // or filter, is
// get all events of this contract from current block
const contractEvents: ContractEvent[] = contract.decodeEvents(events);
})
Contract Event API
find
Find the first target event from the provided events.
const { events } = await contract.tx.flip({ ... })..untilFinalized();
const flippedEvent = contract.events.Flipped.find(events);
filter
Filter the target event from the provided events.
const flippedEvents = contract.events.Flipped.filter(events);
Last updated
Was this helpful?