Ви запустили DeFi-протокол, але не бачите, звідки приходять користувачі, скільки вони приносять та які пули найефективніші. Без on-chain аналітики кожне рішення — тик пальцем у небо. Типова ситуація: TVL зростає, а DAU падає — ви не знаєте, чому. Налаштування власного індексера потребує тижнів і тисяч доларів на інфраструктуру. Ми налаштовуємо Dune Analytics — і ви отримуєте прозору картину on-chain активності через SQL. Замість написання власних парсерів подій ви пишете SQL до готових декодованих таблиць. Це в рази швидше та дешевше. Наприклад, для протоколу з TVL $10 млн декодування та дашборд займають 2 дні замість двох тижнів. Ви економите від $5,000 на інфраструктурі щорічно. Понад 5 років ми налаштовуємо аналітику для блокчейн-проєктів, і 85% клієнтів збільшили retention завдяки своєчасному виявленню вузьких місць. При цьому ви отримуєте готові метрики: DAU, TVL, обсяг торгів, retention, газ — все через SQL. Економія за рахунок відмови від самостійного індексування може досягати $10,000 на рік.
Як налаштувати аналітику блокчейн-проєкту в Dune?
Dune підтримує Ethereum, Arbitrum, Optimism, Base, Polygon, BSC, Solana та десятки інших мереж в єдиному SQL-середовищі. Ми беремо на себе весь процес: від декодування контракту до створення дашборду та API-інтеграції. Типова економія часу становить 80% порівняно з самостійним розгортанням. Dune SQL Reference
Структура даних в Dune
Таблиці організовані в три рівні:
- Raw дані — сирі блокчейн-дані без декодування (
ethereum.blocks,ethereum.transactions,ethereum.logs,ethereum.traces). - Decoded дані — події та виклики, декодовані за ABI (
uniswap_v3_ethereum.Factory_evt_PoolCreated,erc20_ethereum.evt_Transfer). Формат:{protocol}_{network}.{contract}_{type}_{event/function}. - Spells — аналітичні таблиці спільноти (
dex.trades,tokens.erc20,nft.trades).
Декодування свого контракту
Щоб події вашого контракту з'явилися в decoded-таблицях, потрібно завантажити ABI:
- Відкрити
dune.com/contracts/new. - Вказати мережу та адресу контракту.
- Вставити ABI (JSON).
- Дочекатися затвердження (зазвичай 1–3 робочих дні).
Після декодування з'явиться таблиця виду yourproject_ethereum.YourContract_evt_YourEvent.
Написання запитів: практичні патерни
TVL протоколу
-- TVL через декодовані Deposit/Withdraw події SELECT DATE_TRUNC('day', evt_block_time) AS day, SUM(SUM(CAST(amount AS DOUBLE) / 1e18)) OVER (ORDER BY DATE_TRUNC('day', evt_block_time)) AS cumulative_tvl_eth FROM yourproject_ethereum.Vault_evt_Deposit GROUP BY 1 ORDER BY 1 Обсяг торгів через DEX
-- Використання Spell таблиці dex.trades SELECT DATE_TRUNC('week', block_time) AS week, blockchain, SUM(amount_usd) AS volume_usd, COUNT(*) AS trades_count FROM dex.trades WHERE token_bought_address = 0xYourTokenAddress OR token_sold_address = 0xYourTokenAddress AND block_time >= NOW() - INTERVAL '90' day GROUP BY 1, 2 ORDER BY 1 DESC Параметризовані запити для універсальних дашбордів
-- В запиті використовуємо {{parameter}} SELECT * FROM dex.trades WHERE token_bought_address = {{token_address}} AND block_time >= NOW() - INTERVAL '{{days}}' day Dune API: вбудовування даних у продукт
Для відображення аналітики у вашому додатку використовуємо Dune API:
const DUNE_API_KEY = process.env.DUNE_API_KEY! async function getDuneQueryResult(queryId: number): Promise<DuneResult> { const execRes = await fetch(`https://api.dune.com/api/v1/query/${queryId}/execute`, { method: 'POST', headers: { 'X-Dune-API-Key': DUNE_API_KEY }, body: JSON.stringify({ performance: 'medium' }), }) const { execution_id } = await execRes.json() let status = 'QUERY_STATE_PENDING' while (['QUERY_STATE_PENDING', 'QUERY_STATE_EXECUTING'].includes(status)) { await new Promise(r => setTimeout(r, 2000)) const statusRes = await fetch( `https://api.dune.com/api/v1/execution/${execution_id}/status`, { headers: { 'X-Dune-API-Key': DUNE_API_KEY } } ) const statusData = await statusRes.json() status = statusData.state } const resultRes = await fetch( `https://api.dune.com/api/v1/execution/${execution_id}/results`, { headers: { 'X-Dune-API-Key': DUNE_API_KEY } } ) return resultRes.json() } // Parameterized query call example const body = { query_parameters: { token_address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', days: 30, }, performance: 'medium', } Для dashboard з оновленням раз на годину — кешуємо результати, не запускаючи запит на кожен HTTP-запит. Затримка даних в Dune зазвичай становить 5–10 хвилин, що прийнятно для 90% аналітичних завдань. Для real-time сценаріїв слід використовувати The Graph.
Чому Dune Analytics, а не власний індекстер?
Запуск власного індексера (Envio, Ponder, Goldsky) потребує інфраструктурних витрат та часу. Dune дає готові SQL-таблиці із затримкою до години — цього достатньо для більшості дашбордів. Для реального часу використовуємо The Graph, але для класичної аналітики Dune вигідніший.
| Завдання | Інструмент |
|---|---|
| Аналітика із затримкою до години | Dune Analytics |
| Real-time дані (< 1 хв) | The Graph (subgraph) |
| SQL + швидше ніж Dune | Flipside Crypto, Allium |
| Власний індекстер | Envio, Ponder, Goldsky |
| NFT аналітика | NFTGo, Reservoir |
Якщо ви сумніваєтеся, який інструмент обрати, зв'яжіться з нами — ми допоможемо визначитися.
Що входить у роботу
В рамках налаштування ми надаємо:
- Декодування вашого контракту (завантаження ABI, перевірка).
- Розробка 5–7 ключових метрик: DAU, TVL, обсяг, revenue, retention, top users, газ.
- Кастомні SQL-запити під вашу бізнес-логіку (наприклад, cohort-аналіз або розрахунок власного APY).
- Дашборд з автоматичним оновленням та інтерактивними фільтрами.
- Інтеграція Dune API у ваш додаток з документацією та прикладами коду.
- Навчання команди роботі з дашбордом (2–3 сесії).
- Підтримка протягом 2 тижнів після запуску.
Приклад SQL-запиту для retention користувачів:
-- Retention по тижневих когортах WITH user_activities AS ( SELECT "from" AS user_address, DATE_TRUNC('week', evt_block_time) AS activity_week FROM yourproject_ethereum.YourContract_evt_Action ), first_activities AS ( SELECT user_address, MIN(activity_week) AS first_week FROM user_activities GROUP BY user_address ) SELECT f.first_week AS cohort, DATEDIFF('week', f.first_week, u.activity_week) AS week_number, COUNT(DISTINCT u.user_address) AS users FROM first_activities f JOIN user_activities u ON f.user_address = u.user_address GROUP BY cohort, week_number ORDER BY cohort, week_number Процес роботи та терміни
| Етап | Тривалість |
|---|---|
| Аналітика та визначення метрик | 1 день |
| Декодування контрактів | 1–3 дні |
| Розробка SQL-запитів та дашборду | 1–2 дні |
| Інтеграція API | 1 день |
| Тестування та навчання | 0.5 дня |
Орієнтовний термін: від 3 до 7 робочих днів. Вартість розраховується індивідуально — залежить від складності метрик та необхідності API. Ви економите від $5,000 на інфраструктурі щорічно.
Гарантуємо, що кожен запит та дашборд відповідатимуть вашим вимогам. Отримайте консультацію з налаштування аналітики вже сьогодні. Зв'яжіться з нами для обговорення вашого проєкту.







