17 марта 2020

Atomex: атомарный своп на практике

Идея

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

Если TCP/IP — это основной протокол для передачи информации в Интернете, то блокчейн — это аналогичный протокол для передачи ценности в виде электронных денег или других активов. Однако разным блокчейнам, трудно взаимодействовать друг с другом.

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

Основы Атомарного свопа

Прежде чем мы перейдем к практической части, давайте немного углубимся в детали протокола. Допустим, Алиса хочет купить ETH за XTZ, а Боб согласился заключить сделку. Возможны два варианта: или транзакция состоится или будет отменена, и каждая сторона останется при своем. Весь процесс описывается так:

Инициализация

  1. Алиса блокирует XTZ
    Алиса генерирует случайную последовательность байт — secret, вычисляет его hash и отправляет XTZ на специальный смарт-контракт вместе с hash, значением  lock_time_a и адресом Боба для получения XTZ address_b.
    Эти XTZ могут быть получены только владельцем адреса address_b, если он знает secret, и это должно быть сделано до истечения периода lock_time_a, после чего Алиса сможет вернуть свои средства обратно.
  2. Боб блокирует ETH
    Когда транзакция Алисы подтверждается, Боб отправляет свой ETH на специальный смарт-контракт с тем же hash, своим lock_time_b и адресом ETH Алисы address_a. Эти ETH могут быть выкуплены только владельцем address_a, если он знает secret, и это должно быть сделано до истечения времени lock_time_b, после которого Боб сможет вернуть эти средства назад.

Требование lock_time_b < lock_time_a предотвращает случай, когда Алиса сначала возвращает свои XTZ, а затем выкупает ETH Боба.

Успешный выкуп (redeem)

Atomic swap 1
Упрощенная схема обмена XTZ / ETH (в случае успеха)
  1. Алиса выкупает ETH
    Алиса отправляет secret на смарт-контракт в блокчейн Ethereum и получает взамен ETH Боба.
    Теперь secret раскрыт, и Боб может получить себе заблокированные XTZ.
  2. Боб выкупает XTZ
    Боб отправляет secret на смарт-контракт в блокчейн Tezos и получает взамен XTZ Алисы.

Случай возврата (refund)

Мы не будем рассматривать случай, когда что-то идет не так во время фазы инициализации (это довольно тривиально), но рассмотрим случай, когда Алиса по какой-то причине не выкупает ETH Боба, то есть она не получает secret и время lock_time_b проходит.

Atomic swap refund
Упрощенная схема обмена XTZ / ETH (случай возврата)
  1. Боб возвращает ETH
    Боб отправляет hash на смарт-контракт в блокчейне Ethereum и возвращает свой ETH.
    Он не может потратить XTZ Алисы, так не знает secret который остался не раскрытым.
  2. Алиса возвращает XTZ
    Алиса ждет истечения lock_time_a, затем отправляет hash на смарт-контракт в блокчейн Tezos и возвращает свой XTZ.
    Она не может получить ETH Боба, потому что время lock_time_b уже прошло.

Атомарный своп на практике

Время увидеть Atomex в действии! Для начала нам необходимо немного пополнить баланс ETH на кошельке. Что касается вышеприведенной схемы, то “мы” — Боб , а наш контрагент — Алиса.

Конвертация

Выбираем вкладку «Conversion» и устанавливаем сумму ETH, которую мы хотим обменять на XTZ. Проверяем условия сделки (цену, объем, майнерские комиссии) и нажимаем «Conversion».

Atomex: create new conversion
Шаг 0. Пользователь создает конвертацию

В таблице появится новая операция конвертации со статусом «In progress».

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

За кадром

Алиса блокирует XTZ

Сначала проверим последние операции на смарт-контракте Atomex в блокчейне Tezos:

Alice locks XTZ
Шаг 1. Алиса блокирует XTZ

Мы видим транзакцию, отправленную Алисой. В итоге эти заблокированные средства станут нашими. Следим за полем hash в параметрах.

Боб (наше приложение) блокирует ETH

Как только транзакция XTZ подтверждена, Боб отправляет транзакцию ETH на смарт-контракт Atomex в блокчейне Ethereum. Мы видим, что она содержит тот же самый hash:

Atomex: Bob locks ETH
Шаг 2. Боб блокирует ETH

Алиса выкупает ETH

Еще один вызов контракта со стороны Алисы. Она получает наши ETH раскрывая secret и Боб (наше приложение) забирает его:

Alice redeems ETH
Шаг 3. Алиса выкупает ETH

Боб (наше приложение) выкупает XTZ

Наконец, Боб может разблокировать XTZ, используя полученный secret:

Atomex: Bob redeems XTZ
Шаг 4. Боб выкупает XTZ

Статус нашей конвертации меняется на «Completed», все в порядке.

Примечание для пользователей

Все внутренние действия, которые вы увидели, выполняются кошельком Atomex в фоновом режиме, поэтому необходимо держать его онлайн в сети до тех пор, пока обмен не будет завершен. В нашем примере на обмен XTZ/ETH уходит примерно 8 минут, однако это зависит от конкретного времени подтверждения транзакций в обоих блокчейнах. Будьте терпеливы, если делаете своп с Биткоином.

В настоящее время мы работаем над увеличением списка поддерживаемых валют. На данный момент добавлены Bitcoin, Litecoin, Ethereum и Tezos. Совсем скоро в приложении Atomex станет доступен обмен с USDT и другими стейблкоинами. Также будет добавлена поддержка hard кошельков.

Мы будем рады любой обратной связи, если у вас есть запрос на добавление функции или сообщения об ошибках, добро пожаловать в наш чат Telegram . И не забудьте подписаться на нас в Twitter!