Как стать автором
Обновить
109.19
MetaLamp
Доступно рассказываем о web3 и блокчейне

Как устроен DEX на OrderBook

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров3.1K

Привет! На связи – Павел Найданов, блокчейн-разработчик в MetaLamp.В этом материале я расскажу o том, как типичный для сферы классических финансов инструмент OrderBook прижился в мире web3.

На протяжении нескольких лет я изучаю тонкости устройства web3 продуктов и собираю ценную информацию для себя и будущих коллег в формате мини-энциклопедии. Вместе с коллегами я готовлю wiki-статьи для нашей бесплатной карты развития по предметке web3. И часть материалов мы решили адаптировать, чтобы сделать мир крипты доступным для более широкого круга читателей. Это вторая статья из цикла, посвященного устройству децентрализованных обменников. В прошлом выпуске мы с коллегами – Алексеем Куценко и Романом Ярлыковым – разбирались в устройстве DEX на AMM с наглядными примерами и расчётами. В этой статье приглашаю рассмотреть альтернативу автоматических маркет-мейкеров – DEX на OrderBook. 

Зачем в сфере web3 понадобился OrderBook?

OrderBook, или книга заявок – это инструмент, который изначально применялся в традиционных финансах для удобства обмена на валютном или фондовом рынках. Order Book представляет собой перечень заявок на покупку или продажу активов, сортированных по цене. 

На первый взгляд, перенос такого инструмента из сферы централизованных финансов в мир DEX кажется нецелесообразным из-за финансовой стороны вопроса. Поскольку полностью on-chain orderbook будет требовать плату за газ при записи любых данных о сделке в сети, реализация такого обменника обойдется недешево. 

Но если принять во внимание ту дополнительную гибкость и функциональность, какую может обеспечить orderbook для DEX и сопоставить её с AMM, становится очевидной его актуальность. 

От AMM обратно к OrderBook

В DEX на AMM стоимость токенов формируется при помощи математических формул. Для обмена одного токена на другой пользователь взаимодействует со смарт-контрактом (P2C), который обычно хранит в своем пуле ликвидности токены в качестве резервов для обмена. На основе общего количества токенов в пуле рассчитывается стоимость одного токена относительно другого по формуле:

K = X * Y

Два токена в пуле ликвидности образуют ликвидную пару (или торговую пару). Пул ликвидности пополняют токенами пользователи – поставщики ликвидности, которые получают за предоставление своих токенов вознаграждение.

В DEX на AMM действует такая закономерность: если пользователь забирает какой-либо токен, то его цена незначительно вырастает, поскольку количество этого токена в пуле уменьшается. Если пользователь вкладывает токен, то его цена незначительно падает, т.к. токена в пуле становится больше.

Немного нелепо, не правда ли? Когда пользователь совершает обмен при помощи любого обменника, он приносит один токен и забирает другой. Это значит, что цена одного актива вырастет, а цена другого упадёт.

Но есть один нюанс, который влияет на работу обменника: любой пользователь стремится к максимальной выгоде.

В DEX на AMM пользователь всегда платит за обмен токенов столько, сколько в данный момент AMM рассчитал по формуле. Для выгодного обмена пользователь может либо поискать обменник с более приемлемой ценой, либо попробовать поймать момент, когда соотношение токенов в пуле изменится настолько, что токен можно будет обменять по желаемой цене. 

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

Почему торговля – это больше, чем простой обмен?

Тратить время на поиск выгодного обменника или «ждать у моря погоды», а точнее подходящего курса – занятие для бессмертных? Когда пользователь знает, за сколько он намерен купить/продать токен, он ищет простой и понятный для этого инструмент. 

Давайте для наглядности проведем аналогию с продажей дома. Как продать дом выгодно? Можно искать объявления о покупке дома и отвечать на них: это трудоемко и хлопотно. Можно искать покупателей повсюду. Но наиболее логичный ход – разместить объявление о продаже дома на специальной площадке, на которую люди уже приходят в поисках предложений о продажах недвижимости. Так вероятность встретить покупателя, готового приобрести дом по желаемой цене, будет в разы выше. 

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

  • отложенный обмен;

  • обмен с дополнительными объёмами средств;

  • обмен с предустановленными условиями выполнения.

Получается, что сам обмен токена — это малая часть полноценной торговли, а само понятие торговли гораздо шире. Оно включает в себя целый перечень дополнительных инструментов. Увы, DEX на AMM таких инструментов не поддерживает: об автоматизации отложенного процесса обмена с дополнительными объёмами активов не идёт и речи.

DEX на AMM подходит для быстрого и удобного обмена токенов по рыночной цене: здесь и сейчас. Его преимущество – отсутствие централизованного управления: пользователь взаимодействует напрямую с контрактом обменника, минуя любых посредников.

Как устроен OrderBook

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

Более гибкий DEX может быть организован на базе orderbook. Реализация решения будет сопряжена с большими сложностями, но вполне возможна. Конкурентоспособным такой обменник можно сделать, если минимизировать количество транзакций для оптимизации оплаты за газ.

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

Как работает OrderBook?

OrderBook можно представить в виде коробки, в которую упакованы все предложения о покупке и продаже токенов. Причем, не хаотично, а в определённом порядке. Проще говоря, это упорядоченный список заявок на продажу и покупку токенов. Этот список включает только текущие, открытые заявки. Закрытые или архивные заявки относятся к историческим данным и orderbook о них ничего не знает.

Что такое ордер? Так называется любая заявка на покупку или продажу в orderbook. Если создать ордер, который не выполнится сразу, он автоматически попадет в orderbook и будет оставаться там до тех пор, пока не будет выполнен или отменён.

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

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

Создать ордер может любой пользователь. Главное — наличие необходимого количество токена для исполнения этого ордера.

Такой процесс выглядит следующим образом.

  1. Пользователь хочет купить большое количество токена в DEX за один раз.

  2. Он видит рыночную стоимость токена и понимает, что для него в данный момент это дорого. Особенно, если учитывать, что он собирается купить сразу много.

  3. В самом orderbook нет соответствующего ордера на продажу токена по доступной для пользователя цене.

  4. Тогда пользователь принимает решение создать отложенный ордер, который попадёт в orderbook.

  5. Пользователь создаёт ордер, указывает в нём желаемую цену и необходимое количество токена.

  6. После подтверждения ордер попадает в orderbook и становится доступным для исполнения любым пользователем.

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

  8. Продавец находит ордер покупателя и исполняет его. Он отправляет в DEX необходимое количество токена для покупателя.

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

  10. Ордер закрывается.

Обязательства продавца и покупателя выполнились под полным контролем DEX. Покупатель получил указанное в ордере количество токенов за указанную цену.

? Интересно, что с технической стороны, отличия между ордером на продажу и покупку нет. 

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

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

Ликвидность. Мейкеры и тейкеры

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

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

Пользователи, которые создают отложенные ордера, называются мейкерами. А пользователи, которые исполняют ордера незамедлительно, называются тейкерами.

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

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

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

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

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

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

Безопасность гарантируется децентрализацией и прозрачностью, так как orderbookреализуется при помощи смарт-контрактов, и вся информация об ордерах хранится в блокчейне.

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

Depth of Market and Candlestick chart

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

В формате таблицы orderbook выглядит примерно так:

Такое представление в виде таблицы предложений на покупку/продажу часто называют биржевым стаканом (англ. DOM, Depth of Market). Биржевой стакан выглядит как красно-зелёная вертикальная таблица.

Каждая строка в таблице описывает отложенный ордер. Зеленые строки — это список ордеров на покупку. Красные строки отображают список ордеров на продажу.

На картинке эта таблица статична, но в жизни она постоянно меняется, отражая рыночную активность. Другими словами, DOM — это динамическая таблица, которая постоянно обновляется в режиме реального времени. В левом и правом столбцах отображается объём ордера, а в нашем случае — это количество токенов на продажу или покупку.

Как читать такую таблицу?

Рассмотрим на примере изображённой таблицы. Самая нижняя зеленая строка означает, что пользователь создал ордер на покупку 4 токенов по 219$. А самая верхняя красная строка означает, что пользователь создал ордер на продажу 2 токенов по цене 220$.

Важно! Биржевой стакан – это один из самых универсальных инструментов для анализа рынка. Он находит применение практически во всех стратегиях и торговых системах. Его используют в качестве фильтра или источника сигнала для совершения сделок.

Но что, если мне недостаточно одного ордера для исполнения? Представим, что я хочу купить 4 токена и я согласен на цену в 221$.

Биржевой стакан показывает, что в продаже есть два токена по цене 220 и 13 токенов по цене 221$. Я куплю два токена по наиболее выгодной цене. Ордер на продажу двух токенов полностью исполнился – он может быть закрыт.

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

Candlestick chart

Orderbook тесно связан с ещё одним инструментом. График свечей (candlestick chart) представляет полезную информацию по текущему и прошлому состоянию рынка.

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

Каждая свеча состоит из нескольких элементов и отображает следующую полезную информацию:

  1. Цена открытия.

  2. Цена закрытия.

  3. Самая высокая цена.

  4. Самая низкая цена.

    Основной прямоугольник в свече называется реальным телом (real body). Он показывает диапазон между ценой открытия и ценой закрытия в выбранный период времени.

    Линии снизу и сверху реального тела называются тенями или фитилями (shadows or wick). Каждая тень обозначает самую высокую или самую низкую цену, предложенную в выбранном периоде времени.

    Когда цена закрытия выше, чем цена открытия, тело обычно окрашено в белый или зеленый цвет. Но когда цена закрытия ниже цены открытия, то тело обычно окрашено в черный или красный цвет.

    Вместе с orderbook график свечей используют для отражения изменения цены токена в момент времени. Например, чем длиннее тело, тем больше предложений продавцов или покупателей. А очень короткое тело указывает на дефицит предложений в данный период времени и, соответственно, очень небольшое движение цены.

Matching engine

Как пользователю ориентироваться в биржевом стакане и графике свечей, когда ордеров становится слишком много? За упорядочивание заявок отвечает специальный инструмент –  система сопоставления (matching engine). С его помощью обеспечивается поиск и выполнение ордеров. Это своего рода мозг обменника, который принимает основные решения по сделке.

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

При обработке созданных ордеров обменник выполняет следующие шаги:

  1. Проверяет правильность данных в созданном ордере.

  2. Создаёт уникальный номер ордера и отметку времени его создания.

  3. Если в orderbook уже есть подходящий ордер, то созданный ордер будет исполнен мгновенно.

  4. Если ордер не может быть исполнен, то он попадает в orderbook и ждёт походящего ордера, чтобы быть исполненным.

Этот пошаговый алгоритм можно представить в виде схемы.

Nota bene! Согласно базовому принципу блокчейн технологии, блоки создаются через определенные промежутки времени, из-за чего сопоставление ордеров происходит с некоторой периодичностью. Если некоторые блоки были пропущены, то в момент сопоставления всех открытых ордеров, ордера, полученные в прошлом, также пройдут через механизм сопоставления. В этом заключается главное отличие работы системы сопоставления в DEX от CEX.

Типы ордеров

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

  1. Рыночные ордера

  2. Лимитные ордера

Рыночный ордер

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

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

Предположим, я хочу купить 2 ETH. Рыночная цена эфира составляет 1600 USDT. Это значит, что в данный момент 1 эфир стоит 1600 USDT. Я готов заплатить эту цену и не хочу ждать снижения цены. Поэтому я могу воспользоваться рыночным ордером.

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

С моего кошелька списывается нужное количество USDT. Взамен я получаю на кошелек купленные эфиры.

Лимитный ордер

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

Например, пользователь хочет продать 2 ETH по цене 1600 USDT. В данный момент ETH стоит гораздо меньше 1600 USDT. Пользователь создаёт отложенный ордер на продажу 2 ETH. Ордер отправляется в orderbook.

Через некоторое время рыночная цена меняется и становится равной 1600 USDT. Тут и прихожу я из примера выше с рыночным ордером. Я готов купить по нынешней рыночной цене. Система сопоставления определяет нас, как наиболее подходящих друг другу покупателя и продавца.

Мой рыночный ордер и отложенный ордер другого пользователя закрываются, потому что его ордер на продажу 2 ETH был также выполнен. В результате я имею на счету 2 ETH. Другой пользователь имеет на счету 3200 USDT. Отложенный ордер удаляется из биржевого стакана.

Market order

Limit order

Мгновенное исполнение по рыночной цене

Исполняется, когда рыночная цена достигает предельной цены

Market taker

Market maker

Используется, когда нужен быстрый обмен

Используется, когда обмен с условиями

Сделка по рыночной цене

Сделка по желаемой цене

Виды лимитных ордеров

Лимитные ордера также делятся ещё на несколько групп. Ниже приведём основные их виды.

  1. Stop order. Это ордера, исполнение которых отложено до выполнения заданных условий. Например, таким условием может быть падение рыночной цены токена на 2%. Стоп-ордера можно разделить ещё на два вида: стоп-лосс и тейк-профит.

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

    NB! Выставление стоп-лосс на 10% для токена, стоимость которого меняется на 30% за неделю, может привести к срабатыванию ордера. После этого цена продолжит рост, но заработать не получится, так как сделка уже закрылась с убытком.

    Представим, что мы купили 1 ETH по цене 1000 USDT. Нам нужно минимизировать риски потери актива на падении цены эфира. Мы можем заранее определить допустимую для нас нижнюю планку стоимости эфира, например, 900 USDT.

    Мы создадим для этого стоп-лосс ордер. Это будет говорить о том, что волатильность курса до 10% относительно цены покупки нас устраивает. Как только рыночная цена достигнет 900 USDT за 1 ETH, лимитный ордер будет моментально исполнен и мы выставим на продажу наш 1 ETH. Ближайший желающий тейкер, который захочет 1 ETH по цене 900 USDT, сможет исполнить наш ордер.

    Тейк-профит действует полностью наоборот: его выставление говорит о том, что закрытие ордера произойдёт при достижении большей цены. Это ограничивает потолок заработка.

    В этом случае всё наоборот. Я приобрёл 1 ETH по цене 1000 USDT. И я хочу заработать 100 USDT. Это составит 10%. Я выставляю тейк-профит на 10%. И, если эфир станет стоить 1100 USDT, то ордер будет предложен к исполнению для тейкеров. А я при его исполнении смогу заработать 100 USDT.

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

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

  1. OCO-ордера (one-cancels-the-other). Этот тип ордера объединяет в себе стоп-лосс и тейк-профит. Разница в том, что один ордер содержит в себе два условия одновременно.

Представим, что мы купили 1 ETH по цене 1000 USDT. Мы хотим получить выгоду в 10% автоматически и обезопасить себя от падения стоимости эфира. Мы создаём ордер, в котором прописываем два условия. Это условие роста цены на 10% и падения цены на 10%. При достижение любого из этих условий, ордер будет автоматически переведён на исполнение.

  1. GTC-ордера (good till canceled). Этот тип ордера действует до его отмены или исполнения. Обычно обменники используют его по умолчанию, когда пользователь создаёт лимитный ордер.

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

    Представим, что мы хотим купить эфир ниже рыночной стоимости. Создаем GTC-ордер, выставляем время жизни. Например, одни сутки. Дальше ждём своего тейкера, который может исполнить ордер. Если по истечении суток ордер не будет исполнен, то он будет переведён в архивные и автоматически будет считаться закрытым. Такой ордер больше не будет учитываться системой сопоставления.

  1. IOC-ордера (immediate or cancel). Этот тип ордера должен быть исполнен мгновенно, почти как рыночный. Разница в том, что если ордеру не хватает предложения согласно его заявке, то он исполняется частично и закрывается.

    Я создам IOC-ордер на покупку 2 ETH по цене 1500 USDT. Но я помню, что могу получить не полную сумму. Если в биржевом стакане сейчас есть предложение о продаже только 1 эфира по цене 1500 USDT, ордер будет всё равно закрыт мгновенно и я получу только 1 ETH.

  2. FOK-ордера (fill-or-kill). Этот тип ордера является оппозицией IOC-ордеру. Ордер также должен быть исполнен мгновенно, но если ордеру не хватает предложения, то он аннулируется, то есть не исполняется и закрывается полностью неисполненным.

    Создам FOK-ордер на покупку 2 ETH по цене 1500 USDT. При нехватке предложений о продаже по этой цене, мой ордер будет закрыт мгновенно, и я не получу эфира вообще.

Реализация простого OrderBook

В самом базовом исполнении контракт SimpleOrderBook должен уметь:

  • создавать ордер на продажу токена и фиксировать всю важную информацию об этом ордере;

  • выдавать информацию об ордере по его ID;

  • продавать токен, который выставлен на продажу, и при этом закрывать такой ордер полностью, если выкуплены все токены;

  • отменять ордер, удалять всю информацию об ордере по его ID;

  • бросать соответствующие события при изменении состояния контракта и обрабатывать ошибки, которые могут возникнуть из-за некорректно переданных данных.

На GitHub можно посмотреть мой пример реализации контракта SimpleOrderBook.

Выводы

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

Альтернатива – создание обменника на базе orderbook. Реализация такого обменника не только сохраняет все прелести децентрализации в виде безопасности хранения средств, анонимности сделок, отсутствия необходимости верификации и т.п. Orderbook предоставляет пользователю больше возможностей для профессиональной торговли за счёт дополнительных инструментов. С DEX на Orderbook можно не тратить время на поиски предложений токенов с релевантной ценой: можно самому управлять процессом покупки/продажи активов, создавая заявки и закрывая подходящие ордера. 

Для реализации отложенных операций используются лимитные ордера. Для реализации торговли с увеличением объема торговли применяется инструмент маржинальной торговли. Но это уже отдельная история.?

Суть альтернативного решения: при должной реализации, orderbook позволяет сделать из простого обменника полноценную биржу с набором инструментов для профессиональной торговли.

Теги:
Хабы:
Всего голосов 4: ↑4 и ↓0+4
Комментарии6

Публикации

Информация

Сайт
metalamp.ru
Дата регистрации
Численность
51–100 человек
Местоположение
Россия

Истории