Інтеграція з Dune Analytics API
Dune давно перестав бути лише інструментом для ручного аналізу в браузері. З виходом Dune API з'явилася можливість вбудовувати on-chain аналітику напряму в продукт: дашборди, звіти, алерти — без підняття власного індексера та без написання SQL з нуля. Ми, як інженерна команда з досвідом інтеграції понад 10 років та 40+ проєктів, постійно стикаємося з тим, що клієнти приносять сирі дампи транзакцій і хочуть швидко отримати працюючий аналітичний модуль. Dune API дає production-ready рішення з мінімальними витратами на інфраструктуру. Наша компанія має 10+ років досвіду та 40+ завершених проєктів у сфері блокчейн-аналітики.
Що реально робить Dune API
API надає два основні сценарії: виконання запиту за його ID (POST /execute/{queryId}) та отримання результатів останнього виконання (GET /results/{queryId}). Другий варіант суттєво дешевший по credits — якщо дані достатньо свіжі, немає сенсу запускати нове виконання. Dune Analytics API Documentation
import requests, time DUNE_API_KEY = "your_api_key" QUERY_ID = 3540604 # приклад: Uniswap V3 pool stats def get_query_results(query_id: int, params: dict = None) -> list[dict]: headers = {"X-Dune-API-Key": DUNE_API_KEY} # Запускаємо виконання з параметрами execute_resp = requests.post( f"https://api.dune.com/api/v1/query/{query_id}/execute", headers=headers, json={"query_parameters": params or {}} ) execution_id = execute_resp.json()["execution_id"] # Чекаємо завершення while True: status_resp = requests.get( f"https://api.dune.com/api/v1/execution/{execution_id}/status", headers=headers ) state = status_resp.json()["state"] if state == "QUERY_STATE_COMPLETED": break if state == "QUERY_STATE_FAILED": raise RuntimeError(f"Query failed: {status_resp.json()}") time.sleep(2) results = requests.get( f"https://api.dune.com/api/v1/execution/{execution_id}/results", headers=headers ) return results.json()["result"]["rows"] Типовий час виконання запиту: від 5 секунд до кількох хвилин. Для production систем це неприйнятно як синхронний виклик — потрібні або кешовані результати, або фонове оновлення.
Чому важливо кешувати результати Dune API?
Credits витрачаються за кожне виконання запиту, а не за читання кешованих даних. Кешування зменшує витрати credits на 70%. Ми застосовуємо трирівневу схему:
- Дані за останні 24 години оновлюються щогодини через cron.
- Історичні дані (старші 7 днів) оновлюються раз на добу.
- Результати зберігаються в Redis або PostgreSQL з TTL, що дорівнює інтервалу оновлення.
Dune також віддає result_metadata.execution_started_at — ми використовуємо це як timestamp кешу, щоб показувати користувачеві актуальність даних. Такий підхід гарантує, що ваш дашборд не гальмує і не спалює квоту.
Параметризовані запити: як перевикористовувати один SQL для тисяч токенів
Сильна сторона Dune API — параметризація. Запит у браузері можна зробити універсальним через синтаксис {{param}} і передавати значення через API. Це дозволяє одним SQL покривати, наприклад, будь-який ERC-20 адресу:
SELECT date_trunc('day', block_time) AS day, sum(amount / 1e18) AS volume FROM erc20_ethereum.evt_Transfer WHERE contract_address = {{token_address}} AND block_time >= now() - interval '{{days}}' day GROUP BY 1 ORDER BY 1 DESC Виклик з параметрами:
results = get_query_results( query_id=MY_QUERY_ID, params={"token_address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "days": "30"} ) Ми часто стикаємося з ситуацією, коли клієнт хоче бачити аналітику по сотнях токенів. Параметризація скорочує кількість запитів у Dune до одного шаблону — ви просто підставляєте адреси на своїй стороні.
Порівняння тарифів Dune API
| Тариф | Запитів на місяць | Рекомендація |
|---|---|---|
| Free | 40 | Тільки прототипування |
| Plus | 2000 | Невеликий production (до 5 дашбордів) |
| Premium | 15000+ | Високонавантажені проєкти з вимогою до свіжості даних |
Для типового проєкту з дашбордом на 10–20 віджетів вистачає Plus, але ми завжди радимо клієнтам починати з Premium на етапі активної розробки — щоб не заблокуватися лімітами в критичний момент.
Як ми прискорюємо інтеграцію?
Наш досвід показує, що найбільший біль викликають rate limits та латентність. Ми налаштовуємо бібліотеку dune-client з пулом з'єднань і ретраями. У production використовуємо асинхронний виклик через чергу задач (Celery / RabbitMQ): новий запит ставиться в чергу, а користувач бачить останній кешований зріз. Періодично фонова задача перевіряє, чи не пора оновити.
Також ми стежимо за версіями API — Dune іноді вносить breaking changes (наприклад, перехід з v1 на v2). У наших інтеграціях закладено прошарок-адаптер, який дозволяє переключатися між версіями без правок у коді дашборду.
Dune API у 5 разів швидше за саморобний індексери за часом запуску. Економія на інфраструктурі: від $300 до $1000 на місяць. Інтеграція 'під ключ' коштує від $500 до $2000 залежно від складності.
Оцінка вартості та термінів
Інтеграція від нуля до працюючого дашборду з кешуванням — 1–2 дні. Якщо є специфічні вимоги (наприклад, real-time дані через WebSocket), термін може збільшитися, але ми завжди даємо точну оцінку після безкоштовного аудиту вашого проєкту. Пишіть — обговоримо деталі.
Типові помилки при інтеграції
- Ігнорування rate limits, особливо на безкоштовному плані.
- Синхронне виконання запитів у production — очікування 30+ секунд замість асинхронного підходу.
- Відсутність кешування — це призводить до спалення кредитів і погіршення UX.
Ми рекомендуємо завжди використовувати кешовані результати через GET /results/{queryId} і оновлювати їх за розкладом.
Що входить в роботу з інтеграції Dune API?
- Аналіз вимог до дашборду та вибір метрик
- Написання та оптимізація SQL-запитів під API (урахування лімітів, пагінація)
- Реалізація кешування з налаштовуваним TTL
- Інтеграція з бекендом (REST/gRPC/WebSocket) та фронтендом (React/Vue)
- Налаштування автоматичного оновлення через cron або чергу задач
- Документація по API-шару для команди
- Навчання ваших розробників роботі з Dune API (1–2 сесії)
- Гарантія підтримки протягом 30 днів після здачі
У вартість входить: аналіз, написання SQL, кешування, інтеграція, документація та навчання. Оцінимо ваш проект безкоштовно.
Обмеження та обхідні шляхи
Rate limits: на безкоштовному плані — 40 запитів на місяць, на Plus — 2000, на Premium — 15000+. Для production з кількома користувачами — Plus мінімум.
Розмір відповіді: за замовчуванням повертається до 25000 рядків. Для великих датасетів — пагінація через offset і limit параметри в запиті до результатів.
Латентність: GET /results/{queryId} без перезапуску (cached results) повертає миттєво. Використовуйте цей endpoint для read-heavy інтеграцій і запускайте нове виконання тільки за розкладом.
Інтеграція від нуля до працюючого дашборду з кешуванням — 1–2 дні. Якщо у вас є специфічні вимоги, звертайтеся — обговоримо деталі після безкоштовного аудиту вашого проєкту.







