Разработка системы резолвинга исходов для prediction markets

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

Разработка системы резолвинга исходов для prediction markets

Prediction market — это рынок ставок на реальные события: «Выиграет ли команда A матч?», «Достигнет ли ETH $5000 до конца года?», «Будет ли принят законопроект X?». Вся токеномика работает только если исход определяется правильно и честно. Система резолвинга — критический компонент.

Типы событий и их резолвинг

Price-based: «Будет ли BTC выше $100K к 31 декабря?»

  • Резолвится автоматически через Chainlink/Pyth price feed на дату экспирации
  • Наименее спорно, полностью on-chain

Sports/Political: «Кто выиграет выборы?»

  • Требует внешние данные
  • Оракулы типа Augur, UMA, API3, Kleros

Subjective: «Выполнил ли проект обещанное?»

  • Требует human judgment
  • Клейм-чэлдж системы, коллективное голосование

Оракул-based автоматический резолвинг

Для объективно верифицируемых событий — автоматический резолвинг через оракул.

contract PriceMarket {
    AggregatorV3Interface public priceOracle;
    
    uint256 public resolutionTimestamp;
    uint256 public targetPrice;  // в USD * 10^8
    
    bool public resolved;
    bool public outcomeYes;
    
    function resolve() external {
        require(block.timestamp >= resolutionTimestamp, "Too early");
        require(!resolved, "Already resolved");
        
        // Проверить staleness оракула
        (,int256 price,,uint256 updatedAt,) = priceOracle.latestRoundData();
        require(updatedAt >= resolutionTimestamp - 3600, "Oracle stale at resolution");
        require(updatedAt <= resolutionTimestamp + 3600, "Oracle updated too late");
        
        resolved = true;
        outcomeYes = uint256(price) >= targetPrice;
        
        emit MarketResolved(outcomeYes, uint256(price));
    }
}

Ключевые нюансы:

  • Какую именно цену брать? Цену точно в момент экспирации, или TWAP за последний час?
  • Что делать если оракул обновился задолго до экспирации? Брать историческое значение через roundId.

Исторические данные через roundId

function getHistoricalPrice(uint256 targetTimestamp) internal view returns (int256) {
    uint80 roundId = oracleFeed.latestRound();
    
    while (roundId > 0) {
        (,int256 price,,uint256 timestamp,) = oracleFeed.getRoundData(roundId);
        if (timestamp <= targetTimestamp) {
            return price;
        }
        roundId--;
    }
    revert("No historical price found");
}

UMA Optimistic Oracle

UMA's Optimistic Oracle — популярный выбор для prediction markets (Polymarket использует UMA).

Mechanism:

  1. Proposer предлагает результат + bond
  2. Dispute window (2 часа): кто угодно может оспорить + counter-bond
  3. При отсутствии dispute — результат принят
  4. При dispute → UMA DVM voting (token holders голосуют)
interface IOptimisticOracle {
    function requestPrice(
        bytes32 identifier,
        uint256 timestamp,
        bytes memory ancillaryData,
        IERC20 currency,
        uint256 reward
    ) external returns (uint256 totalBond);
    
    function proposePrice(
        address requester,
        bytes32 identifier,
        uint256 timestamp,
        bytes memory ancillaryData,
        int256 proposedPrice
    ) external;
    
    function settleAndGetPrice(
        bytes32 identifier,
        uint256 timestamp,
        bytes memory ancillaryData
    ) external returns (int256 price);
}

UMA оптимистичен: 95% запросов резолвятся без споров. Это делает его дешёвым и быстрым.

Reality.eth для субъективных событий

Reality.eth — escalation game для субъективных вопросов:

  1. Любой задаёт вопрос + bond
  2. Любой отвечает + bond (перебивает предыдущий ответ)
  3. При каждом оспаривании bond удваивается, таймаут увеличивается
  4. Финальный ответ через Kleros arbitration при слишком высоком bond

Rational behavior: если ты знаешь правильный ответ — выгодно оспаривать неправильный (получишь bond проигравшего). Это создаёт правдивый результат.

Система паузы при спорных исходах

Даже с автоматическим резолвингом бывают edge cases: oracle возвращает явно неправильное значение, событие отменено, форс-мажор.

address public guardian;  // multisig DAO

function disputeResolution() external {
    require(msg.sender == guardian, "Not guardian");
    require(block.timestamp < resolutionTimestamp + DISPUTE_WINDOW, "Too late");
    
    resolved = false;  // Сброс
    emit ResolutionDisputed(msg.sender, block.timestamp);
    // Триггер manual resolution process
}

Система резолвинга prediction market — 4-8 недель разработки плюс Legal review для compliance с gambling regulations в целевых юрисдикциях.