Интеграция Dune Analytics API: on-chain аналитика в вашем продукте

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

Dune Analytics API: где ломается выгрузка данных в продукт

Dune Analytics API встраивают, когда продукту нужны on-chain метрики без собственного индексатора: балансы кошельков, объёмы по пулам, активность контрактов. Внешний сервис уже собрал данные и разложил по витринам, запрос отдаёт готовый результат, продукт рисует его в интерфейсе. Простота обманчива — дальше начинается эксплуатация чужой витрины с её собственным расписанием пересборки.

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

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

Третий — лимиты на запросы. Пул обращений общий, всплеск нагрузки отдаёт отказ, и обновление падает молча: интерфейс спокойно продолжает показывать вчерашние числа, потому что ошибку никто не поднял. Разбираем, как это закрывается — контроль свежести, сверка с состоянием сети, повторы и явная деградация вместо пустого или ложного экрана.

Что даёт продукту встроенный доступ к блокчейн-данным

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

Единый источник правды меняет не картинку, а процесс. Метрики в интерфейсе, выгрузки для финансов и внутренние панели считаются одним и тем же запросом, поэтому расхождения не накапливаются между системами. Ручные сверки сокращаются до выборочных проверок: несоответствие ловит сам запрос, а не человек через неделю после отгрузки.

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

Форматы интеграции: свой индексер, готовый API, выгрузки

Формат доступа к on-chain данным выбирают по трём параметрам: глубина истории запросов, допустимая задержка между событием в сети и строкой в вашей базе, критичность этих данных для логики продукта. Ошибка здесь стоит дороже самой интеграции — слой данных переписывают вместе с отчётностью и начислениями.

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

Вариант Когда подходит Ограничения
Свой индексер Свои правила разбора блоков, приватные метрики, данные вне публичных наборов История только с момента запуска; откаты, переиндексацию и смену контрактов обслуживаете сами
Готовый сервис данных (Dune Analytics API) Нужна история с первых блоков и разбор популярных протоколов без своей инфраструктуры Зависимость от чужого расписания обновления и лимитов; редкие контракты бывают не размечены
Регулярные выгрузки Отчётность и аналитика, где данные нужны раз в час или реже Задержка до появления в вашей базе; при сбое выгрузки окно теряется, нужен контроль пропусков
Гибридная схема Нужны и глубокая история, и свежие события с малой задержкой Дороже в сопровождении: источники сверяют, следят за расхождением метрик

Глубина истории запросов

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

Порядок работ: от аудита запросов до передачи схем

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

  1. Аудит запросов и потребителей. Собираем перечень запросов в Dune, отмечаем, кто читает результат: панель мониторинга, витрина, сервис или регулярная выгрузка. Помечаем дубли, брошенные запросы и те, где нет ответственного.
  2. Схема потоков данных. Рисуем путь от запроса до потребителя, с точкой промежуточного хранения, местом преобразования и допустимой задержкой обновления. Фиксируем контракт: имена и типы полей, правила округления, поведение при пустом ответе.
  3. Ключи и права доступа. Отдельный ключ на каждое окружение и сервис, минимально необходимые права, хранение в секрет-хранилище и ротация. Описываем поведение при исчерпании лимита обращений к внешнему сервису.
  4. Приведение данных к единому виду. Единые идентификаторы сетей и токенов, нормализация адресов и десятичных значений, обработка реорганизаций цепи. Метрика перестаёт зависеть от того, каким запросом её получили.
  5. Проверка сходимости. Сверяем итоги с независимым источником на контрольной выборке периодов, сопоставляем суммы и количество уникальных адресов между собой. Расхождения разбираем до причины, а не до приемлемой вилки.
  6. Передача и обучение. Документация по каждому запросу, схема потоков, регламент действий при расхождении и отказе внешнего сервиса, разбор с командой.

На выходе команда сама правит запросы, добавляет метрики и видит, где именно разошлись числа.

Схемы запросов, ключи доступа и регламенты обновления

Работа с Dune Analytics API не заканчивается тем, что запросы начали возвращать данные. Если описания живут в голове разработчика, первое изменение контракта ломает отчётность — поэтому передаём пакет, по которому команда заказчика работает самостоятельно.

Ниже — обязательный состав такого пакета. Каждый пункт проверяем на приёмке: без него работа не считается закрытой.

  • Схемы запросов — назначение, поля и связи между таблицами, фильтры по адресам и периодам, пример ожидаемого результата для сверки.
  • Конфигурации подключения — ключи доступа, лимиты обращений, переменные окружения, раздельные настройки для разработки и промышленного контура.
  • Политики доступа по ролям — кто видит сырые данные, кто только агрегаты, кто вправе менять запросы; срок жизни ключей и журнал их выдачи.
  • Регламент обновления — что делать при смене адресов контрактов, правке описаний интерфейсов или пересборке блоков, кто отвечает за сверку и с какой периодичностью.
  • Инструкции для команды — как поднять окружение, выполнить запрос, проверить свежесть данных и куда смотреть при расхождении.
  • Версии и откат — журнал правок с датой и причиной, возможность вернуть предыдущую версию запроса без остановки отчётности.
  • Контрольные проверки — точки, по которым сверяем данные до и после любых изменений в контрактах.

Кейс: задержка данных сократилась с часов до минут

Заказчик — продукт с аналитикой по блокчейн-сетям: дашборды показывали активность адресов, объёмы в пулах и движение средств. Данные забирались пакетными выгрузками по расписанию, поэтому витрина обновлялась раз в несколько часов, а расхождения с источником разбирали вручную. На сверку уходило до половины рабочего времени аналитика.

Что изменили

Перевели забор данных на запросы к Dune Analytics API в момент открытия дашборда, добавили кэш с разным сроком жизни для «горячих» и исторических метрик. Запросы ушли в очередь с ограничением параллелизма и повторами при временных ошибках — источник перестал получать пиковые всплески. Схему ответа зафиксировали контрактом, поэтому изменения на стороне сервиса больше не ломали витрину.

Что получилось

Свежесть данных выросла с часов до 1-3 минут, доля ручных сверок упала почти до нуля — расхождения теперь ловит автоматическая проверка контрольных значений. Закрыли класс отказов «устаревший снимок»: раньше пользователь видел цифры на момент прошлой выгрузки и принимал решения по ним. Время отклика витрины не выросло, потому что тяжёлые запросы считаются заранее, а не в момент показа.

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

Чем готовый сервис данных отличается от своей индексации

Готовый сервис вроде Dune Analytics отдаёт данные запросом к API поверх уже собранного индекса. Пока задача укладывается в типовые контракты и стандартные события — токены, переводы, сделки на крупных биржах — старт занимает дни: не нужно поднимать узел, писать парсеры и ждать, пока цепочка проиндексируется до нужного блока.

Развилка начинается там, где нужна полнота данных. Внешний индекс содержит только то, что решили собирать его авторы: собственный контракт с нестандартной логикой событий, редкая сеть или логи до определённого блока в выборку не попадут. Дополнить её снаружи нечем — остаётся индексировать самому.

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

Приватность закрывает вопрос для части сценариев. Адреса клиентов, внутренняя разметка кошельков и коммерческие объёмы не должны покидать периметр — такой индекс строится только у себя, и внешний сервис здесь не подходит в принципе.

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

Частые технические сомнения перед стартом интеграции

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

Данные разъедутся с нашей текущей отчётностью?

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

Что будет, если внешние запросы изменятся или сломаются?

Запросы хранятся в репозитории и версионируются, а не живут в чьём-то личном кабинете. Поверх ставим проверки на аномалии: пустой результат, скачок метрики к нулю, пропуск интервала — они поднимают уведомление до того, как данные уйдут в продукт. При изменении внешней схемы правим слой запросов, логику продукта не трогаем.

Как ограничить доступ и когда интеграция вообще не нужна?

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

Обсудим задачу: какие данные нужны для точной оценки

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

Полезно получить от вас:

  • перечень сетей и контрактов, по которым нужны метрики;
  • список потребителей данных: дашборд, внутренний сервис, отчётность для партнёров;
  • текущие способы выгрузки — ручной экспорт, запросы к узлам, готовые панели, обращение к Dune Analytics API;
  • требования к свежести: реальное время, раз в час или раз в сутки — от этого зависит схема обновления;
  • роли и доступы: кто видит сырые данные, кто только агрегаты;
  • ожидаемый формат выдачи — таблица, событие, показатель в интерфейсе;
  • ограничения по нагрузке и отказоустойчивости, если сервис уже работает под нагрузкой.

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

Опишите задачу — вернёмся с оценкой, планом работ и сроками по этапам.

Направления блокчейн-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142