Розробка пулів ліквідності для ставок на блокчейні
Централізовані беттинговані платформи працюють по простій моделі: дом приймає всі ризики й встановлює 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 — децентралізований арбітраж для спірних випадків, не для кожного матча.
Для production — комбінація: автоматичне розрішення через 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.
Трейдоффи: чуть вищий газ на створення ставки (~50k gas vs ~30k для маппінгу), складніше аудирується.
Економіка провайдерів ліквідності
Доходність LP = маржа беттинговної платформи - виплати по виигрішним ставкам. При марже 5% та збалансованих ставках — LP заробляє ~5% років плюс додатковий yield від невикористаної ліквідності (стейкинг USDC в Aave, поки события не закриті).
Ризик: при серії крупних upset-результатів (всі андердоги виграють) — LP втрачає. Insurance fund з частини комісій частково буферизує ці втрати.
Орієнтири по термінам
Базовий беттинговий пул з фіксованими odds й centralized оракулом — 1-2 тижні. Повноцінний протокол з динамічними odds, оракулом Chainlink, LP-токеномікою й вторинним ринком ставок — 6-10 тижнів.
Вартість рахується після обговорення архітектури й джерел даних про результати.







