eth_getLogs
In this section, we will see how we can use Bitquery APIs as an alternative to the eth_getLogs JSON RPC method and return an array of Logs object matching the filter object(*optional).
The Logs object consist of the following data.
removed: (boolean) true when the log was removed, due to a chain reorganization. false if it's a valid log.logIndex: Log index position in the block. Null when it is a pending log.transactionIndex: Hexadecimal of the transactions index position from which the log created. Null when it is a pending log.transactionHash: 32 bytes. Hash of the transactions from which this log was created. Null when it is a pending log.blockHash: 32 bytes. Hash of the block where this log was in. Null when it is a pending log.blockNumber: Block number where this log was in. Null when it is a pending log.address: 20 bytes. Address from which this log originated.data: Contains one or more 32-bytes non-indexed arguments of the log.topics: An array of 0 to 4 indexed log arguments, each 32 bytes.
Get Latest Logs​
This subscription API returns the stream of thelatest logs for the Ethereum Mainnet. Now note that there is currently no filter in place.
subscription {
EVM {
Events {
Block {
Hash
Number
}
Transaction {
Hash
Index
}
LogHeader {
Address
Data
Index
Removed
}
Topics {
Hash
}
}
}
}
Get Logs with Filteration​
Now, just like the orignal eth_getLogs method, Bitquery APIs provides the option to filter out the Logs based on the following parameeters.
address: (optional) Contract address (20 bytes) or a list of addresses from which logs should originate.topics: (optional) Array of 32 bytes DATA topics. Topics are order-dependent.blockhash: (optional) Restricts the logs returned to the single block referenced in the 32-byte hash blockHash.
Get Logs Originated From an Address​
This API returns the logs originated from a fixed address, which is 0x7d4a7be025652995364e0e232063abd9e8d65e6e in this case. Also, unlike the JSON RPC method you can fiter out the Logs from multiple addresses using this API.
{
EVM {
Events(
where: {LogHeader: {Address: {is: "0x7d4a7be025652995364e0e232063abd9e8d65e6e"}}}
limit: {count: 10}
) {
Block {
Hash
Number
}
Transaction {
Hash
Index
}
LogHeader {
Address
Data
Index
Removed
}
Topics {
Hash
}
}
}
}
Filter Logs on Topics​
This query filters outs the Logs based on the topics. Also, this query filters out the Logs based on multiple Topics.
{
EVM {
Events(
where: {
Topics: {
includes: {
Hash: {
is:"e1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c"
}
}
}
}
) {
Block {
Hash
Number
}
Transaction {
Hash
Index
}
LogHeader {
Address
Data
Index
Removed
}
Topics {
Hash
}
}
}
}
Get Logs from a Block​
Using this query, you can get the logs that belong to a particular block by using blockHash as a filter. Here 0xa0e1c15b905f4ed6f4e466b2693791ffc6be6ccd3a2a95d403585799ab5fecd9 is the parameter used for filteration.
{
EVM {
Events(
where: {
Block: {
Hash: {
is: "0xa0e1c15b905f4ed6f4e466b2693791ffc6be6ccd3a2a95d403585799ab5fecd9"
}
}
}
) {
Block {
Hash
Number
}
Transaction {
Hash
Index
}
LogHeader {
Address
Data
Index
Removed
}
Topics {
Hash
}
}
}
}