Filtering Transaction Logs
Basement's transactionLogs
query is a more advanced equivalent of the eth_getLogs
query provided by RPC nodes such as Geth. With Basement you can paginate over a certain log, without specifying a range of block numbers. This API also allows you to scope to a specific transaction address, so you're only querying the logs you need for your users.
Listing approvals
Approvals (Implemented in ERC20 and ERC721-like contracts) are a common interaction for user wallets, they allow another contract to spend a token or NFT on behalf of the user. Users grant this approval to for example DEXs and Marketplaces such as Uniswap and OpenSea.
Aside from the standard topics
filters you also find in Geth, Basement allows you to specify a transaction
filter, similar to the transactions
root query.
- GraphQL
- SDK
query GetApprovalsForAddress {
transactionLogs(
filter: {
topics: [["ApprovalForAll(address,address,bool)"], [], []]
transaction: { fromAddresses: ["dom.eth"] }
}
) {
transactionLogs {
address {
reverseProfile {
name
}
address
}
topics
data
}
}
}
const data = await sdk.transactionLogs({
filter: {
topics: [["ApprovalForAll(address,address,bool)"], [], []],
transaction: { fromAddresses: ["dom.eth"] },
},
include: {
address: { reverseProfile: true },
},
});
The example shown lists any ApprovalForAll initiated by dom.eth
. The entire history of approvals within this wallet is paginated and can be fetched in a few requests, whereas QuicNode would allow you to index in 10.000 block increments, resulting in a bill of 1.600 eth_getLogs RPC calls. If indexed linearly, Basement offers a performance improvement of 500ms to 30 minutes.