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
}
}
}
}