Потокові крипто-дані: підключення CoinGecko API для DeFi

Допустимо, ваш DeFi-протокол показує користувачам ціни токенів у реальному часі. Кожен клієнт шле запит до CoinGecko API — і вже через сотню користувачів ви отримуєте HTTP 429. Знайома ситуація? Ми розберемо, як побудувати інтеграцію, яка витримує мільйони запитів на добу, не перевищуючи лімітів і н

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

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

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

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

Допустимо, ваш DeFi-протокол показує користувачам ціни токенів у реальному часі. Кожен клієнт шле запит до CoinGecko API — і вже через сотню користувачів ви отримуєте HTTP 429. Знайома ситуація? Ми розберемо, як побудувати інтеграцію, яка витримує мільйони запитів на добу, не перевищуючи лімітів і не втрачаючи актуальності даних. CoinGecko — один із провідних агрегаторів криптовалютних даних, другий за величиною після CoinMarketCap. Його API надає поточні ціни, історичні OHLC-свічки, дані про ринкову капіталізацію та метадані монет. Free tier (Demo) достатній для більшості застосунків, Pro — для high-traffic. Отримайте консультацію інженера — ми допоможемо вибрати тариф і спроектувати архітектуру.

Як уникнути 429 помилки при високих навантаженнях?

Основні проблеми: rate limit (30 req/min на безкоштовному плані), відсутність резервування при падінні API та неправильне кешування, яке або застаріває, або не використовується. Ми покажемо, як вирішити кожну з них.

Тариф Rate limit Ліміт/місяць
Demo (безкоштовно) 30 req/min ~10 000
Analyst 500 req/min 500 000
Lite 500 req/min 500 000
Pro 1 000 req/min Unlimited

Demo-ключ отримується на сайті, передається як x-cg-demo-api-key header або ?x_cg_demo_api_key= параметр. Без ключа — дуже жорсткий rate limit (~10 req/min), у production так працювати не можна.

const COINGECKO_BASE = 'https://api.coingecko.com/api/v3'; class CoinGeckoClient { private apiKey: string; constructor(apiKey: string) { this.apiKey = apiKey; } private async get<T>(endpoint: string, params: Record<string, string> = {}): Promise<T> { const url = new URL(`${COINGECKO_BASE}${endpoint}`); Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v)); const response = await fetch(url.toString(), { headers: { 'x-cg-demo-api-key': this.apiKey, 'Accept': 'application/json', }, }); if (response.status === 429) { throw new RateLimitError('CoinGecko rate limit exceeded'); } if (!response.ok) { throw new Error(`CoinGecko API помилка: ${response.status}`); } return response.json(); } } 

Ключові ендпоінти для DeFi

Ціна токена — найчастіший запит. Також доступні дані по контракту та історичні OHLC-свічки.

async function getTokenPrices( coinIds: string[], vsCurrencies: string[] = ['usd', 'eur'] ): Promise<Record<string, Record<string, number>>> { return this.get('/simple/price', { ids: coinIds.join(','), vs_currencies: vsCurrencies.join(','), include_24hr_change: 'true', include_last_updated_at: 'true', }); } async function getTokenPriceByContract( contractAddress: string, platform: string = 'ethereum' ): Promise<TokenPrice> { return this.get(`/simple/token_price/${platform}`, { contract_addresses: contractAddress, vs_currencies: 'usd', include_24hr_change: 'true', }); } async function getOhlcData(coinId: string, days: number): Promise<[number, number, number, number, number][]> { return this.get(`/coins/${coinId}/ohlc`, { vs_currency: 'usd', days: days.toString(), }); } async function getMarketChart(coinId: string, days: number) { return this.get(`/coins/${coinId}/market_chart`, { vs_currency: 'usd', days: days.toString(), interval: days <= 1 ? 'minutely' : days <= 90 ? 'hourly' : 'daily', }); } 

Як кешувати дані CoinGecko без втрати актуальності?

Смикати CoinGecko на кожен запит користувача — швидкий шлях до вичерпання лімітів. Ціни оновлюються кожні 60 секунд; кеш на 30–60 секунд не погіршує точність. Ми використовуємо Redis і гарантуємо актуальність даних. Кешування знижує навантаження на API у 60 разів порівняно з прямими викликами — це підтверджено на реальних проектах з мільйоном запитів на день. Економія на інфраструктурі за рахунок кешування може бути суттєвою при високих навантаженнях.

import { Redis } from 'ioredis'; class CachedCoinGeckoClient extends CoinGeckoClient { constructor(private redis: Redis, apiKey: string) { super(apiKey); } async getCachedPrice(coinId: string): Promise<number> { const cacheKey = `coingecko:price:${coinId}`; const cached = await this.redis.get(cacheKey); if (cached) return parseFloat(cached); const data = await this.getTokenPrices([coinId]); const price = data[coinId]?.usd; if (price) { await this.redis.setex(cacheKey, 60, price.toString()); } return price; } } 

Для high-traffic сервісів: фоновий job оновлює ціни кожні 30 секунд, всі користувацькі запити читають з кешу.

Як обробляти перевищення ліміту запитів?

async function fetchWithRetry<T>( fn: () => Promise<T>, maxRetries = 3, baseDelay = 1000 ): Promise<T> { for (let attempt = 0; attempt < maxRetries; attempt++) { try { return await fn(); } catch (err) { if (err instanceof RateLimitError) { const delay = baseDelay * Math.pow(2, attempt); await new Promise(r => setTimeout(r, delay)); continue; } throw err; } } throw new Error('Перевищено максимум повторних спроб'); } 

Експоненційний backoff дозволяє м'яко обходити rate limit. Для критичних сервісів додаємо fallback на CoinMarketCap або Binance Public API. Налаштовуємо моніторинг через Tenderly або Prometheus для відстеження помилок і затримок.

Порівняння тарифів CoinGecko

Функція Demo Analyst Lite Pro
Max запитів/хв 30 500 500 1000
Історичні дані так так так так
WebSocket ні ні ні так
Підтримка email email priority dedicated

Які метрики моніторити після інтеграції?

Після деплою відстежуйте: кількість 429 помилок, час відповіді кешу vs прямого виклику, відсоток cache hit/miss, затримки API CoinGecko. Використовуйте дашборди Grafana з алертами на перевищення порогів. Це дозволить своєчасно реагувати на деградацію.

Пошук CoinGecko ID по контракту

Проблема: у вас є адреса токена, але не його CoinGecko ID. Рішення — отримати список усіх монет (кешується на години) і побудувати мапінг. Список (~15 000 позицій) оновлюється рідко.

Що входить в інтеграцію?

  • Клієнтський код на TypeScript (або інша мова за вашим стеком)
  • Налаштування кешування Redis з оптимальним TTL
  • Реалізація fallback на CoinMarketCap або Binance API
  • Моніторинг і алертинг помилок (Tenderly, Prometheus)
  • Документація по API та інструкція з експлуатації
  • Підтримка протягом 30 днів після здачі

Чому варто довірити інтеграцію нашій команді?

Ми працюємо в Web3 понад 5 років, виконали 50+ інтеграцій з різними API (CoinGecko, CoinMarketCap, Binance, Bybit). Наші інженери глибоко розуміють архітектуру DeFi-протоколів і готують production-ready код з нуля.

Процес роботи

  1. Аналітика: вибір тарифу, визначення необхідних ендпоінтів.
  2. Проектування: архітектура кешування, fallback, обробка помилок.
  3. Реалізація: написання клієнта, налаштування Redis, впровадження retry.
  4. Тестування: навантажувальне тестування, перевірка лімітів.
  5. Деплой: моніторинг і документація.

Строки: від 2 до 5 днів залежно від складності. Вартість розраховується індивідуально.

Зв'яжіться з нами для консультації з інтеграції CoinGecko API. Замовте впровадження під ключ і забудьте про проблеми з лімітами.