Ончейн-матчинг

Книга ордеров NeutronX хранится в состоянии сети, а сводят её валидаторы в каждом блоке. Правила сведения одинаковы для всех участников и проверяются каждым валидатором.

Где происходит сведение

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

Подробнее - в «Архитектуре».

Приоритет

  1. Цена. Лучшая цена исполняется первой.
  2. Блок. На одном уровне цены раньше идёт ордер из более раннего блока.
  3. Порядок в блоке. Внутри одного блока раньше идёт ордер, который раньше стоит в блоке. Полями ордера, включая client_id, очередь не сдвинуть.

Цена сделки

СлучайЦена
Лимитные ордера пересеклись при сведении в блокеЦена ордера, который раньше стоял в книге, если она в коридоре исполнения, иначе цена второго ордера
Рыночный ордерЦена ордера в книге, с которым он сводится
Системные ордера: ликвидации, SL/TP, TWAP, POV, закрытие позицииЦена ордера в книге, с которым он сводится

Цена оракула и mark-цена никогда не задают цену сделки. Они нужны только для маржи, ликвидаций и срабатывания условных ордеров.

Следствие первой строки: ордер, который пересёк книгу позже, получает цену стоявшего в ней ордера, как на любой непрерывной книге.

Ценовые коридоры

КоридорЗначениеЧто ограничивает
Размещение50% от цены оракулаКак далеко от оракула можно выставить ордер
Исполнение1% от цены оракула, 0.5% для BTC и ETHПо какой цене сделка может пройти

Ордер за коридором исполнения стоит в книге и исполнится, когда цена оракула приблизится. Коридоры задаются governance для каждого рынка.

Самоторговля и post-only

  • Самоторговля. Ордер не сводится со встречным ордером того же владельца. Такой ордер пропускается, и сведение идёт дальше по книге.
  • Post-only. Post-only никогда не забирает ликвидность. Если он исполнился бы сразу при размещении или позже из-за движения цены оракула, он отменяется.

Если расчёт сделки не прошёл

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

Лимиты

ЛимитЗначение
Минимальный размер ордера10 USDC
Открытых ордеров на субаккаунт500
Размещений и замен на адрес за блок30, каждый ордер пакета считается отдельно
Активных ордеров во всей сети500 000