eth_getLogs проти Token Transfers API: історія переказів ERC-20

Обирайте eth_getLogs для журналів подій контрактів або Token Transfers API для індексованої історії переказів ERC-20. Порівняйте діапазони блоків, пагінацію, покриття та фінальність.

Для історії гаманця або звірки переказів ERC-20 почніть із Token Transfers API. Використовуйте eth_getLogs, коли вам потрібні журнали подій контрактів. Розробники та AI-агенти можуть запитувати індексовані перекази адрес через той самий блокчейн-API даних. Посібник з активів гаманця поєднує баланси токенів, історію переказів та метадані; довідник Data API визначає параметри запитів та схеми відповідей.

Завдання, які допомагає вирішити цей посібник

Два способи читання журналів та переказів

eth_getLogs — це метод JSON-RPC: він повертає журнали блоків через ендпоінт JSON-RPC. Data API надає історію переказів токенів через два ендпоінти в межах мережі:

  • GET /{chain}/addresses/{address}/transfers — перекази за участю адреси.
  • GET /{chain}/tokens/{token}/transfers — перекази для одного контракту токена.

Обидва використовують однаковий API key і тарифікуються в CU за вагою методу (див. ваги нижче). Який варіант підходить, залежить від актуальності даних, необхідності вікна блоків та способу пагінації.

Ліміти, що застосовуються до eth_getLogs

eth_getLogs обмежений лімітами для кожної мережі, які публікує загальнодоступна відповідь GET /v1/chains:

  • Діапазон блоків: max_logs_block_range — це максимальна кількість блоків, яку може охоплювати один запит eth_getLogs. Це значення відрізняється залежно від мережі — зчитуйте його з GET /v1/chains (мережі наведено на сторінці Підтримувані мережі) замість жорсткого кодування. Ширший діапазон відхиляється з помилкою JSON-RPC -32602 eth_getLogs block range too large (не тарифікується).
  • Синхронізація вузла: доки вузол мережі не синхронізований, eth_getLogs повертає -32010 (не тарифікується).
  • Вікно стану: вікно стану, яке GET /v1/chains повертає як state_window_blocks, застосовується до методів зчитування стану, таких як eth_call та eth_getBalance, а не до eth_getLogs.
  • Прунінг вузла: читання блоків і журналів не обмежується вікном стану, але обмежується збереженою історією вузла. Дані, які були видалені прунінгом, повертають 4444 pruned history unavailable (не тарифікується).

Якщо поля фільтра fromBlock та toBlock пропущено або вони мають значення null, типово використовується latest.

Виклик eth_subscribe через HTTP повертає -32601 method not available. У мережах, де ws має значення true у /v1/chains, метод eth_subscribe доступний через WebSocket (див. Підтримувані мережі); в іншому випадку опитуйте eth_getLogs для найновіших блоків.

Що надають ендпоінти переказів Data API

Два ендпоінти вимагають різних параметрів:

ЕндпоінтstandardВікно блоків
GET /{chain}/addresses/{address}/transfersОбов'язковий: erc20 або erc721. erc1155 повертає 422 no_coverageОбидва параметри from_block та to_block обов'язкові. Результати сортуються за (block_number, log_index) за спаданням. direction (in, out або any; типово any) фільтрує за напрямком, а token додатково обмежує результати одним контрактом.
GET /{chain}/tokens/{token}/transfersОбов'язковий: erc20, erc721 або erc1155Параметри from_block та to_block є необов'язковими. Відсутній to_block типово встановлюється в as_of_block; явний to_block або from_block вище цього значення призводить до суворої помилки 409 not_indexed_yet без можливості обходу через clamp.

Пагінація

Обидва ендпоінти використовують пагінацію на основі ключів (keyset pagination):

  • limit типово дорівнює 50; значення понад 500 обмежуються до 500, а 0 або неціле число повертає 400 bad_request.
  • next_cursor з'являється лише тоді, коли існує наступна сторінка. На останній сторінці ключ повністю відсутній і ніколи не має значення null.
  • Передавайте повернуте значення як cursor без змін, щоб отримати наступну сторінку. Курсор дійсний лише для тієї мережі, ендпоінта та параметрів запиту, які його видали.

Покриття та фінальність

Перекази Data API індексують історичні перекази токенів від coverage.from_block кожної мережі до meta.as_of_block. Див. Підтримувані мережі, щоб дізнатися, які мережі це забезпечують.

Кожен елемент переказу містить token, standard, from, to, block_number, block_timestamp, tx_hash, tx_index та log_index. Елементи ERC-20 додають amount; елементи ERC-721 додають token_id; елементи ERC-1155 додають operator, token_id, value та batch_index.

Що вибрати

Типове завданняКращий варіантЧому
Події в останніх кількох сотнях блоківeth_getLogsОдин запит може охопити нещодавній діапазон, якщо він не перевищує max_logs_block_range цієї мережі.
Історичні перекази адресиGET /{chain}/addresses/{address}/transfersЗапит у межах адреси з вікном from_block/to_block, фільтрами direction і token та пагінацією за курсором; результати надаються аж до as_of_block.
Усі перекази токенаGET /{chain}/tokens/{token}/transfersЗапит у межах контракту токена, що охоплює erc20, erc721 та erc1155, із необов'язковим вікном та пагінацією за курсором для повного набору результатів.
Моніторинг нових подій у реальному часіeth_subscribe (мережі з WebSocket) / eth_getLogs (опитування)Підписка на нові заголовки або журнали через WebSocket, де підтримується, або опитування останніх діапазонів блоків.

Запит журналів за допомогою 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"
    }]
  }'

Запит переказів за допомогою 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"

Щоб натомість виконати запит за адресою, from_block та to_block є обов'язковими:

# 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 за виклик

Кожен метод тарифікується за його вагою CU. Наведені нижче ваги зчитуються з API планів платформи:

Вага CU на виклик

МетодCU на виклик
eth_getLogs30
data.address_transfers25
data.token_transfers25

Поточні ціни та варіанти поповнення див. на сторінці цін.

Наступні кроки

Востаннє оновлено:

На цій сторінці