WhatsUpmessage on telegram
closeChat with us

A version of this page is available in your language.
Would you like to switch?

Как работает Polymarket: архитектура, ордербук, CTF и смарт-контракты

January 19, 2026
Разбираем как работает Polymarket: архитектура протокола, гибридный ордербук CLOB, формирование вероятностей, CTF и финализация рынков через UMA оракл.

Если вы строите платформу рынков предсказаний или хотите понять, как устроены современные протоколы, этот разбор для вас.
Мы разберём архитектуру Polymarket, покажем, как работает ордербук, как формируются вероятности, как Polymarket хранит и обновляет состояние рынка через Conditional Tokens Framework и как проходит финализация через оптимистичный оракул UMA.

Итак, что такое Polymarket?

Polymarket — это протокол, построенный вокруг рынков предсказаний (prediction markets) или рынков событий. По сути, это платформа, где публикуются будущие события, которые могут произойти или не произойти. Пользователи делают прогнозы на исход и, если угадали, получают прибыль. И да, звучит как ставки в блокчейне, но у Polymarket есть важные технические особенности, которые мы разберем далее.

Каждый рынок — это, по сути, “да/нет” вопрос: произойдет событие или нет. Например: “Будет ли TikTok снова заблокирован до мая?” (пример старый, но он хорошо показывает механику).

Как устроены акции в Polymarket

Для каждого события есть два типа акций: YES и NO. Это противоположные исходы одного и того же рынка. Можно покупать и продавать обе стороны.

Цена акции всегда в диапазоне от 0 до 1 доллара, и в сумме обе стороны дают примерно $1. То есть $1 = 100% вероятности, распределённой между исходами. Цена акции отражает, насколько сообщество считает вероятным конкретный исход.

В примере выше акция YES стоит $0.36, а NO — $0.66. Это означает, что рынок оценивает вероятность блокировки TikTok в 36%, а вероятность того, что блокировки не будет — в 66%. Если сложить цены двух противоположных исходов, получится примерно $1 — это логично, потому что это сумма вероятностей двух взаимоисключающих исходов.

Публикация события и закрытие рынка

У каждого события есть дедлайн, после которого исход фиксируется. В нашем примере это “до мая”. После истечения срока происходит финализация:

  • акции правильного исхода становятся равны $1
  • акции неправильного исхода обнуляются

Пример: пользователь купил NO на $100 по цене $0.66 (около 151.5 акций). Если событие не произойдёт, акции NO закрываются по $1, и пользователь получает $151.5 — прибыль $51.5. Если событие произойдёт, акции NO обнуляются, и пользователь теряет $100.

Торговля внутри рынка

Ключевой момент: не все держат позиции до финализации. Многие торгуют внутри рынка, фиксируя прибыль по мере изменения оценок вероятности. То есть Polymarket — это не просто “ставки на исход”, а рынок, где событие — это актив, а акции — инструмент, который можно купить или продать в любой момент.

CLOB и единый ордербук на каждый рынок

Polymarket использует CLOB, то есть central limit order book. Слово “central” здесь означает, что все ордера собираются в одном месте. У каждого события в Polymarket есть свой ордербук, в котором отображаются все заявки по этому рынку. Это упрощает наблюдение за спросом и предложением и повышает прозрачность торговли.

“Limit” означает, что ордербук поддерживает лимитные ордера, то есть ордера с конкретными условиями исполнения. В Polymarket ордера публикуют с ценой и объёмом, и они остаются в книге до исполнения или отмены.

Гибридная модель

В документации Polymarket ордербук называют гибридно-децентрализованным. Это значит, что система состоит из двух частей: оффчейн и ончейн.

  • Оффчейн часть — это backend-оператор, который отслеживает ордера, делает матчинг и формирует данные для рыночных ордеров.
  • Ончейн часть — это смарт-контракт, который принимает данные по сопоставлению ордеров, выполняет расчёты и исполняет ордера уже на блокчейне. Контракт взаимодействует с акциями, которые тоже представлены в виде контрактов, и управляет расчётами в USDC.

Почему ордербук “заточен” под бинарные опционы

Ордербук Polymarket построен специально под бинарные рынки. Это значит, что система всегда держит баланс между двумя исходами события.

Когда пользователь размещает лимитный ордер, система автоматически показывает зеркальный ордер для противоположного исхода. Это не означает, что ордер меняется. Система просто визуально инвертирует ордер, чтобы сформировать единый стакан для обоих исходов.

Пример инверсии ордеров в CLOB

Пользователь размещает ордер на покупку 100 акций YES по цене $0.40. Система одновременно показывает ордер на продажу 100 акций NO по цене $0.60. Сам ордер не меняется, он остаётся покупкой YES по $0.40. Инверсия существует только в отображении стакана: покупка превращается в продажу, а цена становится равной 1 минус исходная цена.

Так работает единый ордербук для бинарных рынков. Каждый ордер на одной стороне отражается как обратный ордер на другой стороне. Это сохраняет согласованность рынка и упрощает торговлю.

Почему инверсия работает

Такая модель основана на базовом предположении Polymarket: одна акция YES и одна акция NO всегда в сумме дают один доллар. Это следует из определения вероятности. Если у события два противоположных исхода, вероятность одного исхода равна 100% минус вероятность другого.

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

Как Polymarket рассчитывает вероятность исхода

Мы уже разобрали, что у Polymarket есть события, исходы, акции и цены. Пользователи покупают и продают акции и получают прибыль или убыток в зависимости от исхода. Но как именно формируются цены и откуда берутся вероятности?

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

Формирование первых цен в новом рынке

Когда создается новый рынок, акции ещё не существуют, а значит, нет цены и нет вероятности. Первые цены появляются только после того, как трейдеры начинают размещать лимитные ордера. Система ищет пару противоположных ордеров, и когда сумма их цен равна $1, происходит метч. В этот момент создаются акции, и эти цены становятся стартовой ценой рынка.

Рассмотрим пример.

  • Алиса публикует лимитный ордер на покупку 100 акций YES по $0.60.
  • Боб публикует лимитный ордер на покупку 50 акций NO по $0.40.
  • Система исполняет эти ордера.
  • Алиса получает 50 акций YES и платит $30.
  • Боб получает 50 акций NO и платит $20.
  • Начальная рыночная цена устанавливается на уровне $0.60 для YES и $0.40 для NO. Эта цена равна начальной вероятности исходов.

Как Polymarket показывает рыночную цену

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

Если спред меньше или равен $0.10, система показывает цену как середину спреда. То есть она берёт среднее значение между максимальной ценой покупки и минимальной ценой продажи.

Например, для YES максимальная цена покупки равна $0.34, а минимальная цена продажи равна $0.36. Спред составляет $0.02, что меньше $0.10. Система показывает рыночную вероятность 35%.

Если спред больше $0.10, система показывает цену последней сделки.

Сценарии исполнения ордеров в Polymarket

В Polymarket существуют несколько сценариев исполнения ордеров. Они отличаются тем, какие активы участвуют в сделке и как именно происходит расчёт.

  1. Прямой метч

Это самый простой сценарий. Алиса публикует ордер на покупку 100 акций YES по $0.35. Боб публикует ордер на продажу 100 акций YES по $0.35.

Система выполняет следующие действия:

  • забирает 100 акций YES у Боба
  • забирает $35 у Алисы
  • отдаёт Алисе 100 акций YES
  • отдаёт Бобу $35

В результате ордера полностью исполняются, и сделки проходят как на обычной бирже.

  1. Минт (выпуск новых акций)

В этом сценарии пользователи покупают акции, которые ещё не существуют. Алиса публикует ордер на покупку 100 акций YES по $0.35. Боб публикует ордер на покупку 50 акций NO по $0.65.

Система может исполнить эти ордера по правилу $1 = 1 YES + 1 NO. Она берёт $17.5 у Алисы и $32.5 у Боба, выпускает 50 акций YES Алисе и 50 акций NO Бобу.

Алиса хотела купить 100 акций, но получила только 50 и заплатила только за 50. В этом случае ордер Боба считается исполненным полностью, а ордер Алисы обновляется до “купить 50 акций YES по $0.35”.

Важно, что в этом сценарии пользователи не обмениваются средствами напрямую. Деньги идут в протокол, а не к другому пользователю.

  1. Мердж (уничтожение акций)

В этом сценарии пользователи продают акции, которые уже существуют. Алиса публикует ордер на продажу 100 акций YES по $0.35. Боб публикует ордер на продажу 50 акций NO по $0.65.

Система выполняет метч по правилу $1 = 1 YES + 1 NO. Она забирает 50 акций YES у Алисы и 50 акций NO у Боба, уничтожает эти акции и выплачивает Алисе $17.5 и Бобу $32.5.

Как и в минте, ордер Алисы может исполниться частично.

Здесь тоже не происходит прямого обмена между пользователями. Акции уничтожаются, а деньги выплачиваются из протокола.

Как инверсия ордеров связана с исполнением

Теперь, когда мы разобрали сценарии исполнения, становится понятнее, почему Polymarket инвертирует ордера в стакане.

Если Алиса публикует ордер на покупку YES по $0.80, система показывает инверсию как продажу NO по $0.20. Затем появляется Боб, который хочет купить NO по $0.20. На первый взгляд кажется, что Алиса и Боб не совпадают, потому что Алиса не продаёт NO.

Но мы можем исполнить ордера, потому что они комплементарны. Мы выпускаем Алисе акции YES, а Бобу акции NO. В итоге система сохраняет единый ордербук, и несмотря на отдельные вкладки YES и NO, ордера одного исхода присутствуют в книге другого.

Виды ордеров на Polymarket

На интерфейсе Polymarket для покупки и продажи доступны два типа ордеров: Market и Limit. Limit — это то, что мы уже разбирали. Это ордер с условием, который исполнится только если на рынке появится встречный ордер по нужной цене.

Если Алиса выставляет лимитный ордер на продажу акций ДА по 40 центов, то ордер исполнится только если кто-то готов купить по 40 центов. Если такого пользователя нет, ордер будет висеть в стакане. На лимитные ордера можно ставить срок действия, например продать по 40 центов в течение дня. Если срок истечёт, а ордер не исполнится, он автоматически удалится.

Market ордер и как он работает

Market ордер — это мгновенная покупка или продажа по рыночной цене. В документации это описано как покупка по текущей цене. Но важно понять, что это такой же ордер, как и лимитный, только условия его формирует платформа.

Когда пользователь выбирает Market, система должна сама подобрать наиболее выгодную цену для заявленного объёма акций. То есть пользователь говорит «я хочу продать или купить сейчас», а платформа сама ищет лучший вариант исполнения.

Пример на стакане

Вернёмся к стакану рассматриваемого рынка. Там видно заявки на продажу красным, заявки на покупку зелёным. Между ними пустое пространство — это спред. Также видно цену последней сделки и объём заявок по каждой цене.

Допустим, Алиса хочет продать 100 акций ДА по рыночной цене. Смотрим на стакан и видим, что по цене 34 цента готовы купить только 40.27 акций. Значит Алиса продаст по 34 цента только 40.27 акций, а оставшиеся акции будут проданы по следующей доступной цене, например 33 цента.

Сумма сделки получится такой
40.27 * 0.34 + (100 - 40.27) * 0.33 = 33.4027 доллара
то есть Алиса получит 33.4027 доллара за продажу 100 акций ДА по рыночной цене.

После такой сделки бид на 40.27 акций по 34 цента исчезнет, потому что все купили. Бид по 33 цента уменьшится на объём оставшихся проданных акций, и спред станет шире.

Частичное исполнение ордеров

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

Как устроена система Polymarket с технической точки зрения

Мы разобрали, как работает Polymarket с точки зрения пользователей. Теперь быстро разберём, как это реализовано внутри. Важно понять, что ордербук здесь гибридный, то есть он работает и off-chain, и on-chain.

Пользователь создаёт ордер, оператор сопоставляет ордера off-chain, а затем инициирует исполнение на смарт-контрактах. Под созданием ордера подразумевается формирование структуры данных, которую пользователь подписывает своим приватным ключом по стандарту EIP-712. Пока ордер не исполнен, он хранится off-chain. Это даёт возможность изменять условия ордера или отменять его без транзакций.

Где выполняются ордера

За исполнение ордеров отвечает контракт CTFExchange.sol. Он состоит из нескольких частей, каждая отвечает за отдельную область:

  • роли и права доступа
  • комиссии (хотя сейчас в протоколе комиссии равны нулю, функционал уже заложен)
  • проверка подписей
  • основная логика обмена

Но ключевой код находится в Assets.sol и Trading.sol.

В Assets.sol описаны активы, с которыми работает обменник. В Trading.sol описано, как именно происходит обмен: какие проверки проходят ордера, какие активы списываются, какие выдаются, и какие события эмитятся.

Что такое активы в Polymarket

Активы в Polymarket — это USDC и акции. USDC здесь — базовый токен оплаты, а акции — это то, что покупают и продают пользователи.

Акции тоже токен, но стандарт у них ERC-1155. Реализация акций построена на фреймворке Gnosis — Conditional Tokens Framework, отсюда и аббревиатура CTF в названии контракта обменника.

ERC-1155 подходит потому, что в рамках одного tokenId можно выпустить любое количество токенов. Это как fungible токен внутри NFT. И именно этим он и интересен для акций.

Как вычисляется tokenId для акций

Каждый tokenId в коллекции акций вычисляется особым образом, чтобы потом было легко определить победителей. В рамках одного tokenId выпускаются акции одного исхода события.

Чтобы однозначно описать маркет, на этапе создания нужно определить три параметра:

1) questionId

Это хэш вопроса и деталей маркета, которые сохраняются в IPFS. В итоге получается уникальный questionId.

2) outcomeSlotCount

Это число возможных исходов. Polymarket использует бинарный вариант, поэтому outcomeSlotCount всегда равен двум. Но фреймворк поддерживает до 256 исходов, чтобы другие проекты могли строить свои логики поверх CTF.

3) адрес оракула

Оракл отвечает за определение исхода события. В Polymarket используется UMA Oracle.

Когда у нас есть эти три параметра, их объединяют в keccak и получают conditionId. Это хэш условия маркета.

От conditionId до tokenId

Дальше мы формируем collectionIds. Для каждого исхода создаётся своя “коллекция” внутри одной ERC-1155 коллекции.

Чтобы понять, какая коллекция соответствует какому исходу, используется indexSet. Это 256-битный массив, который должен быть непустым подмножеством множества исходов.

В бинарном варианте indexSet может быть либо 01, либо 10, то есть либо первый исход, либо второй.

На основе conditionId и indexSet формируется collectionId.

И уже после этого формируется tokenId, который в документации называют positionId. Он зависит от collectionId и адреса collateralToken, то есть от USDC.

Это означает, что на этапе CTF определяется залоговый токен, который полностью обеспечивает выпуск акций. Пользователь отправляет USDC на контракт, взамен получает акции. Когда акции сгорают, контракт возвращает залог.

Как это помогает определить победителей

Итак, для каждого исхода события вычисляется tokenId по алгоритму. Когда нужно подвести итоги, можно снова вычислить tokenId победного исхода. Владельцы этих акций получают право забрать банк маркета.

Как определяется исход событий в Polymarket

Теперь коротко про оракл, который работает вместе с CTF. В Polymarket используется децентрализованный оптимистичный оракл UMA. Он отвечает за финальное определение исхода события, и от этого зависит, какие акции станут “победными” и кто заберёт банк.

Как начинается процесс

Когда создаётся маркет через CTF, он получает:

  • questionId
  • количество исходов
  • адрес оракула, который будет определять результат

После этого на контракт оракула отправляется запрос resolve. Он говорит о том, что маркет с такими условиями ожидает ответ от оракула.

Почему оракл оптимистичный

UMA использует модель, где любой участник может предложить результат через метод propose. Для этого нужно поставить залог в $750.

Если в течение двух часов никто не оспорит предложенный результат, он считается верным автоматически. Это и есть “оптимистичность”: система предполагает, что большинство участников не будет обманывать, и позволяет результату проходить без лишних подтверждений.

Что происходит при споре

Если кто-то считает, что предложенный ответ неверный, он может вызвать dispute и оспорить результат. Для этого также требуется залог.

Смысл механизма в стимуле: если ты уверен, что предложенный результат ложный, ты можешь забрать залог того, кто его предложил. Это создаёт экономический стимул держать систему честной.

Дальше запускается голосование держателей токена UMA. Они выбирают верный исход, и этот результат становится финальным.

Вмешательство администратора

Хотя система децентрализованная, у неё есть механизмы администрирования. В критических случаях админ может вмешаться. Это важно, потому что речь идёт о реальных деньгах и реальных событиях, и иногда требуется ручное разрешение спорных ситуаций.

Финальное распределение средств

Когда результат окончательно определяется на контракте оракула, он отправляет запрос reportPayouts на контракт CTF. Там результат сохраняется.

После этого держатели акций могут вызвать метод redeemPositions. Он сжигает их акции и возвращает залог пропорционально их позиции.

В итоге получается простая логика: в процессе торгов формируется общий банк, в который пользователи вносят залог за оба исхода. После финализации банк получает только одна сторона, а другая остаётся без выплаты.

О Rock’n’Block

Rock’n’Block — студия блокчейн-разработки, которая помогает проектам запускать масштабируемые продукты и инфраструктуру для рынков предсказаний, DeFi и децентрализованных бирж.

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

Что мы делаем

  • Разрабатываем DeFi-протоколы и DEX (AMM и CLOB) с полной логикой торговли, риск-менеджмента и ликвидаций.
  • Создаём рынки предсказаний и перпетуальные рынки: от протокола и ордербука до UI и системы расчётов.
  • Строим инфраструктуру: оркестрация, ноды, индексаторы, стриминг данных, аналитика.
  • Интегрируем оракулы, платежи, и финансовые инструменты для участников рынка.
  • Помогаем с выбором архитектуры, масштабированием и ускорением запуска продукта.

Почему нам можно доверять

У нас десятилетний опыт в блокчейн-разработке. Мы участвовали в проектах с 71M+ пользователями DeFi, $2.5B рыночной капитализации и помогли партнёрам привлечь $167M инвестиций.
Мы знаем, что нужно не только написать код, но и сделать так, чтобы продукт выдерживал нагрузку, был безопасным и соответствовал ожиданиям сообщества.

Ключевые моменты

Что такое Polymarket?

  • Polymarket — это протокол рынков предсказаний, где пользователи покупают и продают акции двух исходов (ДА/НЕТ), а цена акции отражает вероятность события.

Механика рынков на Polymarket

  • Для каждого события существуют акции ДА и НЕТ, цена которых находится в диапазоне от $0 до $1 и в сумме дает $1.
  • Цена отражает рыночную вероятность исхода.
  • После финализации правильный исход фиксируется на $1, неправильный — на $0.
  • Трейдеры могут держать позиции до финализации или закрыть их раньше, продав акции.

Как формируются цены и вероятности на Polymarket?

  • Начальные цены появляются, когда совпадают ордера на покупку и продажу, и создаются акции.
  • Рыночная цена рассчитывается как средняя между лучшими ценами покупки и продажи (если спред узкий) или как цена последней сделки (если спред широкий).
  • Цены и вероятности полностью зависят от активности пользователей — спроса и предложения.

Почему ордербук Polymarket называется CLOB?

  • Потому что это central limit order book: все ордера собираются в едином стакане для каждого рынка, а лимитные заявки остаются в книге до исполнения или отмены.

Почему ордербук Polymarket “гибридный”?

  • Потому что часть логики выполняется off-chain (сопоставление ордеров оператором), а исполнение происходит on-chain через смарт-контракты.

Что такое инверсия ордеров?

  • В бинарных рынках любой ордер на YES автоматически отображается как зеркальный ордер на NO (цена = 1 − цена). Это позволяет держать единый ордербук для обоих исходов.

Какие сценарии исполнения ордеров есть в Polymarket?

  1. Direct match — обмен существующими акциями между пользователями.
  2. Mint — выпуск новых акций, когда рынок ещё “пустой”.
  3. Merge — уничтожение акций и возврат USDC из протокола.

Типы ордеров в Polymarket

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

Обработка и метчинг ордеров

  • Ордера создаются и подписываются off-chain с помощью EIP-712.
  • Backend выполняет матчинг ордеров off-chain.
  • Совпавшие ордера исполняются on-chain через смарт-контракты.

Контракт исполнения

  • CTFExchange.sol отвечает за on-chain исполнение ордеров, проверку подписи и логику комиссий (в текущей версии комиссии равны нулю).

Контракты торговой логики

  • Assets.sol определяет торгуемые активы (USDC и акции исходов).
  • Trading.sol выполняет сделки и эмитит события.

Акции и токены

  • Акции — это ERC-1155 токены, которые представляют позиции по исходам.
  • Используется Conditional Tokens Framework (CTF) от Gnosis.
  • USDC выступает в роли залога для создания и погашения акций.

Структура токенов через CTF

Каждый рынок определяется:

  • questionId (IPFS-хэш вопроса рынка)
  • outcomeSlotCount (в Polymarket всегда 2)
  • адрес оракула (оптимистичный оракул UMA)
    Эти параметры формируют conditionId через keccak256.
    Для каждого исхода создается collectionId через indexSet.
    Итоговый tokenId (positionId) формируется из collectionId и collateralToken.

Что такое Conditional Tokens Framework (CTF)?

  • CTF — фреймворк Gnosis, который хранит состояние рынка через ERC-1155 токены. Каждый исход рынка имеет свой tokenId (positionId), а USDC выступает залогом.

Как вычисляется tokenId (positionId)?

  • tokenId формируется через:
    questionId (хэш вопроса) + outcomeSlotCount (число исходов) + адрес оракула → conditionId → collectionId→ tokenId.

Как работает UMA Oracle в Polymarket?

  • UMA — оптимистичный оракл: любой участник может предложить результат (propose с залогом), и если за 2 часа никто не оспорит, результат фиксируется. При споре запускается dispute и голосование UMA токенхолдеров.

Как происходит финализация и выплаты?

  • После финального результата оракл отправляет reportPayouts в CTF. Держатели победивших акций вызывают redeemPositions, акции сгорают, а USDC возвращается победителям.

Что происходит с проигравшей стороной?

  • Проигравшая сторона получает $0: общий банк рынка делится только между держателями акций правильного исхода.

Let’s Talk

Awards