Разработка пулов ликвидности для ставок на блокчейне

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Разработка пулов ликвидности для ставок на блокчейне
Сложная
~1-2 недели
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1258
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1170
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    873
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1092
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    830

Разработка пулов ликвидности для ставок на блокчейне

Централизованные беттинговые платформы работают по простой модели: дом принимает все риски и устанавливает odds с маржой в свою пользу. В децентрализованном беттинге риск распределяется между провайдерами ликвидности — они берут на себя роль «дома» и получают доходность от маржи, принимая возможность убытков при нестандартных исходах.

Протоколы типа Azuro строят именно такую инфраструктуру. Провайдер добавляет USDC в пул, ставки идут против этого пула, odds корректируются динамически в зависимости от объёма ставок и текущего exposure.

Ключевая проблема: управление exposure

Дисбаланс ставок

Если 90% ставок идёт на одну сторону события (например, на победу Реала в дерби), пул несёт огромный directional risk. Один результат — провайдеры ликвидности теряют значительную часть пула, другой результат — зарабатывают.

Динамические odds как решение: при превышении exposure threshold на одну сторону odds на эту сторону автоматически снижаются (делая ставку менее привлекательной), odds на противоположную сторону растут. Это балансировочный механизм без централизованного маркет-мейкера.

function calculateOdds(
    uint256 eventId,
    uint8 outcomeId
) public view returns (uint256 odds) {
    ExposureData memory data = exposures[eventId];
    uint256 totalPool = data.lpLiquidity;
    uint256 sideExposure = data.outcomeExposure[outcomeId];
    
    // Чем выше exposure на сторону, тем ниже odds
    uint256 adjustedPool = totalPool - sideExposure * MARGIN_FACTOR / 1e18;
    odds = (adjustedPool * 1e18) / (adjustedPool - sideExposure);
}

Это упрощённая формула. Реальные системы используют более сложные модели с учётом correlated events (несколько матчей в одном турнире), liquidity depth и market maker oracle для начальных odds.

Оракул результатов и манипуляция

Это самая уязвимая точка любого беттинг-протокола. Кто определяет результат матча? Централизованный оратор — точка отказа и доверия одновременно. Компрометация оракула = дренаж всей ликвидности.

Несколько подходов:

Chainlink Functions / Any API — Chainlink запрашивает данные с нескольких спортивных API (Sportradar, API-Football), агрегирует результат через threshold consensus. Атаковать нужно одновременно несколько источников.

UMA Optimistic Oracle — результат публикуется провайдером, есть период оспаривания. Если никто не оспорил — считается достоверным. Если оспорили — UMA-стейкеры голосуют. Медленнее, но более децентрализован.

Kleros — децентрализованный арбитраж для спорных случаев, не для каждого матча.

Для продакшн-системы — комбинация: автоматическое разрешение через Chainlink для очевидных результатов, Kleros для edge cases (матч прерван, технические инциденты).

Архитектура контрактов

Структура пула ликвидности

Пул похож на Uniswap LP, но с несколькими отличиями:

  • LP-токен представляет долю в пуле (аналог LP-токена AMM)
  • Ликвидность заблокирована на период активных событий (нельзя withdraw пока есть открытые ставки)
  • Withdrawal queue при массовом выводе
struct LiquidityPool {
    uint256 totalLiquidity;     // USDC в пуле
    uint256 lockedLiquidity;    // заблокировано для покрытия открытых ставок
    uint256 totalShares;        // LP-токены
    mapping(address => uint256) shares;
}

function addLiquidity(uint256 amount) external {
    // shares рассчитываются пропорционально текущей стоимости пула
    uint256 newShares = totalShares == 0 
        ? amount 
        : amount * totalShares / totalLiquidity;
    // ...
}

lockedLiquidity — максимально возможная выплата по всем открытым ставкам. LP не может вывести ликвидность ниже этого порога. Это инвариант безопасности: пул всегда способен рассчитаться по текущим ставкам.

Ставки как NFT или fungible?

Два подхода: ставка как ERC-721 NFT (уникальна, может торговаться на вторичном рынке) или как запись в маппинге контракта.

ERC-721 открывает возможность ставочного маркетплейса — пользователь может продать выигрышную ставку до завершения события. Это дополнительная ликвидность для пользователей и дополнительный revenue для протокола (комиссия с вторичных сделок). Azuro использует именно этот подход через betting ERC-721.

Трейдоффы: чуть выше gas на создание ставки (~50k gas vs ~30k для маппинга), сложнее аудируется.

Экономика провайдеров ликвидности

Доходность LP = маржа беттинговой платформы - выплаты по выигрышным ставкам. При марже 5% и сбалансированных ставках — LP зарабатывает ~5% годовых плюс дополнительный yield от неиспользованной ликвидности (стейкинг USDC в Aave, пока события не закрыты).

Риск: при серии крупных upset-результатов (все андердоги выигрывают) — LP теряет. Insurance fund из части комиссий частично буферизует эти потери.

Ориентиры по срокам

Базовый беттинговый пул с фиксированными odds и centralized оракулом — 1-2 недели. Полноценный протокол с динамическими odds, оракулом Chainlink, LP-токеномикой и вторичным рынком ставок — 6-10 недель.

Стоимость рассчитывается после обсуждения архитектуры и источников данных о результатах.