Інтеграція Dune API для on-chain аналітики

Інтеграція з Dune Analytics API Dune давно перестав бути лише інструментом для ручного аналізу в браузері. З виходом Dune API з'явилася можливість вбудовувати on-chain аналітику напряму в продукт: дашборди, звіти, алерти — без підняття власного індексера та без написання SQL з нуля. Ми, як інжене

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1452
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1310
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1270
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1012

Інтеграція з 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 дні. Якщо у вас є специфічні вимоги, звертайтеся — обговоримо деталі після безкоштовного аудиту вашого проєкту.