Вход в кабинет

Архивная нода: когда без неё не обойтись

Слово «архивная» звучит как техническая деталь для инженеров, но именно от неё зависит, ответит ли нода на вполне обычный вопрос: «какой был баланс этого адреса три месяца назад» или «что лежало в этой ячейке контракта на блоке номер таком-то». Разберём, чем архивная нода отличается от обычной и когда без неё правда не обойтись.

Что такое архивная нода

Любая нода хранит текущее состояние сети: балансы, код контрактов, последние транзакции. Этого достаточно для большинства повседневных запросов — узнать баланс сейчас, отправить транзакцию, посмотреть последний блок. Архивная нода хранит больше: полное состояние сети на каждый исторический блок, а не только на последний. За счёт этого она может ответить на запрос про любой момент в прошлом, а не только про «сейчас».

Расплата — место на диске. Полная история состояния растёт вместе с сетью и занимает заметно больше пространства, чем нода, которая хранит только актуальные данные. Именно поэтому не каждая нода в мире работает в архивном режиме по умолчанию.

Зачем нужна полная история

Типичные сценарии, где обычной ноды не хватает:

  • Восстановить баланс адреса на конкретную дату — например, для сверки или бухгалтерии.
  • Поднять полную историю операций смарт-контракта с момента его создания, а не только за последние дни.
  • Проверить, что именно хранилось в памяти контракта на определённом блоке при разборе инцидента.
  • Собрать выписку по адресу клиента целиком, включая старые переводы, для аудита или комплаенса.

Ни одна из этих задач не решается запросом «дай мне последнее состояние» — везде нужен конкретный номер блока или диапазон в прошлом.

Возьмём аудит: сервису нужно подтвердить, что на конкретную дату у адреса был именно такой баланс, каким его указали в отчёте. Обычная нода честно ответит на вопрос «сколько там сейчас», но у неё просто нет данных о состоянии на нужный момент времени — они были перезаписаны более свежими. Без архивных данных единственный обходной путь — пересчитывать баланс вручную по всем историческим транзакциям адреса, что медленнее и сложнее одного прямого запроса.

Какие методы требуют архивных данных

В EVM-совместимых сетях вроде Ethereum и Polygon это методы, которые принимают не только тег latest, но и произвольный номер блока: eth_getBalance, eth_call и eth_getStorageAt с историческим блоком вместо latest, а также методы трассировки вроде debug_traceTransaction. На обычной ноде такой запрос с историческим блоком часто просто не найдёт данные и вернёт ошибку.

баланс адреса на историческом блоке
# ethereum — имя ноды для примера, точное название — в личном кабинете
curl -X POST https://nodes-api.cryptosafe.pro/proxy/ethereum \
  -H "Authorization: <ваш-ключ>" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_getBalance","params":["<адрес>","0xc65d40"],"id":1}'

# "0xc65d40" — конкретный номер блока в прошлом вместо "latest"

У Bitcoin своя специфика: полнотекстовый поиск произвольной транзакции по её идентификатору требует включённого индекса транзакций, а не архивного режима как такового, но идея та же — по умолчанию нода рассчитана на текущую работу с сетью, а не на поиск чего угодно из всей истории. Без индекса нода Bitcoin по-прежнему хранит все блоки, но чтобы найти конкретную транзакцию по её идентификатору, ей пришлось бы перебрать блоки один за другим — это медленно и на практике так не делают.

Как понять, что вам нужна именно архивная нода

Если приложение всегда работает с состоянием «сейчас» — проверяет текущий баланс, отправляет транзакции, читает последние события — обычной ноды достаточно. Сигнал для архивной ноды другой: в коде периодически появляется конкретный номер блока вместо latest, или бизнесу регулярно нужны отчёты и выписки за прошлые периоды, а не только текущий срез. Если такие запросы разовые и редкие, проще обсудить их с поддержкой отдельно, чем заранее держать архивную ноду под задачу, которая возникает пару раз в квартал.

Что это значит для инфраструктуры

Держать архивную ноду самостоятельно — это не только больше диска, но и дольше первичная синхронизация: нода должна пересчитать и сохранить состояние на каждый блок с самого начала сети, а не только догнать текущий. Для команды, которая уже думает, поднимать свою инфраструктуру или пользоваться готовым доступом, это весомый аргумент — подробнее компромиссы разобраны в статье «Своя нода или провайдер: как выбрать».

На CryptoSafe Nodes доступ к Ethereum и Bitcoin устроен так, что через прокси проходит любой метод, который принимает нода, без дополнительного парсинга тела запроса. Если для задачи важны именно исторические данные — уточните у поддержки в чате, какой конкретно набор данных нужен, и мы поможем разобраться, какая нода подойдёт. Что делать дальше с полученными историческими данными — например, как отследить статус конкретной транзакции — описано в статье «Мониторинг транзакций».

Нужна нода с расширенной историей данных?

Напишите нам в чат поддержки, какая задача стоит — подберём подходящую ноду и откроем доступ в личный кабинет.

Вход в кабинет