# Протокол WX Network
# Мотивация
Потребность в конвертации токенов возрастает с ростом числа криптовалют. Одной из главных особенностей среды блокчейна является децентрализация, но до недавнего времени существовали только централизованные обмены, в том числе для Биткойн или Ethereum. Многие биржи поддерживают покупку и продажу криптовалют, фиатных валют и токенов криптовалюты. Примерами таких централизованных бирж являются Coinbase, BTC-e, ShapeShift и Mt.Gox. Централизация в этой сфере может быть небезопасна по причине единой точки отказа - биржи. При работе централизованных бирж все средства пользователей должны храниться в одном месте для участия в торговле. Средства пользователя хранятся непосредственно на самой бирже, которая отвечает не только за сопоставление ордеров и поддержание текущей книги ордеров в корректном состоянии, но и за сами средства вкладчиков. Крах Mt.Gox - самый яркий пример того, почему такая схема ненадежна. Потери этой биржи после компрометации составили около 650 000 BTC. Если злоумышленник взламывает систему обмена, все пользователи потеряют все средства, потому что их закрытые ключи хранятся централизованно - что и произошло в случае кражи из BTC-e. Это далеко не единственный пример, когда биржи потеряли средства вкладчиков подобным образом. Децентрализованный подход к обмену помогает избежать проблем, вызванных вмешательством злоумышленников в работу биржи.
# Децентрализованная биржа
Децентрализованные биржи не требуют от пользователей доверять им свои средства: кошелек пользователя не контролируется ни одной организацией. Ордера подписываются цифровыми подписями владельцев напрямую, в процессе авторизации. Пользователи контролируют свои средства, но децентрализованные биржи имеют недостаток, который заключается в том, что торговля происходит не в реальном времени, как на централизованной бирже.
На децентрализованной бирже для ордера, который проверяется и помещается в книгу ордеров, любой другой пользователь может добавить контр-ордер с цифровой подписью и отправить полную транзакцию с парой ордеров в блокчейн. Затем активы передаются между покупателем и продавцом. Если все компоненты биржи децентрализованы, то автоматическое сопоставление ордеров на покупку и продажу отсутствует - эти операции также должны выполнять пользователи.
Из-за отсутствия автоматического сопоставления и быстрой отмены существует уязвимость также и для майнинга. Генератор следующего блока всегда будет иметь возможность выполнить отмененные ордера с собой в качестве контрагента, потенциально получая прибыль от такого ордера.
Решение этой проблемы заключается в децентрализации не всех компонентов обмена, а только той части, которая отвечает за сопоставления ордеров. Этот вариант устранит описанные выше проблемы. В отличие от централизованных бирж, децентрализованное решение с централизованным сопоставлением ордеров в случае взлома не приведет к потере депозитов пользователей.
# WX Network
WX Network обеспечивает торговлю различными активами как традиционная биржа, но при этом предоставляет большую безопасность для участников из-за децентрализованного характера работы. Возможность создавать новые токены на основе WAVES позволяет на раннем этапе торговать краудфандинговыми активами, обеспечивающими ликвидность токенов.
Торговля в режиме реального времени достигается благодаря единственному централизованному элементу WX Network - книге ордеров Матчера, которая сопоставляет входящие ордера и совершает сделки с высокой скоростью, обычно в течение миллисекунд. Чтобы узнать, была ли сделка успешно выполнена, нет необходимости ждать следующего блока. WX Network сочетает скорость на уровне централизованного обмена и безопасность децентрализованного протокола.
При работе WX Network ордера попарно связаны нодами, выполняющими функцию Матчера. Матчер может сводить ордера частично. Прежде чем попасть в блокчейн WX Network, транзакции обмена всегда проверяются нодами на предмет соответствия цен в ордерах. После этого Матчер создает транзакцию обмена, подписывает её и помещает в блокчейн для внесения изменений в балансы пользователей. После подтверждения транзакции подпись Матчера проверяется генерирующими нодами, и биржевая транзакция добавляется в блокчейн. Остатки активов на счетах пользователей изменяются в соответствии с суммой и ценой исполнения ордера. Важным моментом является то, что средства переводятся только после публикации в блокчейне. В случае сбоя Матчера обмен не состоится, но средства не будут потеряны, поскольку биржа не владеет активами клиента.
# Алгоритм матчинга
Пользователь инициирует свою готовность покупать или продавать активы, создавая, подписывая и отправляя лимитный или марктеный ордер на узел Матчер. Подробнее про лимитный и марктеный ордер в секции Order статьи Matcher API.
Лимитный ордер в данном примере такой же, как и на других биржах: ордер на покупку (продажу) фиксированного количества токенов по цене, равной или лучшей, чем указанная. Когда новый ордер отправляется в WX Network, все его поля валидируются, а подпись проверяется открытым ключом отправителя. Затем в отношении ордера выполняются следующие проверки: ордер с таким идентификатором не должен существовать, и сумма всех ордеров для конкретного актива должна быть меньше или равна остатку этого актива на счете отправителя. Схема работы приведена на Рисунке 1:
Пользователь может установить срок действия (maximum timestamp) для ордера, по истечению которого ордер будет автоматически отменен. Лимитные ордеры старше 30 дней будут автоматически отменены, в то время как маркетные ордеры не имеют срока действия. Срок действия ордера задается в момент подписания ордера. Срок действия представляет собой значение типа long - количество миллисекунд с начала эпохи Unix. Когда ордер не выполнен и срок его действия превышает текущее Unix-время, он может быть отменен пользователем. В этом случае ордер попадает в блокчейн как аннулированный ордер, который невозможно выполнить.
Каждый ордер имеет определенное состояние, в зависимости от стадии его жизненного цикла. Когда ордер находится в книге ордеров, но еще не заполнен - он имеет состояние «Принят». Также ордер может иметь состояние «Заполнен», «Частично заполнен» или «Отменен». Ордера, которые не полностью заполнены, могут быть отменены, после чего ордер будет удален из книги ордеров матчера.
# Расчёт цены
Новый отправленный ордер сопоставляется с ордерами в книге ордеров, если существует ордер с ценой, которая лучше или равна заданной.
- Для 'BUY' ордеров "лучше" означает, что есть соответствующий 'SELL' ордер с ценой <= заданной.
- Для 'SELL' ордеров "лучше" означает, что есть соответствующий 'BUY' ордер с ценой >= заданной.
Цена исполнения транзакции обмена всегда определяется ценой ордера, который был принят ранее, то есть ордера, который уже находится в книге ордеров.
# Полное выполнение
Если для заданного ордера не существует встречного ордера, соответствующего цене (эта цена равна "равно" или "лучше"), этот ордер будет размещен в соответствующей книге ордеров и будет оставаться открытым до тех пор, пока не будет выполнен или до достижения времени, указанного в параметре
maxTimestamp
.Если встречный ордер соответствует отправленному ордеру, он исполняется. Это означает, что встречный ордер удаляется из книги ордеров, создается и подписывается закрытым ключом Матчера транзакция обмена и отправляется в сеть Waves для добавления в цепочку блоков.
Если есть несколько ордеров, которые соответствуют новому ордеру, выбирается самый ранний, основанный на времени принятия.
# Частичное выполнение
Если сумма отправленного ордера достаточно велика для выполнения нескольких ордеров, Матчер создает несколько транзакций обмена, суммы которых совпадают с соответствующими суммами встречных ордеров. Совпадающие встречные ордера выбираются в порядке времени их принятия (First In, First Out).
Если после выполнения всех встречных ордеров все ещё остается сумма от заданного ордера, для выполнения ордеров используется следующий ценовой уровень книги ордеров, удовлетворяющий входящей цене. Для всех совпадающих встречных ордеров соответствующая транзакция обмена создается аналогично предыдущему шагу.
Если после всех совпадений, описанных в предыдущих шагах, остается сумма из поданного ордера, и нет других открытых ордеров, соответствующих цене, новый ордер помещается в книгу ордеров с оставшейся суммой из начального ордера.
Если первый совпадающий ордер в книге ордеров имеет сумму, превышающую отправленный, то будет создана транзакция обмена с суммой, равной входящему ордеру. Частично выполненный встречный ордер будет заменен оставшейся суммой в книге ордеров.
# Расчёт комиссии Матчера
См. статью Комиссия матчера.
# Торгуемый баланс
Торгуемый баланс показывает, сколько вы можете потратить в ордерах. Он рассчитывается по формуле:
tradable_balance(asset) = balance_of_asset -
spendings_of_asset_in_transactions_in_utx_pool -
reserved_balance_for_asset
# Баланс токена
Текущий баланс в валюте:
- WAVES
- токены
# Расходы активов в транзакциях в UTX пуле
Если вы передаете WAVES и отправляете транзакцию данных и эти транзакции еще не сформированы, траты WAVES в транзакциях UTX-пула будут равны количеству переведённых WAVES плюс комиссия за транзакцию перевода плюс комиссия за транзакцию данных.
Примечание: UTX пул одной ноды не может быть идентичен UTX пулу другой ноды.
# Резервный баланс для активов
Резервный баланс для активов также известен как open volume. Представляет собой сумму всех расходов по активу всех ордеров в паре с этим активом.
Например, при покупке BTC by Bitcoin Cash
(1) и продаже Bitcoin Cash for WCT
(2), когда эти ордеры всё ещё активны и не выполнены, значение трат Bitcoin Cash в активных ордерах будет равно количеству трат Bitcoin Cash (1) плюс количеству продаваемых Bitcoin Cash (2).
Примечание: Для WAVES стоимость ордера включена в резервный баланс.
Для оплаты всех ордеров в WX Network требуются WAVES. Из-за этого есть исключение из правила, о котором мы говорили выше.
Если вы покупаете WAVES за другой актив, зарезервированный баланс WAVES в этом порядке будет max(fee - amount_of_received_waves_in_this_order, 0)
.
Таким образом, вы можете купить WAVES за BTC, даже если у вас нет WAVES.