Atomic Swaps: блокчейн расправил плечи +4


AliExpress RU&CIS

Зачем идти в обход, когда можно срезать?

Вы, наверное, слышали о Суэцком канале(кажется недавно об этом писали в новостях). До создания искусственного водного пути европейские корабли, доставляющие ткани и специи из Индии, должны были пройти печально известный “Кейп-Роут” - 40-дневное путешествие, покрывающее более 10 000 морских миль. Открытие канала сократило расстояние на более чем 5000 миль, сократило время до 10–12 дней и открыло новую эру морского судоходства. Меньше времени в море, меньше смертей от цинги, меньше пиратов, недоедания и разрушительных штормов. Прогресс.

И вот за окном 2021 год. Мировая капитализация крипто-рынка приближается к 2 триллионам долларов. PayPal запускает платежи в криптовалюте. Линдси Лохан шилит Трон. Рекламы Dogecoin на Super Bowl не случилось, но Илон вместо этого, в буквальном смысле, отправил его «ту зе мун». Свершилось. Крипта - это мейнстрим. Но даже сегодня получение определенных криптоактивов может стать своего рода эпическим путешествием. 

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

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

Что такое Atomic Swaps?

Существует некоторая неопределенность в отношении термина Atomic Swap, поэтому для этой статьи мы сразу определим его как операцию, в которой задействованы две криптовалюты, каждая из которых имеет свой нативный блокчейн и техническую возможность создавать безопасные операции обмена между пользователями сети, не прибегая к услугам  trusted third party и не доверяя друг другу. Например если Zano и Bitcoin имеют поддержку atomic swaps, то пользователи могут безопасно совершать обмен Zano на BTC. Операция называется atomic, потому что подразумевает что вся процедура не может остановиться на полпути, переведя только часть монет, она или происходит полностью и обе стороны получают ожидаемые монеты или же она не происходит совсем и обе стороны остаются при своих монетах. Таких образом ни одна из сторон не может смошенничать ни на каком из этапов сделки.

HTLC

В основе механизма atomic swap лежит так называемый HTLC(Hash-Time Locked Contract). Этот контракт можно условно перевести на человеческий язык таким образом: 

Если прошло времени меньше чем Т, то перевести N монет на адрес A при условии предоставления секрета, хеш которого равен H. Если прошло времени больше чем Т, и за это время секрет не предоставлен, то перевести (вернуть) деньги на адрес B.

Другими словам, выход транзакции, заданный как HTLC, может быть потрачен получателем только, если отправитель сообщит ему секрет, и только в течение определенного времени, зафиксированного в транзакции (например, 24 часа). Если же это не произойдет в указанный период времени, то деньги будут выведены на обратный адрес отправителя.

 Тот, кто создает этот контракт, придумывает секрет, но не раскрывает его, а в самом контракте указывают только адреса A, B, хеш H секрета, и период времени, в течение которого контракт может быть “открыт” с помощью секрета. То есть, если Боб (у которого адрес B) отправляет Алисе (у которой адрес A) такой контракт, то она не сможет “открыть” этот контракт и перевести себе деньги до тех пор, пока Боб не сообщит ей этот секрет.

Cross-chain Atomic Swap

Теперь, после знакомства с HTLC, опишем процесс осуществления cross-chain atomic swap между сторонами. Представим Алису и Боба. Допустим, у Алисы есть Zano(будем использовать этот проект для примера), а у Боба  - BTC, и, разумеется, они хотят трейдить. Алиса и Боб договорились, что хотят поменять оговоренную сумму BTC на оговоренную сумму ZANO. У обоих участников сделки есть кошельки как в сети Bitcoin, так и в сети Zano, и оба договорились о том, что сделка должна быть завершена в течении суток.  

Итак, все начинается с того, что Алиса придумывает секрет. Этот секрет будет краеугольным камнем всего процесса, поэтому важно понимать, что секрет есть только у Алисы, она его никому не раскрывает, но считает от него хеш и создает в сети Zano HTLC-транзакцию, адресованную Бобу и залоченную с помощью этого хеша. Боб не сможет воспользоваться выходом этой HTLC-транзакции пока не узнает секрет Алисы. Кроме того, в HTLC-транзакции задано условие, что она действительна только в течении суток, после чего с этой транзакции деньги можно будет вернуть только назад Алисе (и уже без предоставления секрета).

Увидев, что Алиса создала в сети Zano HTLC-транзакцию для Боба, и убедившись, что количество монет в этом контракте соответствует их с Алисой договоренности, Боб создает HTLC-транзакцию в сети Bitcoin, адресованную Алисе и содержащую оговоренное число монет BTC, и, что очень важно, залоченную именно тем же хешем, который Боб увидел в HTLC-транзакции, созданной Алисой.То есть, это хеш секрета Алисы

Алиса убеждается в том, что количество монет в HTLC-транзакции, созданной Бобом на ее адрес в сети Bitcoin, соответствует их договоренностям, и принимает решение об исполнении сделки. Это решение по сути является тем самым атомарным моментом сделки, до него сделку можно отменить и все останутся при своих монетах (получив refund через определенное количество времени, указанное в HTLC, в нашем случае это 24 часа). 

В отличие от Боба, Алиса знает секрет, хешем от которого залочен HTLC-выход транзакции в сети Bitcoin, поэтому она может создать redeem-транзакцию и вывести деньги в свой кошелек. Такая операция и будет той самой “атомарной” точкой невозврата,  после этого сделка будет в техническом смысле “необратима”. 

Алиса делает redeem-транзакцию.

Как только Алиса создала такую транзакцию и отправила ее в сеть Bitcoin, она раскрыла свой секрет поскольку этот секрет явно включается во вход redeem-транзакции для того, чтобы доказать, что она его знает. Этот же секрет является также локером транзакции, адресованной Бобу в сети Zano, поэтому Боб, внимательно следя за ситуацией, видит отправленную Алисой redeem-транзакцию, извлекает из нее секрет Алисы  и создает соответствующую redeem-транзакцию в сети Zano: 

По завершении последнего этапа Алиса и Боб получают то, о чем они договорились, при этом ни на одном из этапов ни одна сторона не сможет смошенничать. Если же любая из сторон передумала до того, как Алиса создала redeem-транзакцию и раскрыла свой секрет (в случае с Бобом до момента создания им HTLC в сети Bitcoin), то они просто ждут пока пройдет временное и предварительно оговоренное ими окно сделки. Важно иметь в виду, что timelock стороны, которая создает ответный HTLC, т.е. стороны которая не знает секрета, должен быть выбран таким образом, чтобы он закончился раньше, чем timelock стороны, инициирующей операцию HTLC первой. Если это условие не будет соблюдено, то вторая сторона (в нашем случае это Боб) может не успеть создать свою redeem транзакцию, и останется без монет. 

Генетическая совместимость проектов

В описанном выше примере оба проекта имеют совершенно разную кодовую базу, и даже разные эллиптические кривые(!). К счастью, HTLC позволяют организовывать atomic swaps даже между такими “генетически” несовместимыми проектами. 

Единственное, что у них должно быть общего, так это поддержка HTLC с одинаковой хеш-функцией. В подавляющем большинстве проектов для этой цели используется классека SHA-256.

Privacy considerations

В случае Bitcoin едва ли можно говорить о прайваси, но нужно прояснить особенности взаимодействия с прайвеси-блокчейном, в котором транзакции по умолчанию являются приватными. Очевидно redeem-транзакции не могут иметь anonymity set - использование mixins не имело бы никакого смысла в любом случае, поскольку всегда можно сопоставить к какому именно HTLC-выходу относится вход через проверки на соответствие хеша секрета.  Поэтому связь между транзакцией с HTLC-выходом и redeem-транзакцией довольно однозначна. Кроме того, сопоставить пару транзакций HTLC-to-Redeem в сети Bitcoin для отдельно взятой операции atomic swap, связанной с соответствующей парой транзакцией  в сети Zano, довольно легко, Это можно сделать, используя все тот же хеш секрета - в обоих сетях, очевидно, хеш должен быть одинаковым, поскольку для проведения операции в обоих блокчейнах использовался один и тот же секрет.

Практический пример

Для того, чтобы лучше проиллюстрировать работу atomics swaps для двух принципиально разных блокчейн проектов, мы реализовали небольшой пример под nodejs. За основу мы взяли статью и репозиторий, в которых был интересно представлен пример atomic swaps между Bitcoin и BitcoinСash. Мы существенно упростили код, чтобы продемонстрировать основные принципы, тем не менее, если у вас появится желание разобраться с работой HTLC в  Bitcoin на более низком уровне, вплоть до оп-кодов, то мы рекомендуем ознакомиться с их статьей.

P2SH

В практическом примере, о котором идет речь, важно понимать концепцию P2SH, используемую на стороне Bitcoin для создания HTLC. В Bitcoin для определения конкретного способа использования выхода транзакции используется так называемый “script”(далее “скрипт”), элементарный стековый язык программирования. Причем скрипт, который определяется для конкретного выхода, на самом деле будет являться окончанием скрипта, ну а его начало должен будет предоставить тот, кто тратит этот выход (подробнее с этим можно ознакомиться в этой статье). Однако, кроме непосредственного включения “половинки” скрипта в выход, есть еще способ отправки на хеш скрипта (P2SH). Это значит, что содержание самого скрипта выхода не раскрывается до момента фактической траты выхода, а в транзакции содержится только указание, что при трате этого выхода должно быть предоставлено “окончание” скрипта, хеш от которого прописан в выходе, и “начало” скрипта, которое этот скрипт отпирает. В описываемом примере сети Bitcoin для создания HTLC используется именно такой тип выхода. Поскольку обе стороны договорились об условиях сделки и они знают свои public keys (именно public keys, а не адреса, потому что в отличие от Zano, например, в bitcoin адресом является хеш public key), то обе стороны смогут генерировать одинаковый HTLC скрипт выхода, получив один и тот же “script-хеш-адрес”(P2SH). Для одной стороны это будет “script-хеш-адрес”(P2SH), на который она отправит BTC, а для другой стороны это будет “script-хеш-адрес”(P2SH), который она будет мониторить для того, чтобы детектировать факт создания HTLC и его подтверждения сетью.

Заключение

Хотя в приведенных выше примерах мы использовали Bitcoin и Zano, atomic swaps могут выполняться между любыми цифровыми валютами, которые поддерживают HTLC. Это обеспечивает более безопасный и прямой маршрут между экосистемами Bitcoin, Bitcoin Cash, Decred, Litecoin, Qtum, Monacoin, Zano и тп. И список совместимых проектов постоянно растет.

На данный момент это инструменты низкого уровня, но они закладывают основу для гораздо большей совместимости в будущем. Мы уже предвидим создание платформ с более доступным и удобным интерфейсом, построенных на основе Atomic swaps (например, AtomicDex). Вскоре они станут настоящими децентрализованными альтернативами централизованным биржам. По мере того, как инструменты продолжают развиваться и совершенствоваться, мы можем визуализировать будущее, в котором вы сможете совершать быстрые, недорогие и надежные сделки без рисков, связанных с доверием третьей стороне.

Atomic swaps - это, прежде всего, более легкий доступ. Более легкий доступ означает большую ликвидность, а ликвидность должна быть у любого платежного инструмента.

Atomic swaps. Ликвидность. Прогресс.

PS: Материал составлен в соавторстве с участником нашего комьюнити проекта Zano - OrsonJ, за что ему огромное спасибо!




Комментарии (18):

  1. inferrna
    /#22996132

    Как по мне, нужен не обмен, а превращение. Чтобы Алиса могла превратить свои Zano в биткойны, уничтожив при этом Zano и породив биткойны.

    • defuz
      /#22996282

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


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


      Если вам нужно "переместить" монету на другой блокчейн, на практике выпускается новая монета на целевом блокчейне под залог монет на первичном блокчейне, реализумой через смарт-контракт. По сути такая монета является долговым обязательством с возможностью обменять новую монету на изначальную 1:1, и потому ее реальная цена (почти) совпадает с ценой изначальной монеты. Но это возможно только если залог обеспечен реальными монетами.


      Если же вы хотите "поменять" одну монету на другую, ключевыми проблемами будет ликвидность (откуда возьмутся монеты для продажи?) и формирование честного курса (как узнать справедливую цену при выполнении смарт-контракта?). Эти вопросы решаются пулами ликвидности (banchor, uniswap), которые представляют собой смарт-контракты, владеющие достаточно большими объемами монет. Отношение объема валют в корзине определяет их взаимную стоимость, любое отклонение от справедливого курса создает возможность арбитража, который вернет курс к справедливому. Этот же запас валют используется для осуществления мгновенной продажи необходимой валюты. Как правило, курс выводится из баланса таким образом, чтобы объем запаса любой валюты никогда не опустился до нуля.

      • andrey_sabelnikov
        /#22998266

        Спасибо за ответ, присоединяюсь к каждому слову.

      • inferrna
        /#22998984

        Это примерно тоже самое, что сжечь американские доллары, и вместо них раздать канадские доллары того же номинала.
        почти верно, кроме того, что уничтожение/создание будет проводиться по обменному курсу. В этом, конечно, заключается некоторая сложность.
        Смысл в следующем: при появлении новой криптовалюты, которая во всём удачнее старой, её больше не нужно майнить. Майнить можно, но нет необходимости. Например, если вдруг все захотят превратить свои битки в Zano, то они не разгонят цену Zano до небес, они просто превратят битки в Zano в буквальном смысле. В итоге у вас как-бы остаётся общий криптовалютный пирог, внутри которого вы вольны выбирать реализацию.
        Это, ну, не знаю, с чем сравнить. Вот есть бумажный кэш, а есть те же безналичные рубли. А тут будут биток, зано, эфир и все-все-все — просто разные имплементации одного и того же.
        Более подробно я расписал тут telegra.ph/Tainstvennyj-kriptosindikat-01-16 в далёком 2018 ещё на том хайпе. Сейчас ситуация повторяется, снова актуально.

  2. lrrr11
    /#22996136

    В основе механизма atomic swap лежит так называемый HTLC(Hash-Time Locked Contract)

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

    • andrey_sabelnikov
      /#22998288

      Да, вы правы. В изначальной версии статьи у меня было описание разных технологий, но тк статья получалась слишком длинной, то пришлось сократить очень многое. Из анонимных Atomic Swap довольно интересным мне кажется вот эта работа: eprint.iacr.org/2020/1126.pdf

      Буду признателен если вы в комментариях напишете какие варианты вам кажутся интересными.

  3. hjornson
    /#22996614 / +1

    2022 год. В магазинах нет никаких электронных товаров. На всём содержащем чипы майнятся криптовалюты и всё скупается на корню майнерами.
    2023 год. Майнеров повсеместно линчуют и вешают на витой паре. Церковь внесла майнинг в список смертных грехов.

  4. Revertis
    /#22996822

    Интересно, а как быть с плавающей относительной ценой этих двух валют?
    Ведь когда Боб согласился на сделку, проверив количество монет от Алисы, Алиса может подождать пару-тройку часов, пока курс станет для неё выгоднее, а для Боба не очень, и тогда выпустить свой секрет.

    • andrey_sabelnikov
      /#22998380

      Да, для высокочастотного трейдинга эта технология, в текущем виде, не подойдет очевидно. Для проектов у которых частота блоков относительно высокая, выходом может быть сокращение временного окна на сделку, скажем до 15 минут, но как мы знаем даже в течении этого времени на рынке может произойти очень серьезные изменения, и таким образом у Алисы есть некоторое преимущество, тк она может принимать решение давать сделке ход или нет, не давая Бобу возможность отменить сделку.
      Будем работать над Atomic Swap 2.0!

  5. Menaskop
    /#22998560

    Хоть что-то дельное про блокчейн на Хабре за последние года 4 (и ещё, может 4 материала сверху). Совет — пишите лучше размашисто и по всем пунктам: кому не надо — пройдут так и так мимо, а я бы вот почитал побольше, ибо про HTLC и так в курсе. В любом случае — поклон за труд: как дельное объяснение — выложу всем, кто спрашивает.

  6. Appledro4er
    /#22999668 / +1

    Я почти нихера не понял, но звучит гениально и очень интересно. А нельзя сделать как при купле продаже за ин.валюту, чтобы заключать договор по определённому курсу?

  7. mmore123
    /#23008366 / +1

    Крутые аналогии и все детально описано. Отличная статья!

  8. vigo1974
    /#23011854

    Всё намного проще сделать можно!

    Боб отправляет под паролем с указанием времени, например 24 часа, возврата Х сумму Алисе, Алиса отправляет Бобу под паролем Y сумму без возможности одтмены транзакции. Перевод висит до тех пор, пока оба не сверят суммы и нажимают, что согласны с обменом.

    После этого один передает пароль на подтверждение транзакции другому, тот вводит и получает обмен, одновременно его сумма отправляется другому с автоснятием пароля.

    Почти также, давно сделано на переводах WebMoney с гарантом! ;)

    • andrey_sabelnikov
      /#23011880

      Вы не учитываете тот факт, что каждый блокчейн это «вещь в себе», это технологически замкнутая система, которая не связана с внешним миром, ни с какими либо другими блокчейнами.
      Кроме того, это децентрализованная система, те в обоих сетях нет какого-то главного узла который мог бы принимать решение о разрешении перевода, равно как и удостоверить информацию о том, что кто-то где-то что-то нажал. Именно поэтому для организации таких операций обмена приходится прибегать к сложным протоколам.