Разработка агрегатора курсов криптовалют под ключ

DeFi-протокол потерял $600,000 из-за манипуляции ценой через [флеш-кредит](https://en.wikipedia.org/wiki/Flash_loan). Причина — единственный оракул. Мы разрабатываем агрегатор курсов криптовалют, который решает эту проблему: собирает данные из 5+ источников (Binance, OKX, Bybit, Kraken, Uniswap) и п

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

Часто задаваемые вопросы

Последние работы

  • 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-протокол потерял $600,000 из-за манипуляции ценой через флеш-кредит. Причина — единственный оракул. Мы разрабатываем агрегатор курсов криптовалют, который решает эту проблему: собирает данные из 5+ источников (Binance, OKX, Bybit, Kraken, Uniswap) и применяет TWAP-фильтрацию. BTC/USDT на Binance отличается от Bybit, OKX, Kraken и от on-chain цены в Uniswap пуле. Агрегатор вычисляет единый «справедливый» курс или показывает разброс для прайсинга в платёжных системах, отображения в кошельках, арбитражных стратегий, риск-менеджмента, DeFi оракулов. Наш агрегатор обрабатывает десятки торговых пар с обновлением каждые 100 мс — критически важно для арбитража и ликвидности.

Разработчик агрегатора: "TWAP-фильтрация предотвращает манипуляции, которые стоят миллионы."

Как разрабатывается агрегатор курсов криптовалют?

Единый оракул — точка отказа. Агрегатор курсов криптовалют снижает риски манипуляции, комбинируя данные CEX и DEX с верификацией через TWAP. Это предотвращает потери, которые могут достигать миллионов долларов, как в случае известных flash loan атак.

Основные сложности: синхронизация данных с разной задержкой (10 мс для CEX, 12-15 сек для DEX), защита от флеш-кредитных атак на пулы, обнаружение аномалий курсов. Мы решаем их через комбинацию VWAP и медианы с динамическим отбрасыванием выбросов.

Как собираются данные с разных бирж?

Каждая биржа — отдельный коллектор с переподключением при разрыве. Используем TypeScript и событийную модель на Node.js.

import WebSocket from 'ws'; import { EventEmitter } from 'events'; interface PriceEvent { source: string; pair: string; // 'BTC/USDT' price: number; volume24h: number; timestamp: number; // ms } class BinanceCollector extends EventEmitter { private ws: WebSocket | null = null; private pairs: string[]; private reconnectTimer: NodeJS.Timeout | null = null; constructor(pairs: string[]) { super(); this.pairs = pairs; } connect() { const streams = this.pairs .map(p => `${p.replace('/', '').toLowerCase()}@ticker`) .join('/'); this.ws = new WebSocket(`wss://stream.binance.com:9443/stream?streams=${streams}`); this.ws.on('message', (data: string) => { const msg = JSON.parse(data); if (msg.stream && msg.data) { const ticker = msg.data; this.emit('price', { source: 'binance', pair: this.normalizePair(ticker.s), price: parseFloat(ticker.c), volume24h: parseFloat(ticker.v) * parseFloat(ticker.c), timestamp: ticker.E, } as PriceEvent); } }); this.ws.on('close', () => { this.reconnectTimer = setTimeout(() => this.connect(), 5000); }); this.ws.on('error', (err) => { console.error('Binance WS error:', err.message); }); } private normalizePair(symbol: string): string { const quoteAssets = ['USDT', 'USDC', 'BTC', 'ETH', 'BNB']; for (const quote of quoteAssets) { if (symbol.endsWith(quote)) { return `${symbol.slice(0, -quote.length)}/${quote}`; } } return symbol; } } 

Аналогичные коллекторы для OKX, Bybit, Kraken. Для каждого источника настроены автоматические переподключения и логирование ошибок.

On-chain цены из Uniswap V3

Spot цена из пула — sqrtPriceX96. Декодирование с помощью viem:

import { createPublicClient, http } from 'viem'; import { mainnet } from 'viem/chains'; const UNISWAP_V3_POOL_ABI = [ { name: 'slot0', type: 'function', inputs: [], outputs: [ { name: 'sqrtPriceX96', type: 'uint160' }, { name: 'tick', type: 'int24' }, ], stateMutability: 'view', } ] as const; async function getUniswapPrice(poolAddress: string): Promise<number> { const slot0 = await client.readContract({ address: poolAddress as `0x${string}`, abi: UNISWAP_V3_POOL_ABI, functionName: 'slot0', }); const sqrtPriceX96 = BigInt(slot0.sqrtPriceX96); // price = (sqrtPriceX96 / 2^96)^2 * (10^token0Decimals / 10^token1Decimals) const price = Number((sqrtPriceX96 ** 2n * BigInt(1e18)) / (2n ** 192n)) / 1e18; return price; } 

TWAP из Uniswap V3 надёжнее spot-цены — манипуляция требует удержания большого объёма в пуле в течение нескольких блоков. Для оракулов используем TWAP за 30 минут.

Какие методы агрегации мы применяем?

Простое среднее — плохой агрегатор: один источник с ошибочной ценой тянет среднее в сторону. Используем комбинацию:

Метод Устойчивость к выбросам Когда применять
VWAP (взвешенное по объёму) Средняя Высоколиквидные пары, CEX-источники
Медиана Высокая 5+ источников, DeFi-аналитика
Отбрасывание выбросов + медиана Очень высокая Всегда, как базовый фильтр

VWAP рассчитывается как сумма цен, взвешенных по объёму. Медиана устойчива к выбросам. Обнаружение аномалий — обязательно: отбрасываем цены, отклоняющиеся от медианы более чем на 2%.

import statistics def filter_outliers(prices: list[float], threshold: float = 0.02) -> list[float]: median = statistics.median(prices) return [p for p in prices if abs(p - median) / median <= threshold] def vwap(prices: list[dict]) -> float: total_volume = sum(p['volume24h'] for p in prices) if total_volume == 0: return sum(p['price'] for p in prices) / len(prices) return sum(p['price'] * p['volume24h'] for p in prices) / total_volume 

Сравнение источников: CEX vs DEX

Параметр CEX (Binance, OKX) DEX (Uniswap V3)
Задержка ~10-50 мс ~12-15 сек (блок)
Объём Высокий, до $1B+ в день Средний, зависит от пула
Манипуляция Возможна через спред Сложнее, требует флеш-кредитов
Надёжность Зависит от API биржи Зависит от блокчейна

Выбор между CEX и DEX зависит от требований к задержке и устойчивости. Для реалтайм-приложений (трейдинг) предпочтительны CEX, для DeFi-оракулов — DEX с TWAP.

Как мы обеспечиваем отказоустойчивость?

  • Circuit breaker: если источник выдаёт ошибки > 5 раз за 30 секунд — отключаем на 60 секунд.
  • Staleness check: если данные не обновлялись > 30 секунд — исключаем из агрегации.
  • Minimum sources: при активных источниках < 2 возвращаем ошибку вместо неверного курса.
  • Метрики Prometheus: price_sources_active, price_update_latency_ms, price_deviation_percent — алерт при аномалиях.

Все компоненты контейнеризированы (Docker) и оркестрируются через Docker Compose или Kubernetes. Каждый коллектор запускается в отдельном контейнере, агрегатор — в одном экземпляре с поддержкой горизонтального масштабирования через Redis Pub/Sub. Для мониторинга используем Prometheus и Grafana. Развёртывание автоматизировано через CI/CD (GitLab CI).

Пример архитектурыАгрегатор состоит из: коллекторов (по одному на источник), ядра агрегации (Python, Redis), API-сервера (FastAPI) и дашборда (Grafana). Все упаковано в контейнеры.

Процесс разработки: от проектирования до продакшена

  1. Проектирование (2-3 дня): согласовываем список пар и источников, требования к latency, схему хранения.
  2. Коллекторы (3-4 дня): разработка и тестирование каждого источника, нормализация формата.
  3. Агрегация (2-3 дня): выбор алгоритма взвешивания, outlier detection, Redis хранение.
  4. API (2-3 дня): REST + WebSocket, документация, rate limiting.
  5. Нагрузочное тестирование (1-2 дня): 100+ пар одновременно, поведение при потере источника.

Итого 1-2 недели для агрегатора с 3-5 источниками и 50+ торговыми парами.

Что входит в работу

  • Архитектурная документация (схемы, описание потоков)
  • Репозиторий с исходным кодом (коллекторы, агрегатор, API)
  • Документация API (Swagger/OpenAPI)
  • Отчёт о нагрузочном тестировании
  • Скрипты для развёртывания (Docker Compose/K8s манифесты)
  • Инструкция по запуску и мониторингу
  • Обучение команды (1-2 часа)

Типичные ошибки при разработке агрегатора

  • Использование только spot-цены вместо TWAP — уязвимость к флеш-кредитным атакам.
  • Отсутствие outlier detection — одна ошибочная цена искажает всё среднее.
  • Нет circuit breaker — при падении биржевого API агрегатор зависает.
  • Слишком маленький пул источников (<3) — снижает надёжность.

Избежав этих ошибок, вы получите устойчивый к манипуляциям агрегатор курсов криптовалют. Наш опыт: 10+ лет в разработке блокчейн-решений, 50+ проектов по криптовалютам, 5 лет на рынке. Гарантируем стабильную работу агрегатора.

Свяжитесь с нами для оценки вашего проекта. Получите консультацию инженера и закажите разработку агрегатора курсов криптовалют, который защитит ваш проект.