Docs
Supported ChainsFlow EVM GatewayJSON-RPC APISmart Contract Methods

eth_getLogs - Flow EVM RPC Method

Query event logs on Flow EVM Gateway. Essential for indexing consumer NFTs (NBA Top Shot, Disney Pinnacle), gaming dApps, and hybrid Cadence-EVM applications on the EVM-equivalent layer on Flow blockchain enabling Cadence+Solidity composability.

Returns an array of all logs matching a given filter object on Flow EVM Gateway.

Why Flow EVM? Build on the EVM-equivalent layer on Flow blockchain enabling Cadence+Solidity composability with full EVM equivalence on Flow, atomic multi-operation transactions, 40% lower gas fees, and 473% contract growth in 2025.

Use Cases

The eth_getLogs method is essential for:

  • Event indexing - Track contract events for consumer NFTs (NBA Top Shot, Disney Pinnacle), gaming dApps, and hybrid Cadence-EVM applications
  • Token transfers - Monitor ERC20/ERC721 transfers
  • DeFi analytics - Track swaps, liquidity events, and more
  • Notification systems - Alert on specific on-chain events

Request Parameters

Request
fromBlockQUANTITY|TAG

Starting block (default: "latest")

toBlockQUANTITY|TAG

Ending block (default: "latest")

addressDATA|Array

Contract address(es) to filter

topicsArray

Array of topic filters

blockHashDATA

Filter single block by hash

Response Body

Response
addressDATA

Contract that emitted the log

topicsArray

Array of indexed topics

dataDATA

Non-indexed log data

blockNumberQUANTITY

Block number

transactionHashDATA

Transaction hash

logIndexQUANTITY

Log index in block

Code Examples

Bash
curl -X POST https://api-flow-evm-gateway-mainnet.n.dwellir.com/YOUR_API_KEY \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "eth_getLogs",
    "params": [{
      "fromBlock": "latest",
      "toBlock": "latest",
      "address": "0xd3bF53DAC106A0290B0483EcBC89d40FcC961f3e",
      "topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]
    }],
    "id": 1
  }'
JavaScript
import { JsonRpcProvider, Contract } from 'ethers';

const provider = new JsonRpcProvider('https://api-flow-evm-gateway-mainnet.n.dwellir.com/YOUR_API_KEY');

// Get Transfer events
const TRANSFER_TOPIC = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';

async function getTransferEvents(tokenAddress, fromBlock, toBlock) {
  const logs = await provider.getLogs({
    address: tokenAddress,
    topics: [TRANSFER_TOPIC],
    fromBlock: fromBlock,
    toBlock: toBlock
  });

  return logs.map(log => ({
    from: '0x' + log.topics[1].slice(26),
    to: '0x' + log.topics[2].slice(26),
    blockNumber: log.blockNumber,
    transactionHash: log.transactionHash
  }));
}

const events = await getTransferEvents(
  '0xd3bF53DAC106A0290B0483EcBC89d40FcC961f3e',
  'latest',
  'latest'
);
console.log('Transfer events:', events);
Python
from web3 import Web3

w3 = Web3(Web3.HTTPProvider('https://api-flow-evm-gateway-mainnet.n.dwellir.com/YOUR_API_KEY'))

TRANSFER_TOPIC = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'

def get_transfer_events(token_address, from_block, to_block):
    logs = w3.eth.get_logs({
        'address': token_address,
        'topics': [TRANSFER_TOPIC],
        'fromBlock': from_block,
        'toBlock': to_block
    })

    events = []
    for log in logs:
        events.append({
            'from': '0x' + log['topics'][1].hex()[26:],
            'to': '0x' + log['topics'][2].hex()[26:],
            'block': log['blockNumber'],
            'tx': log['transactionHash'].hex()
        })

    return events

events = get_transfer_events(
    '0xd3bF53DAC106A0290B0483EcBC89d40FcC961f3e',
    'latest',
    'latest'
)
print(f'Found {len(events)} transfer events')
Go
package main

import (
    "context"
    "fmt"
    "log"
    "math/big"

    "github.com/ethereum/go-ethereum"
    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/ethclient"
)

func main() {
    client, err := ethclient.Dial("https://api-flow-evm-gateway-mainnet.n.dwellir.com/YOUR_API_KEY")
    if err != nil {
        log.Fatal(err)
    }

    contractAddress := common.HexToAddress("0xd3bF53DAC106A0290B0483EcBC89d40FcC961f3e")
    transferTopic := common.HexToHash("0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef")

    query := ethereum.FilterQuery{
        FromBlock: big.NewInt(0),
        ToBlock:   nil,
        Addresses: []common.Address{contractAddress},
        Topics:    [][]common.Hash,
    }

    logs, err := client.FilterLogs(context.Background(), query)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Found %d events\n", len(logs))
}

Error Handling

Error CodeMessageDescription
-32005Query returned more than 10000 resultsReduce block range
-32602Invalid paramsInvalid filter parameters