eth_getLogs vs Token Transfers API : historique des transferts ERC-20
Choisissez eth_getLogs pour les logs d'événements de contrat ou l'API Token Transfers pour l'historique indexé des transferts ERC-20. Comparez les plages de blocs, la pagination, la couverture et la finalité.
Pour l'historique d'un portefeuille ou la réconciliation des transferts ERC-20, commencez par la Token Transfers API. Utilisez eth_getLogs lorsque vous avez besoin des logs d'événements de contrat. Les développeurs et les agents IA peuvent interroger les transferts d'adresses indexés via la même API de données blockchain. Le guide des actifs de portefeuille combine les soldes de jetons, l'historique des transferts et les métadonnées ; la référence de la Data API définit les paramètres de requête et les schémas de réponse.
Tâches que ce guide vous aide à accomplir
- Interroger les logs d'événements de contrat via le RPC authentifié dans des plages de blocs bornées pour la surveillance ou le rétro-remplissage de logs.
- Interroger l'historique indexé des transferts ERC-20 via l'API de données blockchain par adresse ou par contrat de jeton, avec pagination par curseur et vérifications de couverture.
Deux façons de lire les logs et les transferts
eth_getLogs est une méthode JSON-RPC : elle renvoie les logs de blocs via l'endpoint JSON-RPC. La Data API expose l'historique des transferts de jetons via deux endpoints délimités par chaîne :
GET /{chain}/addresses/{address}/transfers— transferts impliquant une adresse.GET /{chain}/tokens/{token}/transfers— transferts pour un contrat de jeton unique.
Les deux utilisent la même API key et sont mesurés en CU selon le poids de la méthode (voir les poids ci-dessous). Le choix de l'une ou l'autre dépend de l'ancienneté des données, du besoin d'une fenêtre de blocs et du mode de pagination.
Limites qui s'appliquent à eth_getLogs
eth_getLogs est encadré par des limites par chaîne publiées par la réponse publique de GET /v1/chains :
- Étendue de blocs :
max_logs_block_rangeest le nombre maximal de blocs qu'une seule requêteeth_getLogspeut couvrir. Il varie selon la chaîne — lisez-le depuisGET /v1/chains(les chaînes sont répertoriées sur la page Chaînes prises en charge) plutôt que de le coder en dur. Une plage plus large est rejetée avec l'erreur JSON-RPC-32602 eth_getLogs block range too large(non facturé). - Synchronisation du nœud : tant que le nœud d'une chaîne n'est pas synchronisé,
eth_getLogsrenvoie-32010(non facturé). - Fenêtre d'état : la fenêtre d'état que
GET /v1/chainsindique sous le nomstate_window_blockss'applique aux méthodes de lecture d'état telles queeth_calleteth_getBalance, et non àeth_getLogs. - Élagage du nœud : les lectures de blocs et de logs ne sont pas limitées par la fenêtre d'état, mais elles sont limitées par l'historique conservé par le nœud. Les données élaguées renvoient
4444 pruned history unavailable(non facturé).
Lorsque les champs de filtre fromBlock et toBlock sont omis ou définis sur null, ils prennent la valeur par défaut latest.
Appeler eth_subscribe sur HTTP renvoie -32601 method not available. Sur les chaînes où ws vaut true dans /v1/chains, eth_subscribe est disponible via WebSocket (voir Chaînes prises en charge) ; sinon, scrutez eth_getLogs sur les blocs les plus récents.
Ce que fournissent les endpoints de transferts de la Data API
Les deux endpoints nécessitent des paramètres différents :
| Endpoint | standard | Fenêtre de blocs |
|---|---|---|
GET /{chain}/addresses/{address}/transfers | Requis : erc20 ou erc721. erc1155 renvoie 422 no_coverage | from_block et to_block sont tous deux requis. Les résultats sont triés par (block_number, log_index) par ordre décroissant. direction (in, out ou any ; par défaut any) filtre par direction, et token restreint facultativement les résultats à un seul contrat. |
GET /{chain}/tokens/{token}/transfers | Requis : erc20, erc721 ou erc1155 | from_block et to_block sont facultatifs. L'absence de to_block prend la valeur par défaut as_of_block ; un to_block ou from_block explicite supérieur à celui-ci déclenche une erreur stricte 409 not_indexed_yet, sans possibilité d'échappement par clamp. |
Pagination
Les deux endpoints utilisent une pagination par jeu de clés (keyset) :
limita pour valeur par défaut 50 ; les valeurs supérieures à 500 sont ramenées à 500, et0ou une valeur non entière renvoie400 bad_request.next_cursorn'apparaît que lorsqu'il existe une page suivante. Sur la dernière page, la clé est totalement absente, jamaisnull.- Transmettez la valeur renvoyée dans le paramètre
cursor, sans modification, pour récupérer la page suivante. Un curseur n'est valide que pour la chaîne, l'endpoint et les paramètres de requête qui l'ont émis.
Couverture et finalité
Les transferts de la Data API indexent l'historique des transferts de jetons depuis le coverage.from_block de chaque chaîne jusqu'à meta.as_of_block. Consultez la page Chaînes prises en charge pour savoir quelles chaînes le proposent.
Chaque élément de transfert contient token, standard, from, to, block_number, block_timestamp, tx_hash, tx_index et log_index. Les éléments ERC-20 ajoutent amount ; les éléments ERC-721 ajoutent token_id ; les éléments ERC-1155 ajoutent operator, token_id, value et batch_index.
Lequel utiliser
| Tâche type | Meilleur choix | Pourquoi |
|---|---|---|
| Événements dans les quelques centaines de blocs les plus récents | eth_getLogs | Une seule requête peut couvrir une plage récente tant qu'elle ne dépasse pas le max_logs_block_range de cette chaîne. |
| Transferts historiques d'une adresse | GET /{chain}/addresses/{address}/transfers | Requête ciblée par adresse avec une fenêtre from_block/to_block, des filtres direction et token, et une pagination par curseur ; les résultats sont servis jusqu'à as_of_block. |
| Tous les transferts d'un jeton | GET /{chain}/tokens/{token}/transfers | Requête ciblée par contrat de jeton couvrant erc20, erc721 et erc1155, avec une fenêtre facultative et une pagination par curseur pour le jeu complet de résultats. |
| Surveillance en direct des nouveaux événements | eth_subscribe (chaînes WebSocket) / eth_getLogs (scrutation) | Abonnez-vous aux nouvelles têtes ou aux logs via WebSocket lorsque c'est pris en charge, ou scrutez des plages de blocs récentes. |
Interroger les logs avec 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"
}]
}'Interroger les transferts avec la 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"Pour interroger par adresse à la place, from_block et to_block sont requis :
# 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 par appel
Chaque méthode est facturée selon son poids en CU. Les poids ci-dessous sont lus depuis l'API des forfaits de la plateforme :
Poids en CU par appel
| Méthode | CU par appel |
|---|---|
eth_getLogs | 30 |
data.address_transfers | 25 |
data.token_transfers | 25 |
Pour les prix actuels et les options de recharge, consultez la page Tarifs.
Prochaines étapes
- Parcourir le catalogue des jeux de données pour découvrir chaque jeu de données indexé par BlockVectra.
- Consulter le forfait gratuit et les tarifs pour vérifier ce que comprend votre compte.
- Se connecter à la console pour créer une API key.
Dernière mise à jour :
Comparaison avec Infura
Utilisez les crédits de cycle BlockVectra pour les tâches de lecture concentrées, payez par méthode sans abonnement RPC mensuel, et automatisez la création de compte et le financement en stablecoins.
Une clé, plusieurs chaînes
La même API key fonctionne sur toutes les chaînes prises en charge. Découvrez la structure des URL, la détection programmatique des chaînes et la mutualisation des soldes et limites.