Что такое индексер блокчейна
Индексеры преобразуют сырые данные блокчейна в структурированные базы данных, предназначенные для поиска и отображения информации. На основе таких баз работают блокчейн-эксплореры и другие продукты, включая кошельки и API. Узлы блокчейна не оптимизированы для обработки большого количества постоянных запросов, поэтому данные для таких сценариев извлекаются из индексера.В экосистеме Whales индексер служит основой для API v4, который, в свою очередь, обеспечивает работу других продуктов компании.
ton-indexer-go — это индексер блокчейна TON (The Open Network), созданный командой Whales. Он загружает блоки и транзакции с узлов блокчейна, обрабатывает их и сохраняет структурированные данные в ScyllaDB. В результате получается индекс, который позволяет быстро искать транзакции по адресам, блокам, времени и другим критериям.
Репозиторий: https://github.com/whalescorp/ton-indexer-go\ Язык: Go
Для чего используется индексер
- Создание индекса истории состояний аккаунтов — до и после каждой транзакции, включая баланс, хэши code и data, ячейки и библиотеки.
- Создание индекса блоков — masterchain- и shard-блоков с метаданными, такими как seqno, shard, utime, BOC и другие.
- Создание индекса для аналитики и эксплореров — построение блокчейн-эксплореров, дашбордов и сервисов, работающих поверх индекса без прямых запросов к узлам TON.
Отличия от похожих продуктов
- Собственный индекс и собственная инфраструктура — данные хранятся в собственной ScyllaDB. Нет зависимости от сторонних API, таких как TON Center или TONAPI: обеспечивается полный контроль над схемой данных, объемом истории и SLA.
- Два режима загрузки — поддерживается не только онлайн-синхронизация из сети через
archsync, но и импорт из архива черезarchimport + tximport. Это позволяет быстро поднимать индекс с нуля на основе готового дампа или обрабатывать офлайн-бэкапы. - ScyllaDB, совместимая с Cassandra — выбрана из-за высокой нагрузки на запись, больших объемов данных и горизонтального масштабирования. Многие другие решения, например TON Center API v3, используют PostgreSQL, где другая модель масштабирования и запросов.
- Глубокое индексирование состояния — сохраняются не только транзакции и блоки, но и состояния аккаунтов до и после транзакции, а также ячейки и библиотеки. Это удобно для эксплореров и аналитики, которым нужно “состояние аккаунта в конкретный момент времени”. При этом важно учитывать, что доказательства хранятся не полностью.
- LT-buckets — специальная структура для быстрой пагинации истории транзакций по адресу и logical time без тяжелых scan-запросов.
- Распределенный импорт — при работе с архивами несколько воркеров, то есть
archimportиtximport, координируются через базу данных, что позволяет распараллеливать первичную загрузку.
Режимы работы
Индексер поддерживает два основных сценария:- Онлайн-синхронизация (
archsync) — подключается к TON через Lite Client, то есть lite servers, синхронизирует новые блоки в реальном времени и записывает данные в ScyllaDB. - Импорт из архива (
archimport + tximport) — читает готовые дампы блоков с диска, то есть архивные пакеты, а также транзакции, после чего импортирует их в ту же ScyllaDB. Этот режим используется для первоначальной загрузки истории или обработки офлайн-дампов.