Разработка системы оракулов для prediction markets
Prediction market работает на trust в oracle: если оракул врёт или ошибается — весь рынок теряет смысл. Система оракулов для prediction market сложнее чем ценовой feed — нужно обрабатывать субъективные вопросы, спорные исходы, форс-мажор, события которые не произошли.
Классификация рынков по требованиям к оракулу
Binary markets (да/нет): простейший резолвинг. «Цена BTC > $100K на 31 декабря?» → 0 или 1.
Scalar markets: «Какой будет цена ETH на 31 декабря?» → числовое значение в диапазоне.
Categorical markets: «Кто выиграет чемпионат?» → выбор из нескольких вариантов.
Conditional markets: «Если событие X произойдёт — что будет с Y?» — сложная зависимость.
Оракул-стек для Polymarket-style платформы
Polymarket — крупнейший prediction market ($1B+ volume), использует UMA Optimistic Oracle для большинства рынков и USDC на Polygon.
Многоуровневая система
Tier 1: Automatic Resolution
├── Price feeds (Chainlink/Pyth) для price-based markets
└── Verifiable external data (sports APIs, election APIs)
Tier 2: Optimistic Resolution (UMA/Reality.eth)
├── Proposer → propose outcome + bond
├── Dispute window (2h - 24h)
└── Если нет dispute → принято
Tier 3: Human Escalation
├── UMA DVM (token voter court)
├── Kleros arbitration
└── DAO governance vote
Роль Market Creator
Каждый рынок создаётся с:
- Resolution criteria: точные условия определяющие исход
- Resolution oracle: какой oracle/процесс используется
- Resolution timestamp: когда или как триггерится
- Invalid conditions: когда рынок признаётся invalid (событие отменено, ambiguous)
struct Market {
bytes32 questionId;
string question;
bytes resolutionCriteria; // IPFS hash с полным описанием
address oracle; // UMA OO, Chainlink, кастомный
uint256 resolutionTime;
uint256 bondAmount; // для UMA
bool allowInvalid; // может ли рынок быть invalid
}
Trusted Reporters / Verified Sources
Для sports и news events — trusted reporter model:
News Feed Integration: официальные API (AP, Reuters, ESPN) предоставляют machine-readable данные. Договорные соглашения обеспечивают надёжность источника.
Multi-reporter consensus: несколько независимых reporters должны согласиться. 3-of-5 threshold.
Reporter staking: reporters стейкают токены. Неправильный или манипулированный report → slashing. Экономический стимул к честности.
contract TrustedReporterOracle {
mapping(address => bool) public trustedReporters;
mapping(bytes32 => mapping(address => int256)) public reports;
mapping(bytes32 => uint256) public reportCount;
uint256 public constant QUORUM = 3;
function report(bytes32 marketId, int256 outcome) external {
require(trustedReporters[msg.sender], "Not trusted");
require(reports[marketId][msg.sender] == 0, "Already reported");
reports[marketId][msg.sender] = outcome;
reportCount[marketId]++;
if (reportCount[marketId] >= QUORUM) {
_finalizeWithConsensus(marketId);
}
}
function _finalizeWithConsensus(bytes32 marketId) internal {
// Если все reporters согласны — принять outcome
// Если есть разногласие — эскалировать в UMA/Kleros
}
}
Обработка edge cases
Event cancelled: матч перенесён, выборы отменены. Рынок должен вернуть ставки (void). Это должно быть предусмотрено в resolution criteria.
Ambiguous outcome: results can be interpreted differently. Нужен escalation mechanism.
Late oracle data: оракул вернул данные через 2 часа после дедлайна — принимать или нет? Критерии нужно задать заранее.
Oracle manipulation: высокий бонд для UMA означает что манипуляция невыгодна экономически. Но нужна мониторинговая система.
Резолвинг analytics
Платформа должна трекать качество резолвинга:
- Время от resolution timestamp до фактического resolve
- % рынков resolved автоматически vs через dispute
- История disputes и их исходов
- Reputation scores reporters
Хорошо отлаженная oracle система — конкурентное преимущество prediction market. Пользователи доверяют платформе с прозрачной историей резолвингов. Разработка: 6-10 недель.







