folder Filed in Development, Новости Проекта

Atomic Swap между Bitcoin и Tether возможен

Команда Swap Online провела ресерч такой возможности
Aleksandr Noxon comment 0 Comments

This post is also available in: English (Английский)

Протоколы второго уровня для сети Bitcoin: к истории вопроса

Пионером самой идеи использования сети Bitcoin как “уровня протокола” для “надстройки” над ней вышестоящих протоколов с новыми правилами выпуска и оборота токенов был Д.Р. Уиллет, автор современной схемы ICO. 6 января 2012 года в работе с несколько претенциозным названием The Second Bitcoin Whitepaper он заявил о целесообразности создания таких протоколов, которые по отношению к Bitcoin были бы тем же, чем стал HTTP (или e-mail) по отношению к TCP/IP. Спустя полтора года ему удалось собрать 500 тыс. долларов в биткоинах на реализацию проекта. Проект был назван Mastercoin, как и связанный с ним токен. Осенью 2013 года Виталик Бутерин выступил с подробным обзором Mastercoin, в котором предсказал большое будущее проекту и блестящие перспективы его коммерческому использованию. Уже в начале 2014 года Mastercoin был седьмой по капитализации криптовалютой мира. Год спустя был проведен ребрендинг проекта; сейчас он известен как Omni Layer и позиционируется командой как “протокол поверх сети Bitcoin, позволяющий проводить любые виды сделок с токенами, за которыми стоят любые виды активов”.

USD Tether — эквивалент доллара на Omni Layer

Описанное выше решение с протоколом “над” сетью Bitcoin дало жизнь едва ли не самому спорному криптовалютному проекту последних двух лет — Tether. Tether (символ Tether — ₮, тикер — USDT) — гибридная криптовалюта с привязкой курса к одному доллару США. Причем, по заверениям Tether Limited — эмитента данных токенов — “привязку” здесь стоит понимать буквально: каждому приобретенному токену USDT соответствует один доллар США в распоряжении компании.

В утилитарном смысле, токен USDT обладает массой преимуществ. Как известно, не все криптовалютные обменные сервисы принимают доллары США в силу правовых или операционных причин. С появлением Tether в этом, вроде бы, и нет нужды — то, что трейдер хотел купить за доллар, он отныне может купить за USDT, не теряя деньги на разнице курсов. Более того, даже крупнейшие обменные системы, долго и успешно принимающие фиатные деньги, берут за работу с ними большие комиссии. За переводы между кошельками Tether комиссия не взимается, а сама валюта может храниться в любом кошельке, поддерживающем Omni Layer (к примеру, Holytransaction и т.д.).

Если мы возьмем три крупнейших биржи по суточному обороту сделок на момент написания статьи (Binance, OKEx и HuObi), а затем отследим по пять наиболее популярных торговых пар для каждой, мы встретимся с USDT в 13 случаях из 15.

USDT — ассет с самой большой капитализацией в мире.

Всё это рождает большой интерес сообщества к более быстрым, безопасным и дешевым решениям для обмена Tether на другие валюты. Очевидно, что таким решением могли бы стать атомические свапы — мгновенные децентрализованные кросс-чейновые обмены. Хедлайнеры данной технологии, представившие её осенью 2017 года, лаборатория Komodo, отчиталась об успешном обмене KMD на USDT, совершенном на платформе BarterDEX — собственном обменнике Komodo.

 

 

Вместе с тем, по нашим данным, разработчики Komodo сделали свап на ERC20- разновидность Tether, которая доступна только только в 3 % случаев. Менять таким способом можно не больше 60 млн USDT из всего мирового оборота, что, очевидно, не может рассматриваться как решение проблемы. Яркие примеры несовершенства существующих решений можно найти даже на Etherscan.

 

 

 

Команда Swap Online готова представить атомический свап с Tether уже этой осенью. Вот как мы это сделали.

 

Как Omni проводит транзакции

Для проведения транзакции Omni нужно создать обычную биткоин транзакцию-перевод 546 сатошей(минимум) с дополнительным выходом — хранящим payload посредством оп-кода OP_RETURN, Пример такой транзакции. Payload — это обязательная часть любой Omni транзакции, является последовательностью байтов, содержащей всю информацию об транзакции.

Рассмотрим, какую информацию хранит в себе payload:

  1. transaction marker — 4 байта, обязательная часть любого Omni payload, всегда равна 0x6f6d6e69 — ASCII код omni. Если первые 4 байта последовательности не равны 0x6f6d6e69, то эта последовательность не является payload Omni.
  2. version — 2 байта, аналог версии транзакции в биткоине. Для работы описанного алгоритма, используется версия 0, или что то же самое 0x0000.
  3. transaction type — 2 байта, тип транзакции, для проведения atomic swap достатояно использовать только «Simple send» транзакции, simple send — это обычное отправление omni валюты со своего адреса на адрес получателя. simple send соответствует коду типа транзакции 0 то есть следующие 2 байта 0x0000. другие возможные типы транзакции существующие в омни.
  4. token identifier — 4 байта, идентификатор используемой валюты, Например TetherUS имеет идентификатор 31или 0x0000001f. Все созданные протоколом Omni на данный момент времени токены можно увидеть по следующей ссыки — https://www.omniexplorer.info/properties/production .
  5. amount — 8 байт, для транзакции типа Simple send, это количество отправляемой валюты.

Как можно заметить, payload не хранит в себе адреса отправителей и получателей транзакции, эти адреса протокол определяет по биткоиновой транзакции в которой был обнаружен выход с payload’ом. Omni протокол просматривая входы определяет кто производит перевод, найдя среди входов транзакции p2pkh выход соответствующего адресу отправите.

Таким образом для передачи от Алисы к Бобу, например 50,000,000 TetherUS, нужно создать биткоин транзакцию один из входов которой будет ссылаться на p2pkh выход соответствующий адресу Алисы, так же важно чтобы этот вход был первым в этой транзакции (индекс этого входа в полученной транзакции был бы минимален или вообще равен нулю). Один из выходов этой транзакции должен быть выход p2pkh на адрес Боба, и еще один из выходов был быть выход со следующей payload:

(картина из приватного репо, пока не могу загрузить отдельно)

Пример такой транзакции: https://www.blockchain.com/ru/btc/tx/1f359902f666249b73f7bf8a1ea778259fa4b4eb904538e9713c487e091d4756,

https://www.omniexplorer.info/search/1f359902f666249b73f7bf8a1ea778259fa4b4eb904538e9713c487e091d4756 .

Atomic Swap на Omni Layer

Предположим, что Алиса и Боб желают совершить межблокчейновый обмен криптовалют — Алиса хочет обменять aединиц какой-либо Omni валюты, например TetherUS (валюта имеет идентификатор валюты #31 в Mainnet, далее в тексте будем говорить только об этой валюте протокола Omni, так как она на данный момент она является самой популярной, но приведенный ниже алгоритм будет работать также для любой валюты протокола Omni) на b единиц криптовалюты работающей на другом блокчейне (Напомним, что Omni работает поверх блокчейна биткоина, конечно, по приведенному ниже алгоритму можно произвести обмен TetherUS на биткоины, но в силу их работы на одном блокчейне такой обмен может быть совершен другим, более эффективным способом).

Обозначения

A — блокчейн биткоина.

B — блокчейн той криптовалюты на которую производится обмен TetherUS.

a — сумма TetherUS, которую Алиса хочет обменять.

b — сумма криптовалюты исполюзующей блокчейн B, на которую Алиса хочет обменять свои a TetherUS.

Создание транзакции

1)Боб генерируетслучайное значение secret.

2)Боб высчитывает secretHash проведя следующую операцию: secretHash = RIPEMD160( secret )

3)Боб создает и передает в блокчейн B htlc-транзакцию, закрытую значением secretHash

4)Боб передает Алисе значение secretHash, и хэш созданной им в предыдущем пункте hrlc-транзакции, для того чтобы Алиса могла убедиться в том, что в блокчейне B действительно присуствует нужная htlc-транзакция.

5)Алиса получив от Боба secretHash и хэш созданной Бобом htlc-транзакции, убеждается в том, что такая транзакция действительно находится в блокчейне B, и в том, что это действительно htlc-транзакция закрытая значением secretHash.

6)Алиса используя полученный secretHash создает следующую транзакцию и транслирует её в блокчейн биткоина:

назовем такую транзакцию funding_tx по факту это почти обычная биткоиновая htlc-транзакция которая используется в atomic swap с той лишь разницей, что в поле amount 546 сатошей — это минимальное количество биткоинов которое может быть на выходе транзакции, ниже этого значение протокол биткоина считает транзакцию пылью(dust) и не проводит её.

7)Алиса создает транзакцию по следующей схеме:

Назовем такую транзакцию redeem_tx. Алиса создает такую транзакцию с двумя входами: первый — это вход ссылающиеся на выход funding_tx который содержит htlc скрипт этот вход Алиса не подписывает, то есть поле SigScript остается вообще пустым. второй вход — это вход ссылающиеся на любой непотраченый выход Алисы, главное условия чтобы на этом выходе было достаточное количество биткоинов для оплаты transaction fee, этот вход Алиса подписывает своим приватным ключом обязательно с типом подписи SIGHASH_ALL(то есть подписывает всю транзакцию кроме полей SigScript на входах транзакции, что делает эту транзакцию неизменяемой. выходы же транзакции представляют собой обыкновенный Simple Send a TetherUS от Алисы Бобу(подробнее о том, что такое Simple Send, payload и как это работает в другом разделе).

8)Алиса отправляет Бобу созданную в предыдущем пункте и подписанную собой redeem_tx.

9)Боб получив отправленную Алисой redeem_tx, проверяет её — просто просматривает входы, и выходы, убеждается в том, что это действительно транзакция которую должна была создать Алиса используя настоящий алгоритм. После чего Боб подписывает транзакцию своим приватным ключом и предоставляет значение secret в SigScript соответствующего входа redeem_tx.

10)Боб транслирует подписанную собоё транзакцию redeem_tx в блокчейн, тем самым производя перевод валюты TetherUS от Алисы себе. Примечание — перед проведением этого шага, еще нужно проверить, что на адресе Алисы действительно есть необходимая сумма TetherUS.

11)Алиса просматривая блокчейн A получает значение secret и используя его в блокчейне B переводит себе средства с созданной Бобом в пункте 3 htlc-транзакции. Обмен на этом завершается.

Очевидное примечание: естественно значение timelock используемое Бобом при создание htlc-транзакции должно быть значительно больше timelock который использует Алиса, так как её htlc-транзакция должна тратиться первее чем htlc созданный Бобом. Это необходимо для того, чтобы Боб не смог успеть потратить оба htlc

 

Заключение

Таким образом подключение омни лейер к свап онлайн позволяет покрыть

altcoin atomic swap Bitcoin cross-chain exchange crypto market alanytics crypto research crypto wallet cryptocurrency decentralized exchange directly atomic swap with bitcoin and ethereum eos ethereum exchange withouth third party multy assets crypto wallet tether usdt