Розробка кастомних аналітичних дашбордів на 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 секунд, кеш оновлюється із заданою періодичністю, дашборд публікується у відкритий доступ. Отримайте консультацію вже сьогодні.







