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
- Consultar logs de eventos de contratos via RPC autenticado em intervalos de blocos delimitados para monitoramento ou recuperação de logs.
- Consultar histórico indexado de transferências ERC-20 por meio da Data API de blockchain por endereço ou contrato de token, com paginação por cursor e verificações de cobertura.
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çãoeth_getLogspode abranger. Ele varia por rede — leia-o deGET /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_getLogsretorna-32010(não tarifado). - Janela de estado: a janela de estado informada por
GET /v1/chainscomostate_window_blocksaplica-se a métodos de leitura de estado comoeth_calleeth_getBalance, não aeth_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:
| Endpoint | standard | Janela de blocos |
|---|---|---|
GET /{chain}/addresses/{address}/transfers | Obrigatório: erc20 ou erc721. erc1155 retorna 422 no_coverage | from_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}/transfers | Obrigatório: erc20, erc721 ou erc1155 | from_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):
limittem valor padrão de 50; valores acima de 500 são limitados a 500, e0ou um valor não inteiro retorna400 bad_request.next_cursoraparece apenas quando há outra página. Na última página, a chave fica completamente ausente, nunca sendonull.- 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ípica | Melhor opção | Motivo |
|---|---|---|
| Events in the most recent few hundred blocks | eth_getLogs | Uma única requisição pode cobrir um intervalo recente, desde que não ultrapasse o max_logs_block_range dessa rede. |
| An address's historical transfers | GET /{chain}/addresses/{address}/transfers | Consulta 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 token | GET /{chain}/tokens/{token}/transfers | Consulta 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 events | eth_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étodo | CU por chamada |
|---|---|
eth_getLogs | 30 |
data.address_transfers | 25 |
data.token_transfers | 25 |
Para ver os preços atuais e opções de recarga, consulte a página de preços.
Próximos passos
- Navegue pelo diretório de conjuntos de dados para ver todos os conjuntos de dados indexados pela BlockVectra.
- Veja o plano gratuito e os preços para verificar o que sua conta inclui.
- Entre no console para criar uma API key.
Última atualização:
Comparação com Infura
Use os créditos de ciclo do BlockVectra para tarefas concentradas de leitura, pague por método sem assinatura mensal de RPC e automatize a criação de contas e recargas em stablecoins.
Uma chave, várias redes
A mesma API key funciona em todas as redes compatíveis. Saiba como as URLs são estruturadas, como descobrir redes de forma programática e como saldos e limites são unificados.