eth_getLogs vs Token Transfers API: histórico de transferências ERC-20

Escolha eth_getLogs para logs de eventos de contratos ou a Token Transfers API para histórico indexado de transferências ERC-20. Compare intervalos de blocos, paginação, cobertura e finalidade.

Para histórico de carteiras ou reconciliação de transferências ERC-20, comece pela Token Transfers API. Use eth_getLogs quando precisar de logs de eventos de contratos. Desenvolvedores e agentes de IA podem consultar transferências indexadas de endereços por meio da mesma Data API de blockchain. O guia de ativos de carteiras combina saldos de tokens, histórico de transferências e metadados; a referência da Data API define os parâmetros de requisição e os esquemas de resposta.

Tarefas que este guia ajuda você a realizar

Duas maneiras de ler logs e transferências

eth_getLogs é um método JSON-RPC: ele retorna logs de blocos por meio do endpoint JSON-RPC. A Data API expõe o histórico de transferências de tokens por meio de dois endpoints com escopo de rede:

  • GET /{chain}/addresses/{address}/transfers — transferências envolvendo um endereço.
  • GET /{chain}/tokens/{token}/transfers — transferências para um único contrato de token.

Ambos usam a mesma API key e são tarifados em CU pelo peso do método (veja os pesos abaixo). A escolha mais adequada depende de quão recentes são os dados, se você precisa de uma janela de blocos e de como realiza a paginação.

Limites aplicáveis ao eth_getLogs

eth_getLogs é delimitado por limites específicos de cada rede que a resposta pública de GET /v1/chains publica:

  • Intervalo de blocos: max_logs_block_range é o número máximo de blocos que uma única requisição eth_getLogs pode abranger. Ele varia por rede — leia-o de GET /v1/chains (as redes estão listadas em Redes suportadas) em vez de fixá-lo no código. Um intervalo maior é rejeitado com o erro JSON-RPC -32602 eth_getLogs block range too large (não tarifado).
  • Sincronização do nó: enquanto o nó de uma rede não estiver sincronizado, eth_getLogs retorna -32010 (não tarifado).
  • Janela de estado: a janela de estado informada por GET /v1/chains como state_window_blocks aplica-se a métodos de leitura de estado como eth_call e eth_getBalance, não a eth_getLogs.
  • Poda do nó (pruning): leituras de blocos e logs não são limitadas pela janela de estado, mas são limitadas pelo histórico retido pelo nó. Dados podados retornam 4444 pruned history unavailable (não tarifado).

Quando os campos de filtro fromBlock e toBlock forem omitidos ou forem null, o padrão adotado será latest.

Chamar eth_subscribe via HTTP retorna -32601 method not available. Nas redes em que ws é true em /v1/chains, eth_subscribe está disponível via WebSocket (consulte Redes suportadas); caso contrário, faça polling com eth_getLogs sobre os blocos mais recentes.

O que os endpoints de transferências da Data API oferecem

Os dois endpoints exigem parâmetros diferentes:

EndpointstandardJanela de blocos
GET /{chain}/addresses/{address}/transfersObrigatório: erc20 ou erc721. erc1155 retorna 422 no_coveragefrom_block e to_block são ambos obrigatórios. Os resultados são ordenados por (block_number, log_index) em ordem decrescente. direction (in, out ou any; padrão any) filtra por direção, e token restringe opcionalmente os resultados a um contrato.
GET /{chain}/tokens/{token}/transfersObrigatório: erc20, erc721 ou erc1155from_block e to_block são opcionais. Um to_block ausente adota as_of_block por padrão; um to_block ou from_block explícito acima desse valor resulta em um erro estrito 409 not_indexed_yet, sem possibilidade de escape por clamp.

Paginação

Ambos os endpoints utilizam paginação baseada em chaves (keyset pagination):

  • limit tem valor padrão de 50; valores acima de 500 são limitados a 500, e 0 ou um valor não inteiro retorna 400 bad_request.
  • next_cursor aparece apenas quando há outra página. Na última página, a chave fica completamente ausente, nunca sendo null.
  • Repasse o valor retornado como cursor, sem alterações, para buscar a próxima página. Um cursor é válido apenas para a rede, o endpoint e os parâmetros de consulta que o geraram.

Cobertura e finalidade

As transferências da Data API indexam transferências históricas de tokens desde o coverage.from_block de cada rede até meta.as_of_block. Consulte Redes suportadas para ver quais redes oferecem esse recurso.

Cada item de transferência contém token, standard, from, to, block_number, block_timestamp, tx_hash, tx_index e log_index. Itens ERC-20 adicionam amount; itens ERC-721 adicionam token_id; itens ERC-1155 adicionam operator, token_id, value e batch_index.

Qual deles usar

Tarefa típicaMelhor opçãoMotivo
Events in the most recent few hundred blockseth_getLogsUma única requisição pode cobrir um intervalo recente, desde que não ultrapasse o max_logs_block_range dessa rede.
An address's historical transfersGET /{chain}/addresses/{address}/transfersConsulta com escopo de endereço com janela from_block/to_block, filtros de direction e token, e paginação por cursor; resultados atendem até as_of_block.
All transfers of a tokenGET /{chain}/tokens/{token}/transfersConsulta com escopo de contrato de token abrangendo erc20, erc721 e erc1155, com janela opcional e paginação por cursor para o conjunto completo de resultados.
Live monitoring of new eventseth_subscribe (WebSocket chains) / eth_getLogs (polling)Inscreva-se em novos blocos ou logs via WebSocket onde houver suporte, ou faça polling em intervalos recentes de blocos.

Consultar logs com eth_getLogs

export BLOCKVECTRA_API_KEY=rgw_your_api_key

# fromBlock / toBlock default to latest. Set an explicit recent range to follow
# new events, and keep its span within the chain's max_logs_block_range.
curl -s "https://api.blockvectra.com/v1/robinhood_mainnet" \
  -H 'Content-Type: application/json' \
  -H "x-api-key: $BLOCKVECTRA_API_KEY" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "eth_getLogs",
    "params": [{
      "address": "0x1111111111111111111111111111111111111111",
      "fromBlock": "latest",
      "toBlock": "latest"
    }]
  }'

Consultar transferências com a Data API

export BLOCKVECTRA_API_KEY=rgw_your_api_key

# from_block / to_block are optional here; omitting to_block defaults to as_of_block.
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/tokens/0x1111111111111111111111111111111111111111/transfers?standard=erc20" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"

Para consultar por endereço, from_block e to_block são obrigatórios:

# clamp=true truncates a too-wide window, or a to_block above as_of_block,
# instead of returning 409.
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/addresses/0x1111111111111111111111111111111111111111/transfers?standard=erc20&from_block=0&to_block=73000000&direction=any&clamp=true" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"

CU por chamada

Cada método é tarifado pelo seu peso em CU. Os pesos abaixo são lidos a partir da API de planos da plataforma:

Peso em CU por chamada

MétodoCU por chamada
eth_getLogs30
data.address_transfers25
data.token_transfers25

Para ver os preços atuais e opções de recarga, consulte a página de preços.

Próximos passos

Última atualização:

Nesta página