Разработка кастомных аналитических дашбордов на Dune
Вы запустили DeFi-протокол и хотите видеть реальную картину: сколько пользователей ежедневно вызывает ваш смарт-контракт, какой объём ликвидности в пулах, как меняется TVL. Ручной сбор данных из Etherscan или The Graph — это часы бесполезных кликов, а готовые дашборды не учитывают вашу токеномику и специфичные события. Мы решаем эту задачу: разрабатываем кастомные дашборды на Dune Analytics, которые дают ответы за секунды, а не часы. Экономия на аналитике достигает $3 000 в месяц, а окупаемость инвестиций — менее 3 месяцев.
Наш опыт — 10+ лет в блокчейн-разработке, более 50 успешных дашбордов для DeFi-протоколов, NFT-коллекций и инфраструктурных проектов. Мы не просто пишем SQL: мы строим продукты, которые экономят ресурсы вашей команды. Сложность Dune не в инструменте — она в понимании структуры блокчейн-данных в реляционной модели. Одна ошибка в JOIN — и запрос выполняется 5 минут вместо секунд. Мы знаем, как этого избежать.
Устройство данных в Dune
Dune работает с двумя уровнями таблиц. Использование декодированных таблиц снижает время запроса на 70%.
| Тип таблиц | Примеры | Назначение |
|---|---|---|
| Raw | ethereum.transactions, ethereum.logs |
Сырые данные цепи, требуют парсинга data и topics |
| Decoded | uniswap_v3_ethereum.Pair_evt_Swap |
События протоколов с нормализованными колонками (быстрее, не требуют парсинга) |
Дополнительно существуют абстракции данных: dex.trades, prices.usd из Spellbook. Они агрегируют данные по множеству протоколов, избавляя от необходимости писать JOIN на каждом проекте.
Типичные ошибки и оптимизация
| Ошибка | Исправление | Выигрыш |
|---|---|---|
| Полный скан без фильтра по дате | Добавить WHERE block_time >= now() - interval '90 days' |
Ускорение в 10-50 раз |
JOIN на erc20_ethereum.evt_Transfer без диапазона |
Ограничить evt_block_time |
Снижение нагрузки на 95% |
Почему важна оптимизация SQL-запросов?
Полный скан без фильтра по дате — главная причина таймаутов. Фильтруйте block_time всегда:
-- ПЛОХО: полный скан всей истории SELECT date_trunc('day', block_time), count(*) FROM ethereum.transactions WHERE "to" = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 -- ХОРОШО: ограничиваем 90 днями SELECT date_trunc('day', block_time), count(*) FROM ethereum.transactions WHERE "to" = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 AND block_time >= now() - interval '90 days' Избыточные JOIN на erc20_ethereum.evt_Transfer — таблица содержит миллиарды строк. Добавляйте временной диапазон:
-- ПЛОХО: JOIN без фильтра SELECT t.from, SUM(t.value) FROM erc20_ethereum.evt_Transfer t JOIN my_users u ON t."from" = u.address WHERE t.contract_address = 0xdAC17F958D2ee523a2206206994597C13D831ec7 GROUP BY 1 -- ХОРОШО: с фильтром по evt_block_time SELECT t.from, SUM(t.value / 1e6) as usdt_sent FROM erc20_ethereum.evt_Transfer t JOIN my_users u ON t."from" = u.address WHERE t.contract_address = 0xdAC17F958D2ee523a2206206994597C13D831ec7 AND t.evt_block_time >= now() - interval '30 days' GROUP BY 1 ORDER BY 2 DESC Метод snapshot + delta
Для дашбордов с исторической глубиной свыше 30 дней используем двухуровневую схему:
- Snapshot: тяжёлый запрос выполняется раз в сутки (кешируется).
- Delta: лёгкий запрос за последние 24 часа.
- Объединение через
UNION ALL.
Это даёт пользователю актуальные данные без 5-минутного ожидания. Экономия времени вычислений — до 90%.
WITH historical AS ( SELECT * FROM snapshot_table -- пересчитывается раз в день ), delta AS ( SELECT * FROM live_table WHERE evt_block_time >= now() - interval '1 day' ) SELECT * FROM historical UNION ALL SELECT * FROM delta Что такое Spellbook и зачем его использовать?
Spellbook (Dune V2) — это dbt-проект с готовыми моделями: prices.usd (цены токенов), dex.trades (все DEX-свапы), tokens.erc20 (символы и decimals). Не нужно каждый раз джойнить price feeds — используйте готовые таблицы. Мы интегрируем Spellbook в каждый дашборд для ускорения разработки в 2 раза. Официальная документация Spellbook содержит полный список моделей.
Пример: TVL протокола
WITH deposits AS ( SELECT date_trunc('day', evt_block_time) AS day, token, SUM(amount / POWER(10, decimals)) AS amount FROM protocol_ethereum.Pool_evt_Deposit JOIN tokens.erc20 ON token = contract_address AND blockchain = 'ethereum' WHERE evt_block_time >= now() - interval '180 days' GROUP BY 1, 2 ), withdrawals AS ( SELECT date_trunc('day', evt_block_time) AS day, token, -SUM(amount / POWER(10, decimals)) AS amount FROM protocol_ethereum.Pool_evt_Withdraw JOIN tokens.erc20 ON token = contract_address AND blockchain = 'ethereum' WHERE evt_block_time >= now() - interval '180 days' GROUP BY 1, 2 ), daily_flows AS ( SELECT day, token, SUM(amount) AS net_flow FROM (SELECT * FROM deposits UNION ALL SELECT * FROM withdrawals) GROUP BY 1, 2 ) SELECT day, token, SUM(net_flow) OVER (PARTITION BY token ORDER BY day) AS cumulative_tvl FROM daily_flows ORDER BY day DESC, token Архитектура дашборда
Хороший дашборд — это продукт. Иерархия метрик: top-level KPI (TVL, Volume, Users) → drill-down (по сетям, токенам) → детали (топ адресов). Используйте параметры {{token_address}} для интерактивности. Например, дашборд для AMM позволяет выбрать пул, временной диапазон и сразу видеть объём, комиссии, impermanent loss.
Как мы строим дашборд: пошаговый процесс
- Анализ протокола и определение ключевых метрик. Изучаем ABI контракта, выделяем события Deposit, Withdraw, Swap. Составляем маппинг полей.
- Написание SQL-запросов с оптимизацией по времени (снижаем latency на 70%). Используем декодированные таблицы и Spellbook.
- Настройка визуализаций: выбор типов графиков (line, bar, area), параметризация (сетевые фильтры, диапазоны дат), кеширование.
- Документация логики расчётов для вашей команды — описание каждой метрики, формулы, ссылки на контракты.
- Публикация в открытый доступ с поддержкой. После релиза мы мониторим ошибки и корректируем запросы при форках.
Процесс работы
- Аналитика: изучаем смарт-контракт, выявляем ключевые события.
- Проектирование: создаём прототип дашборда на Dune.
- Реализация: пишем оптимизированные SQL-запросы, настраиваем параметры.
- Тест: проверяем временные диапазоны, корректность агрегаций.
- Деплой: публикуем дашборд, подключаем кеширование.
Сроки — от 3 до 10 дней в зависимости от сложности. Свяжитесь с нами — и мы спроектируем дашборд, который даст полную картину по вашему протоколу. Закажите разработку под ключ: гарантируем, что все запросы выполняются <30 секунд, кеш обновляется с заданной периодичностью, дашборд публикуется в открытый доступ. Получите консультацию уже сегодня.







