transfer(address,uint256) и вызовом balanceOf в маппинге проиндексировался начиная с недавнего блока и отставал от головы цепочки не более чем на один блок. Чтобы индексировать форкнутую копию сети, см. Индексация Virtual Environment с помощью The Graph.
Прежде чем начать
- URL Node RPC для вашей сети из раздела Integrate Node RPC в Tenderly Dashboard
- Subgraph и файл
docker-compose.yml, которыйgraph initгенерирует для него (см. Настройка Graph Node и subgraph; шаги создания каркаса для публичной сети те же)
Настройка провайдера Ethereum
В сгенерированномdocker-compose.yml задайте для ethereum в сервисе graph-node значение <network>:archive,traces:<Node RPC URL>. Имя сети перед первым двоеточием должно совпадать с network в subgraph.yaml.
docker-compose.yml (переменные окружения graph-node)
${TENDERLY_NODE_ACCESS_KEY} из вашей оболочки, поэтому ключ доступа не хранится в файле:
capabilities: archive, traces для провайдера и Provider supports block receipts. Это означает, что она получает все квитанции блока одним запросом eth_getBlockReceipts.
Graph Node предполагает наличие обеих возможностей, если в значении
ethereum они не указаны (mainnet:<url>). Объявите их явно, чтобы из конфигурации было видно, на что опирается subgraph.
В публичных сетях оставьте для ETHEREUM_REORG_THRESHOLD значение по умолчанию 250. Graph Node использует его, чтобы откатывать блоки при реорганизации сети, поэтому не копируйте значение 1 из конфигурации для Virtual Environment.
Проверка поддержки trace_filter в вашей сети
Обработчикам вызовов нуженtrace_filter, который обслуживают не все сети в Node RPC. Запросите один недавний блок:
result означает, что обработчики вызовов в этой сети работают. Ошибка вроде the method trace_filter does not exist/is not available или Method not found означает, что не работают; в этом случае индексируйте события контракта с помощью eventHandlers. Передавайте номера блоков в hex, потому что trace_filter отклоняет тег latest с ошибкой Invalid params.
Запросы, которые отправляет Graph Node
Graph Node постоянно опрашивает Node RPC, поэтому каждая индексируемая сеть расходует запросы, даже когда ни у одного subgraph нет новых событий. Стоимость каждой категории запросов см. в разделе Тарификация Node RPC.
Обработчики вызовов обходятся дороже всего в типичном subgraph на Node RPC, потому что запрос трассировки стоит больше, чем чтение или вызов контракта. Если контракт эмитирует событие для того же действия, индексируйте событие. Увеличьте
ETHEREUM_POLLING_INTERVAL, чтобы опрашивать реже, если задержка индексации в несколько секунд допустима.
Устранение неполадок
См. также
- Обзор Node RPC
- Тарификация Node RPC
- Справочник RPC для
trace_filter - Индексация Virtual Environment с помощью The Graph для индексации форкнутой сети