Рынки и ордера
Рынок ZooBC — это книга ордеров для одной пары активов, которую ведёт и сводит сама цепочка. Каждый узел применяет одни и те же правила сведения при применении транзакции с ордером, поэтому каждый узел получает те же исполнения, ни один оператор не держит средства трейдеров и никто не может переупорядочить книгу. Открыть рынок может любой, а оживлённый рынок сам оплачивает свою аренду.
Открытие рынка
Рынок — это пара (базовый актив, котируемый актив): например, токен как базовый актив, оцениваемый в ZBC как котируемом. Пара упорядочена, поэтому (A, B) и (B, A) — два разных рынка. У обоих активов должно быть 8 знаков после запятой (см. Знаки после запятой и шаг).
CreateMarket (тип 21) стоит market_creation_cost, 50 ZBC в mainnet. Эта сумма становится арендным депозитом рынка (см. ниже).
Размещение ордера
PlaceOrder (тип 22) указывает рынок, сторону (покупка или продажа), лимитную цену, количество, флаги и необязательный срок истечения. Флаги могут сделать его рыночным ордером (исполнить немедленно или отменить) или ордером только для размещения в книге (post-only).
Цены выражаются в атомарных единицах котируемого актива за атомарную единицу базового, умноженных на 10⁸. Поэтому цена 1,015 ZBC за токен записывается как 101 500 000.
Когда блок применяет ордер:
- Ордер удерживает то, что может потратить: ордер на продажу удерживает своё количество базового актива; ордер на покупку — количество × цена ÷ 10⁸ котируемого.
- Он сразу сводится со стоящими в книге ордерами противоположной стороны — сначала по лучшей цене, а при равных ценах сначала с меньшим идентификатором транзакции. Каждое исполнение проходит по цене стоящего в книге ордера, а не по лимиту тейкера.
- То, что не исполнено, остаётся в книге, кроме рыночного ордера, остаток которого возвращается.
Каждое произведение округляется вниз в 128-битной арифметике, поэтому каждый узел вычисляет в точности одни и те же исполнения.
Два правила поддерживают чистоту книг ордеров: стоимость ордера в котируемом активе должна быть не меньше 2 500 000 атомарных единиц (0,025 котируемого актива), и тейкер никогда не исполняется против собственного стоящего в книге ордера.
Комиссия тейкера
Торговую комиссию платит только тейкер: exchange_taker_fee_bps, 10 базисных пунктов (0,1 %) в mainnet, удерживается из актива, который получает тейкер (базового при покупке, котируемого при продаже), и выплачивается производителю блока. В примере выше 0,3 из 300 полученных токенов уходят производителю. Ставка — параметр цепочки, который может составлять от 1 до 100 базисных пунктов. Мейкеры торговую комиссию не платят, и создатель рынка доли не получает.
Комиссия тейкера отделена от комиссии за транзакцию. Комиссии PlaceOrder и CancelOrder — обычные комиссии, которые идут в лотерею coinbase. Когда производитель блока ещё не зрел (см. Зрелость и доходы), его комиссия тейкера тоже уходит в лотерею coinbase.
Отмена и истечение срока
CancelOrder (тип 23) позволяет мейкеру, и только ему, отозвать стоящий в книге ордер; то, что осталось от его удержания, возвращается. Стоящий в книге ордер со сроком истекает в начале блока, по метке времени предыдущего блока.
Аренда рынка
Рынок занимает место в состоянии цепочки, поэтому платит аренду, как и всё остальное, что его занимает:
- 50 ZBC стоимости создания — это депозит, предоплачивающий 12 периодов аренды; каждый период из 172 800 блоков (30 дней) забирает двенадцатую часть, около 4,17 ZBC, в пул долголетия;
- каждая PlaceOrder и CancelOrder добавляет в депозит 20 % собственной комиссии, сверх комиссии, пока депозит не достигнет 24 периодов, так что сами ордера поддерживают финансирование оживлённого рынка;
- рынок, который не может оплатить период или один из активов которого истёк, удаляется: его стоящие в книге ордера возвращаются мейкерам, остаток депозита уходит в пул долголетия, а пару позже можно открыть снова.
Пулов автоматических маркетмейкеров в ZooBC нет: каждая сделка заключается между ордерами, которые размещают люди. Для разовой сделки с любыми двумя активами, включая токены менее чем с 8 знаками после запятой, см. Предложения обмена.