23 декабря 2022

Мы запустили обучающий курс по использованию блокчейн-индексеров!

Тут мы коротко расскажем про блокчейн-индексеры и зачем они нужны. Если хотите ими пользоваться — начните с нашего курса!

В чем проблема блокчейна как базы данных

Блочкейн — это децентрализованная база данных ончейн-операций. Любой пользователь может запросить содержание блока или детали отдельной операции от публичной RPC-ноды, которая хранит свою копию блокчейна.

Однако блокчейн и программное обеспечение ноды не предназначены для быстрого и эффективного поиска. Покажем это на примере: попробуем получить от RPC-ноды детали транзакции tez с хешем op…SL.

Команда для запроса деталей будет выглядеть не как “GET BY HASH” или вроде того, а так:

tezos-client rpc get /chains/main/blocks/2283698/operations/3/2

У Tezos RPC API нет команды для поиска операции. Чтобы получить из блокчейна ее детали, нужно точно знать где они хранятся: в блоке 2283698, среди операций инициированных пользователями (индекс 3) под id 2. И подобные трудности возникают с поиском большого количества данных.

Что делают блокчейн-индексеры

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

Например, поиск той самой транзакции по хешу в индексере TzKT будет выглядеть как запрос к таблице operations:

https://reserve-2.tzkt.io/v1/operations/opRjkzJxJ1xZaUnBDykGUjrRV8qgHFvchcYnbkkcotS1Y7idCSL

А в TzStats — как запрос к таблице explorer/op:

https://api.tzstats.com/explorer/op/opRjkzJxJ1xZaUnBDykGUjrRV8qgHFvchcYnbkkcotS1Y7idCSL

Благодаря индексерам, их структурированным базам данных и индексам у нас есть блокчейн-обозреватели TzKT, TzStats и BetterCallDev с возможностью найти любой аккаунт и смарт-контракт, посмотреть статистику сети Tezos, содержимое контрактов и многое другое.

Все децентрализованные приложения, включая кошельки, используют в работе индексеры. Например, Temple Wallet получает данные о балансах токенов и NFT от индексера TzKT.

Мы подробно рассказали об индексерах в первом уроке.

Какие индексеры есть на Tezos

Существует два типа блокчейн-индексеров: полные и селективные.

Полные записывают в свою базу данных все содержимое блоков и создают для него индексы. С их помощью можно найти любые ончейн-данные, от списка бейкеров, проголосовавших за активацию Lima, до газа, который Kolibri Finance потратили при публикации смарт-контракта kUSD. К полным индексерам относятся TzKT и TzStats.

Селективные индексеры считывают новые блоки, но записывают в базу данных только те операции, которые укажет пользователь. В Tezos есть три популярных:

  • Que Pasa — простой индексер, который записывает в базу данных содержимое хранилища указанного контракта, вызовы точек входа и их параметры;
  • DipDup — фреймворк для создания селективных индексеров на Python. Пользователь должен написать правила индексирования выбранного контракта: какие точки входа индексировать, какие параметры записывать в базу данных и по каким правилам;
  • Dappetizer — фреймворк для создания селективных индексеров на JavaScript/TypeScript. Для работы с ним также нужно самостоятельно описать логику индексирования, но кроме операций со смарт-контрактами он может записывать любые другие операции в блоках.

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

Как пользоваться блокчейн-индексерами

Чтобы сделать свой первый dApp необязательно изучать разработку смарт-контрактов (хотя это интересно). Нужно лишь знать что такое хранилище и точки входа, а также немного разбираться в бэкенд-разработке.

В третьем уроке мы показываем, как с помощью HTML, AJAX запросов к TzKT и базовых знаний JavaScript сделать дашборд для отображения статистики по бейкингу ликвидности.

Но лучше не использовать TzKT API в продакшене, чтобы не перегружать публичный индексер запросами. Поэтому в четвертом уроке мы уже хостим Que Pasa на локальной машине и делаем более сложный проект.

Мы индексируем контракт сервиса для займов под залог NFT Signum.loans, отображаем данные по займам и генерируем ссылки на соответствующие NFT на objkt.com. Кроме Que Pasa мы объясняем основы работы с PostgreSQL, поднимаем PHP-сервер и игнорируем существование CSS.

А в последнем уроке показываем, как настроить DipDup и Dappetizer для индексирования контракта tzBTC. Писать логику обработки данных сложно, но результат того стоит — в конце мы одним SQL-запросом посчитали объем всех транзакций tzBTC.

В итоге

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

Также читайте первые два урока, если вам просто интересно узнать больше о базах данных, эффективных способах поиска данных и работе Tezos в общем.

Обсудить в Discord!