Вы запустили 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 на инфраструктуре ежегодно.
Гарантируем, что каждый запрос и дашборд будут соответствовать вашим требованиям. Получите консультацию по настройке аналитики уже сегодня. Свяжитесь с нами для обсуждения вашего проекта.







