Skip to main content
Version: Current

Event logs

addLog(options)

Get event logs emitted by some or all contracts in the network. options has the following structure:

{
// data requests
address?: string[]
topic0?: string[]
topic1?: string[]
topic2?: string[]
topic3?: string[]
range?: {from: number, to?: number}

// related data retrieval
transaction?: boolean
}

Data requests:

  • address: the set of addresses of contracts emitting the logs. Omit to subscribe to events from all contracts in the network.
  • topicN: the set of values of topicN.
  • range: the range of blocks to consider.

With transaction = true the processor will retrieve all parent transactions and add them to the transactions iterable within the block data. Additionally it will expose them via the .transaction field of each log item.

Note that logs can also be requested by the addTransaction() method as related data.

Selection of the exact data to be retrieved for each log and its optional parent transaction is done with the setFields() method documented on the Field selection page. Some examples are available below.

Examples

  1. Fetch NewGravatar(uint256,address,string,string) and UpdateGravatar(uint256,address,string,string) event logs emitted by 0x2E645469f354BB4F5c8a05B3b30A929361cf77eC. For each log, fetch topic set, log data. Fetch parent transactions with their inputs.
const processor = new EvmBatchProcessor()
.setGateway(lookupArchive('eth-mainnet'))
.setRpcEndpoint('<my_eth_rpc_url>')
.setFinalityConfirmation(75)
.addLog({
address: ['0x2e645469f354bb4f5c8a05b3b30a929361cf77ec'],
topic0: [
// topic: 'NewGravatar(uint256,address,string,string)'
'0x9ab3aefb2ba6dc12910ac1bce4692cf5c3c0d06cff16327c64a3ef78228b130b',
// topic: 'UpdatedGravatar(uint256,address,string,string)'
'0x76571b7a897a1509c641587568218a290018fbdc8b9a724f17b77ff0eec22c0c',
],
transaction: true
})
.setFields({
log: {
topics: true,
data: true
},
transaction: {
input: true
}
})
tip

Typescript ABI modules generated by [squid-evm-typegen[(/sdk/reference/typegen/state-queries) provide event signatures/topic0 values as constants, e.g.

  import * as gravatarAbi from './abi/gravatar'
// ...
topic0: [
gravatarAbi.events.NewGravatar.topic,
gravatarAbi.events.UpdatedGravatar.topic,
],
// ...
  1. Fetch every Transfer(address,address,uint256) event on Ethereum mainnet where topic2 is set to the destination address (a common but non-standard practice) and the destination is vitalik.eth a.k.a. 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045. For each log, fetch transaction hash.
const processor = new EvmBatchProcessor()
.setGateway(lookupArchive('eth-mainnet'))
.setRpcEndpoint('<my_eth_rpc_url>')
.setFinalityConfirmation(75)
.addLog({
topic0: [
// topic0: 'Transfer(address,address,uint256)'
'0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'
],
topic2: [
// vitalik.eth
'0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045'
]
})
.setFields({
log: {
transactionHash: true
}
})