eth_getLogs
Returns an array of all logs matching a given filter object.
When to Use This Method
Use eth_getLogs to:
- Query Contract Events - Find specific emitted events
- Monitor Cross-Chain Activity - Track omnichain events
- Build Event Indexes - Create searchable event databases
- Analyze Historical Data - Query past events
- Real-time Monitoring - Watch for new events
Parameters
Filter object with:
fromBlock- Starting block (optional)toBlock- Ending block (optional)address- Contract address or array of addresses (optional)topics- Array of topics to filter (optional)blockHash- Restrict to single block (optional)
{
"jsonrpc": "2.0",
"method": "eth_getLogs",
"params": [{
"fromBlock": "0x5d9000",
"toBlock": "0x5da000",
"address": "0x239e96c8f17C85c30100AC26F635Ea15f23E9c67",
"topics": [
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
]
}],
"id": 1
}
Returns
Array of log objects with:
address- Address that emitted the eventtopics- Array of indexed parametersdata- Non-indexed parametersblockNumber- Block containing the logtransactionHash- Transaction that created the logtransactionIndex- Transaction positionblockHash- Hash of the blocklogIndex- Log position in blockremoved- True if log was removed (reorg)
Implementation Examples
- cURL
- JavaScript
- Python
curl -X POST https://api-zetachain-mainnet.n.dwellir.com/YOUR_API_KEY -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"blockHash":"0xad1d8e424b6a11fafde340dd05cb02294ce16cc9ffced25192a807a9c0560736","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}],"id":1}'
import { ethers } from 'ethers';
const provider = new ethers.JsonRpcProvider('${S.rpcBase}');
// Query Transfer events
const filter = {
fromBlock: 5999000,
toBlock: 'latest',
address: '0x5F0b1a82749cb4E2278EC87F8BF6B618dC71a8bf',
topics: [
ethers.id('Transfer(address,address,uint256)')
]
};
const logs = await provider.getLogs(filter);
logs.forEach(log => {
console.log('Transfer event:');
console.log(' From:', log.topics[1]);
console.log(' To:', log.topics[2]);
console.log(' Block:', log.blockNumber);
});
// Query cross-chain events
const crossChainFilter = {
address: '0x239e96c8f17C85c30100AC26F635Ea15f23E9c67',
topics: [
ethers.id('CrossChainCall(address,uint256,bytes)')
]
};
const crossChainLogs = await provider.getLogs(crossChainFilter);
from web3 import Web3
w3 = Web3(Web3.HTTPProvider('${S.rpcBase}'))
# Create filter for Transfer events
filter_params = {
'fromBlock': 5999000,
'toBlock': 'latest',
'address': '0x5F0b1a82749cb4E2278EC87F8BF6B618dC71a8bf',
'topics': [w3.keccak(text='Transfer(address,address,uint256)').hex()]
}
logs = w3.eth.get_logs(filter_params)
for log in logs:
print(f"Event at block {log['blockNumber']}")
print(f" Transaction: {log['transactionHash'].hex()}")
Related Methods
eth_newFilter- Create event filter (create filter with your node)eth_getFilterChanges- Poll for new log events- eth_getTransactionReceipt - Get logs from receipt