Skip to main content
Сопоставление — стадия внутри исполнения ядра, а не сервис, с которым блокчейн общается. Оно берёт ордера блока в зафиксированной последовательности, проводит их по стакану и порождает исполнения. Оно не двигает ничей баланс — это работа клиринговой палаты, и она идёт после того, как сопоставление закончилось. Именно разделение этих двух вещей делает движок тестируемым. Сопоставление отвечает на вопрос, что против чего сторговалось. Клиринговая палата — на вопрос, сколько это стоит и кто теперь кому должен.

Стакан

У каждого инструмента свой стакан, который держится в памяти как три взаимодействующие структуры:
Slab arena — одна выделенная область слотов ордеров
Ценовые уровниотображение цена → уровеньвершина находится проходом до конца, а не сканированием
Индекс ордеровid ордера → слототмена и изменение — константное время
ордер
ордер
ордер
ордер
ордер
Двусвязная цепочка в порядке поступления: приоритет внутри уровня позиционный, а не вычисляемый.
Почему порядок слотов фиксированСлоты переиспользуются в фиксированном порядке, индекс — с фиксированным зерном. Не ради производительности: разный порядок слотов у двух валидаторов — это форк.
голова каждого уровня
прямой поиск
Ордера живут в slab arena — заранее выделенной области с константным временем выделения и освобождения. Поэтому операции со стаканом не выделяют память на горячем пути, а освободившиеся слоты переиспользуются в фиксированном порядке, а не там, куда их положит аллокатор. Последняя деталь — не выбор ради производительности: если бы два валидатора переиспользовали слоты в разном порядке, всё, что наблюдает раскладку слотов, разошлось бы. Та же дисциплина применяется к индексу ордеров: он инициализируется фиксированным зерном, а не случайным. Хеш-таблица со случайным зерном на процесс — стандартная защита от атак на коллизии; на пути исполнения консенсуса это форк. Цены всюду целочисленные — в субтиковых единицах, а не в десятичных дробях. Как это соотносится с тем, что вы отправляете, — см. Точность.

Приоритет

Приоритет — сначала цена, затем позиция в цепочке на этой цене. «Время» — это каноническая позиция ордера в зафиксированной последовательности блока, а не момент его прихода на узел. Именно это убирает гонку задержек внутри блока. У двух ордеров в одном блоке есть определённое старшинство, которое каждый валидатор вычисляет одинаково, и никакая близость к конкретному узлу его не меняет. Между блоками момент прихода по-прежнему важен, но единицей соревнования становится блок, а не микросекунда. Порядок стадий в ядре усиливает это: отмены выполняются раньше агрессивных выставлений внутри блока, поэтому котировку в стакане нельзя снять ордером, который попал в тот же блок, что и её отмена.

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

Входящий ордер
Пересекает стакан?
Забрать лучший встречный уровень
Выдать исполнение
Готово
Встать в стакан или отклонить по сроку действияGTC остаётся · IOC отменяет · FOK не исполняет ничего без полного исполнения · «только мейкер» отклоняется вместо пересечения
остаток — следующий уровень
остатка нет
Движок сопоставления раз за разом забирает голову встречной стороны, выдавая исполнение на каждого мейкера, которого он снимает, пока входящий ордер не исчерпан или пока стакан больше не пересекается. Что происходит с остатком, решает срок действия:
  • GTC — оставить остаток в стакане.
  • IOC — отменить остаток.
  • FOK — если ордер нельзя исполнить целиком, не исполняется вообще ничего.
  • ALO — только мейкер: если ордер забрал бы ликвидность, он отклоняется, а не пересекает стакан.
Свою атрибуцию исполнение получает сразу, в момент порождения. Каждое исполнение записывает своё место в последовательности исполнений по своему инструменту, а при сборке выходных данных эти поинструментные позиции сводятся в единый порядок по всему блоку. Именно это позволяет позже проследить событие до точной транзакции и точного места в блоке, которое его вызвало.

Предотвращение самосделок

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

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

Оно не считает комиссии, не реализует прибыль и убыток, не корректирует позиции и не проверяет маржу. Это происходит после сопоставления, в клиринговой палате, на основе исполнений, которые породило сопоставление. Оно также не решает, имел ли ордер право существовать. Достаточность маржи, лимиты на число активных ордеров, ограничения «только уменьшение» и превращение рыночного ордера в лимитный проверяются и отрабатывают до того, как ордер доходит до стакана. К моменту, когда движок сопоставления видит ордер, вопрос только один: где его место в стакане.

Что дальше

Клиринговая палата

Что происходит с балансами и позициями, когда исполнения уже есть.

Типы ордеров

Взгляд со стороны торговли: что можно отправить и как каждый тип себя ведёт.

Стакан заявок

Глубина, уровни и чтение стакана глазами трейдера.

IntentionKernel

Где сопоставление стоит в исполнении блока.