Ненадежность рыночных ордеров

Предисловие. Довольно интересная статья была написана CTO ari kardasis компании The Ocean, поэтому я решил ее перевести, т.к. проблемы децентрализации торговых платформ пока не особо освещаются, относительно проблем тех же криптовалют. Конечно, некоторые вещи пришлось добавлять от себя, потому что словарный заказ финансовой сферы, как мой, так и словарей, оказался довольно скуден. Также статья содержит огромное количество оговорок, чтобы русскому читателю было понятно, о чем идет речь, или так, где не понял о чем идет речь и я сам. Приятного чтения. Источник.

С появлением децентрализованной экономики мы видим широкий спектр ненадежных торговых платформ, таких как DEX’ы [Пр.И. децентрализованные биржи], доски объявлений [Пр.И. да-да, простые доски объявлений с продажей домов, авто и прочих вещей, только оплата производится исключительно криптовалютой] и ретрансляторы, которые позволяют торговать между кошельками с использованием криптографически подписанных ордеров. Эти ордера стремятся как можно быстрее обменять некоторое фиксированное количество одного токена на фиксированное количество другого.

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

В основном, это достигается с помощью протокола 0x, однако описанные здесь проблемы и решения распространяются на любой протокол, который реализует данное поведение. Аналогичные проблемы будут решаться у

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

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

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

    Что такое рыночный ордер?

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

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

    • рыночных [Пр.И. т. е. выполняемых моментально, по имеющейся наилучшей цене на данный момент]

    или

    • лимитных [Пр.И. выполняемых уже не моментально, а при достижении определенной цены на рынке] ордеров.

    Существует множество способов достижения рыночных ордеров, и все они имеют некоторые преимущества и недостатки. Мы подробно рассмотрим некоторые подходы ниже.

    Пример рыночного ордера

    • Скажем, трейдер Алиса хочет купить 10 бананов. Она создает рыночный ордер на покупку 10 бананов и отправляет его на банановую биржу.
    • В биржевом стакане на продажу содержится ордер другого трейдера, Боба, на продажу 20 бананов по цене $0.10 / банан.
    • В данном примере ордера подобраны так, что новый рыночный ордер (Алисы) соответствует половине не погашенного лимитного ордера (Боба), соответственно получается, что Алиса покупает у Боба 10 бананов на общую сумму $1.
    • Затем, предположим, что третий трейдер, Крис, приходит и хочет купить 20 бананов. Бобу осталось продать только 10 бананов, которых недостаточно Крису поэтому он продолжает искать следующее наилучшее предложение. Оно находится у Донны, которая продает 10 бананов по $0.12 за штуку.
    • Теперь рыночный заказ Криса на 20 бананов совпадает с заказом Боба на 10 бананов по $0.10 за штуку и заказом Донны на 10 бананов по $0.12 за каждый.
    • По итогу, совокупный рыночный ордер Криса составляет $2.20 за 20 бананов.

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

    Существует некоторая двусмысленность в том, как используется термин лимитный ордер. Когда мы говорим о лимитном ордере, он может быть полностьючастично или не сразу заполняемым (FIF, PIF или NIF).

    • Если это FIF, то это фактически рыночный ордер, так как он сопоставляется с существующими лимитными ордерами.
    • Если это NIF, то механизм подбора соответствий создает целевой ордер и помещает его в биржевой стакан.
    • Если это PIF, то это рыночная и целевая часть. Мы создаем и заполняем рыночный ордер, и целевой ордер помещается в биржевой стакан.

    Справедливости ради стоит сказать, что рыночный ордер — это частный случай лимитного ордера с бесконечно высокой или низкой ценой лимита.

    Наилучшая цена

    Я использую термин “наилучшая цена” который означает, что биржа дает наилучшую доступную на данный момент цену трейдеру, который создает рыночный ордер. Это будет достигнуто путем прямого сопоставления двух трейдеров вместе, как в примере выше. Это применимо при размещении агрессивного (т.е. PIF / FIF) лимитного ордера, так как трейдер указал, что они будут платить более высокую цену, чем наилучшая доступная цена.

    Ненадежность и рыночные ордера

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

    Тем не менее, для того, чтобы рыночный ордер не нуждался в доверии, Крис должен криптографически подписать соглашение о точной цене, которую она готова заплатить. Это может оказаться довольно трудно, когда у вас есть несколько трейдеров, пытающихся взять те же самые ордера. Если в вышеуп��мянутом примере, Крис решает сделать свой рыночный ордер, она создаст и подпишет ордер, чтобы купить 20 бананов на уровне 2.20$ и отправит его на биржу, которые должны быть сопоставлены с заказами Боба и Донны.

    Если бы Крис знала точное состояние биржевого стакана и могла бы общаться с биржей мгновенно, то не было бы никакой проблемы. Она могла создать рыночный ордер, покупая 20 бананов за 2.20$, подписать его и послать его на биржу, для выполнения. Однако зачастую может выйти иначе. Вероятнее всего, что к тому времени, когда она получит обновленный биржевой стакан, создаст, подпишет и пошлет рыночный ордер, и биржа его получит — предполагаемые ордера будут недоступны, или появятся некоторые наилучшие ордера. В этом случае цена рыночного ордера, который она подписала, больше не соответствует сумме ордеров в биржевом стакане, и возникает проблема.

    Существующие подходы

    Существующие подходы ретрансляторов 0x присутствуют в нескольких разновидностях. Большинство (а возможно и все) ретрансляторы работают под стратегией как открытый биржевой стакан или подбор соответствий, и они используются в каждой бирже, для получения рыночных ордеров:

    Открытый биржевой стакан — Radar Relay, ERC Dex, Bamboo и т. д.

    • Как описано в wiki 0x, открытый биржевой стакан является «самой простой и наиболее очевидной стратегией» для поддержания биржевого стакана. Короче говоря, нет рыночных ордеров. Каждая сделка включает в себя приня��ие всех или только некоторого одного, и только одиного, лимитный ордера. Трейдер может принять ордер с лучшей доступной ценой, так как они должны, или они могут принять любой ордер, который они хотят. Например, они могут не захотеть торговать с определенными сторонами по юридическим причинам. Рыночный ордер может быть эффективно достигнут путем принятия нескольких ордеров из верхней части биржевого стакана в последовательности до тех пор, пока желаемая сумма не будет проторгована. Это неэффективно в том, что он потребляет gas для каждого из ордеров и возлагает бремя поиска соответствий на трейдера, а не на биржу.
    Пр.И. Пример взятый с той же wiki 0x. Представим, что Алиса посылает ордерA на продажу 1 WETH в обмен на 1000 ZRX ретранслятору, который использует Чарли. Боб видит заказ в биржевом стакане Чарли и вызывает функцию контракта (заполнить заказ) fillOrder(ордерA, 1000), используя свой собственный локальный узел. 1000 ZRX Боба обмениваются на 1 WETH Алисы.

    Подбор соответствий, Исполнение-По-Фиксированной цене — DDEX

    • Используя стратегию подбора соответствий, механизм подбора соответствий может быть реализован таким образом, что все ордера, которые представлены, являются лимитными ордерами с конечной ценой, и когда есть перекрытие цены, ретранслятор соотносит ордера и выполняет сделку. Лимитные ордера редко имеют идеальное совпадение цен, и ретранслятор не будет торговать в убыток, поэтому любое расхождение в цене сохраняется в общем адресе тейкера (покупателя), который является ретранслятором. На практике перекрытие цены может быть сведено к минимуму, но не устранено. Это правдоподобный подход в относительно волатильные и неликвидные первые дни децентрализованной торговли, но по мере повышения эффективности цен, эти ошибки становятся менее приемлемыми.
    Пр.И. Пример взятый с той же wiki 0x. Он описывает стратегию подбора соответствий
    Допустим, что Алиса посылает ордерA на продажу 1 WETH в обмен на 1000 ZRX ретранслятору, который использует Чарли. Боб подает ордерB на продажу 1000 ZRX в обмен на 1 WETH Чарли. Чарли вызывает функцию BatchFillOrKill (партийная заливка или уничтошение) batchFillOrKillOrders(ордерA, 1000, ордерB, 1), обменивая Алисе 1 WETH на 1000 ZRX Боба.

    Подбор соответствий, Завышение цены/Возврат — Paradex

    • У Paradex было уникальное решение этой проблемы, которое заключалось в использовании исполнения по фиксированной цене выше, но с добавлением возврата трейдеру, который разместил рыночный ордер, при условии, что стоимость транзакции для этого возврата была меньше, чем сам возврат. Хотя это решает проблему наилучшего исполнения, он вводит дополнительную транзакцию, которая стоит газа, и она требует, чтобы трейдер доверял бирже.

    Намерение/Резервирование

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

    • Трейдер представляет свое намерение сделать рыночный ордер, указав сумму, за которую он хотел бы купить или продать.
    • Механизм подбора соответствий выполняет проверку, а затем сканирует биржевой стакан, чтобы найти наиболее выгодные заказы, с которыми можно сопоставить представленное намерение сделать ордер на определенную сумму.
    • Эти заказы размещаются в резервировании, не дающем другим трейдерам их принимать.
    • Механизм подбора соответствий составляет точную стоимость для выполнения рыночного ордера по самой выгодной цене и заполняет ордер 0x с соответствующими деталями.
    • Этот ордер возвращается трейдеру, который делает рыночный ордер, и они его подписывают.
    • Подписанный рыночный ордер возвращается в механизм подбора соответствий, который будет отправлен сети Ethereum вместе с заказами, которые были размещены в резервировании. Они отправлены контракту 0x, используя BatchFillOrKill(ПартийнаяЗаливкаИлиУничножение), чтобы гарантировать, что если хотя бы один ордер не выполнен, то не выполнятся и остальные.

    Проницательные читатели могут спросить, что произойдет, если пользователь решит не подписывать заказ, который им был предоставлен. Чтобы справиться с этой ситуацией, которую мы назвали «отслаивания», мы создали систему репутации, которая налагает штрафы на трейдеров, которые ведут себя ненадлежащим образом (путем «отслаивания» или иным образом ведут себя безответственно).

    Мы считаем, что система намерение/резервирование хорошо работает с нашей корпоративной философией в несколько направлений:

    • Это обеспечивает лучшее ценообразование, которое мы считаем необходимым компонентом справедливого и устойчивого рынка.
    • Это требует подотчетности пользователей, которую мы можем достичь, потому что у нас есть учетные записи пользователей в рамках нашего соблюдения KYC/AML.
    • Дополнительное «общение» с сервером обеспечивает неявное повышение скорости, которое ограничивает предполагаемые ценовые манипулятивные торговые практики.
    • Мы верим в дизайн и инженерию на самом высоком уровне. Реализация этого механизма сопряжена со значительными трудностями, которые мы взяли на себя, поскольку мы привержены идее создания наилучшего продукта, и мы считаем, что мы это сделали.

    Дальнейшее исследование

    Пока мы убеждены в том, что подход намерение/резервирование относительно ненадежных рыночных ордеров является масштабируемым и прочным решением, мы также активно заняты улучшением нашего механизма подбора соответствий, чтобы предотвратить возможность «отслаивания» (трейдеров за ненадлежащее поведение) и уменьшить затраты на gas. С предстоящим выпуском 0x v2 мы видим несколько возможных путей развития, включая форвардные контрактыумную воронку и, в конечном итоге, решение на основе канала/плазмы, которое позволит в разы повысить скорость и эффективно использовать gas. Это первые дни децентрализованной экономики, и мы очень рады участвовать в их решении ее проблем.

    Пр.И. Решения на основе канала и плазмы — решения масштабируемости сети Ethereum. Я нашел краткое описание того что это все такое, поэтому переведу здесь.
    Plasma
    Plasma стремится масштабировать транзакции, создавая боковые цепи, которые взаимодействуют с основной цепью только время от времени. Плазменные цепи могут быть даже вложенными (да, как начало). Плазма активно разрабатывается OmiseGo. С точки зрения комиссии и латентности (скорости) Плазма, вероятно, уступает Raiden (еще одно решение), но она имеет более широкий спектр использования. Плазменные цепи должны быть защищены «доказательствами мошенничества».
    Generalized State Channels
    Идея состоит в том, что обобщенный канал состояния может выполнять несколько действий между двумя сторонами, при этом только начальное и окончательное урегулирование происходит в главной цепи. Обобщенные каналы состояния лучше всего работают там, где взаимодействующие стороны несколько постоянны.




    Также, подписывайтесь на меня в твиттере :) Не стесняйтесь задавать вопросы, если что-то остается непонятным.

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