Atomic Swaps для чайников

Atomic Swaps для чайников

Наверное одна из самых интересных и в то же время сложных для описания тем. Atomic Swaps - как это работает? Сложных, потому что используемые термины в основном англоязычные, иногда не имеющие устоявшихся русских аналогов, а не в плане понимания. Например, atomic swaps - можно перевести как "атомарные свопы", а можно уйти от англицизмов совсем и назвать их "атомарными обменами". Суть от этого мало поменяется, однако, описание процесса свопа, так или иначе будет включать понятия liqudity provider / liquidity taker, taker / maker - с которыми нам предстоит разобраться. Скорее всего я буду использовать англоязычные термины, давая их перевод при первом появлении, т.к. такие вещи должны оставаться на английском. Во избежание появления слов типа "ксерокс", как обозначения копировального аппарата (кстати, в некоторых странах куда Canon пришел первым - "ксерокс" называют "каноном").

Под maker'ом  мы будем понимать участника сделки / сторону обмена, разместившую ордер, taker - же, это вторая сторона сделки, т.е. лицо, которое принимает условия этого ордера к исполнению. Соответственно maker'а мы также будет называться liquidity provider (поставщиком ликвидности), а taker'а - liquidity taker'ом (получатель ликвидности). Если пытаться быть "максимально русскими" в переводе, то ближайшие аналоги - это продавец и покупатель, однако, эти понятия более узкие, чем изначальные, поэтому мы с вами будем оперировать maker'ом и taker'ом.

Всего протокол atomic swaps насчитывает 7 этапов, которые выполняется автоматически во время процесса обмена.

  1. Negotiate. Две ноды (узла p2p сети) договариваются о времени блокировки платежей (locktime), необходимых для сделки. Время блокировки зависит от активов с которыми происходит обмен. Т.е. для пары KMD/MCL, например, это время блокировки будет одним, а для KMD/BTC - уже другим. Важно то, что по завершении этого этапа - оба участника обмена соглашаются с выбранными параметрами. Также на этом этапе узлы договариваются о секретном хеше.
  2. Taker платит комиссию. Узел taker'а, т.е. трейдер кто принимает условия сделки (а не трейдер, кто разместил изначальное предложение) платит комиссию (DEX fee) в размере 1/777 (~0.13%) от объема сделки. Maker не платит никакой комиссии.
  3. Maker отсылает платеж. Maker отсылает платеж, который блокируется выбранным на первом этапе (1) секретным хешем и согласованным временем блокировки. Получателем платежа является taker. На данном этапе taker не имеет доступа к этим средствам и не может их потратить, хотя оба из участников сделки могут проверить что maker действительно отослал средства.
  4. Taker объявляет о получении средств. Т.е. узел taker'а сообщает узлу maker'а о о том, что средства из шага (3) были получены. Если taker никогда не подтвердит получение, например в случае если узел taker'а по каким-либо причинам отключился от сети, тогда maker получит возмещение этого платежа, после того как истечёт двойное время блокировки платежа, о котором узлы договаривались на шаге (1).
  5. Taker отсылает свои средства. Теперь, после получения средств на шаге (4) от maker'а, taker посылает свой платеж. Если maker не истребует эти средства по истечению времени блокировки платежа, средства возвращаются к taker'у. Что значит "истребовать" средства будет понятно из пункта (6).
  6. Maker тратит платеж Taker'а. Как раз то, о чем мы говорили в пункте (5). Maker расходует / истребует платеж полученный от taker'а, переводя средства на свой персональный кошелек. Эта транзакция становится публично доступной на блокчейне.
  7. Taker расходует платеж Maker'а. Taker видит, что его платеж с шага 5 был израсходован, т.е. он видит транзакцию созданную maker'ом на шаге (6). Он извлекает секрет (значение секрета) из этой транзакции и с помощью него расходует платеж maker'а из шага (3). Теперь он может получить доступ к этим средствам. По завершению этого этапа средства оказываются в личном кошельке taker'а.

Собственно это перевод 7-ми этапов с картинки. Вроде бы все просто, но в то же время несколько непонятно. А непонятно потому что здесь не было сказано ни слова о HTLC (Hash Time Locked Contracts), а именно они являются основой атомарных свопов.

AtomicDEX

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

AtomicDEX Protocol. Swap example.

Из которых мы понимаем, что maker на первом этапе (negotiate) придумывает некий секрет (32-х байтное число), хешем которого обмениваются участники. В результате все платежи выполняются на специальные P2SH адреса, с которых забрать средства можно только при наступлении определенных условий, по таймауту (по истечении времени блокировки средств), либо при предъявлении секрета. За счет этого достигается безопасность сделки, такое расходование средств нельзя обмануть, т.к. оно является частью HTLC контракта. И в результате средства оказываются на кошельках участников обмена.

Если приведенной информации по теме Atomic Swaps и HTLC для вас недостаточно, то вот еще несколько полезных ссылок:

Обратите внимание, что в статье на Хабре делается вывод о том, что все перечисленное является инструментами "низкого уровня". Однако, команда Komodo вполне успешна перешла от низкоуровневой абстракции кроссчейновых swap'ов, основанных на HTLC-контрактах, к полноценной реализации, в виде программной платформы с удобным пользовательским интерфейсом. Как результат, децентрализованная альтернатива централизованным биржам - уже стала реальностью.