Neon Tracer API: Indexing historical data on Solana

Зачем индексировать блокчейны?

Обычные ноды блокчейнов не могут делать все, что мы от них хотим. Обычный RPC блокчейн может ответить на ограниченный набор вопросов.

alt_text

  • Можно посмотреть баланс конкретного аккаунта на конкретном блоке. Но нельзя узнать максимальный баланс этого аккаунта на протяжении какого-то периода времени. Это можно сделать маунально: запустить множество одинаковых запросов с разными слотами, блоками, а потом придется поверх подкрутить какую-то логику из которой можно сделать вывод. Это неэффективно и нагружает ноду.
  • Также можно посмотреть, владеет ли определенный аккаунт каким-то токеном. Но мы не знаем, каким набором токенов владеет конкретный юзер.
  • Можно узнать текущую цену определенного токена в пуле. Но мы не можем посмотреть список цен за определенное время.

Из выходит, что блокчейн может предоставить данные в текущий момент, но не справляется там, где нужна агрегация данных или построение очередей из данных.

Кто решает проблему индексации

Etherscan индексирует транзакции и аккаунты.

The Graph дает возможность индексировать конкретные приложения в соответствии с их моделью данных.

SubQuery — конкурент The Graph, тоже индексирует приложения.

Covalent использует Wormhole Bridge, чтобы определять, какие токены есть в кошельке.

BlockScout анализирует EVM-совместимые блокчейны.

И другие проекты.

Как работает индексация блокчейнов

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

alt_text

Оракулы отправляют эти данные в специальные стораджи. Поверх этого они строят API для получения агрегированной информации. Как правило, это API на основе Graph QL.

Что такое Neon EVM

При чем тут Solana? Идея Neon EVM в том, чтобы объединять экосистемы и пользователей. Ключевые продукты проекта. Neon Proxy — HTTP-сервер, который предоставляет Ethereum-подобный интерфейс. Далее сервис оборачивает Ethereum-транзакции в Solana-транзакции и запускает их на блокчейне Solana.

alt_text

На Solana есть смарт-контракт Neon EVM — layer2 или виртуальная машина внутри виртуальной машины. Она исполняет смарт-контракты Ethereum. Смарт-контракты из Ethereum могут взаимодействовать с программами Solana, например, с ликвидностью. Можно деплоить контракты без изменений — абсолютно тот же байт-код и те же тулзы.

Модель данных в Ethereum

Как мы уже упоминали, у нод ограниченный набор реквестов:

  • nonce;
  • балансы;
  • значение стораджа;
  • и так далее.

alt_text

В Ethereum для каждого блока есть state root, из которого можно получить доступ к состоянию аккаунта в данный момент времени. Обработка данных от индексатора сводится к тому, чтобы найти нужный блок, проследовать в state root, от туда — в необходимый аккаунт, и вычитать нужные данные.

Модель данных в Solana

В Solana есть два раздельных хранилища данных. В одном хранятся блоки и транзакции, в другом — аккаунты. Хранилище аккаунтов лежит на диске и часть из них лежит в хэше. Но это только текущее состояние аккаунтов, но у каждого аккаунта может быть разные версии. Это зависит от того, был ли этот аккаунт финализирован или изменен только на определенной ноде. Нет исторического состояния аккаунтов, а индексаторам эти данные нужны.

Решение состоит в том, чтобы мониторить Solana Validator на предмет изменения аккаунтов. При каждом изменении аккаунта он дампится во внешний сторадж.

Что такое Geyser plugin

В Solana есть механизм Geyser plugin — унифицированный интерфейс для расширений. Они получают данные об изменениях в блокчейне от валидатора. Мы реализовали Neon dumper plugin на основе Geyser plugin. Его основная задача — перехватывать изменения аккаунтов, с которыми работает Neon EVM и дампить их в Dumper DB, где их проиндексируют по блокам.

alt_text

Как работает Neon Tracer API

Solana Validator работает с Dumper plugin, который пересылает дамп аккаунтов в Dumper DB. Tracer API реализует методы: get cod, balance, storage head и прочие. Над всем этим стоит Neon RPC, который роутит запросы, в завимости от того, требуются ему исторические данные или нет. Транзакции запускаются через прокси. Над всей этом схемой стоит Indexer, к которому в итоге попадает информация.

alt_text

Проблемы внедрения Neon Tracer API

  • Периодически Solana-валидаторы теряют консенсус с сетью и отстают от нее. Для этого нужно внедрить резервных валидаторов. Они должны хранить данные где-то в одном месте. Для этого нужно подключить кластер, к которому подключаем валидаторов.
  • Поток данных может быть большой. Аккаунты в Solana устроены немного иначе, чем в Ethereum. Это больше похоже на файл — он может хранить очень много данных. Для решения проблемы нужно использовать ClickHouse, который сжимает данные.

Читайте также

Больше мероприятний