Идея
Наша цель — создать продукт для крипто энтузиастов, для тех, кто верит в основополагающие идеи технологии блокчейн, и для тех кто в хорошем смысле испытывает паранойю по поводу приватности и безопасности.
Если TCP/IP — это основной протокол для передачи информации в Интернете, то блокчейн — это аналогичный протокол для передачи ценности в виде электронных денег или других активов. Однако разным блокчейнам, трудно взаимодействовать друг с другом.
Протокол обмена через атомарный своп, который мы рассмотрим чуть позже, эффективно закрывает один пробел — доверие сторон при операциях обмена. Банки или другие доверенные третьи стороны заменяются смарт контрактом. К слову, это один из немногих случаев, когда это может быть сделано только с данными, доступными в сети (без оракулов или других поставщиков данных вне сети).
Основы Атомарного свопа
Прежде чем мы перейдем к практической части, давайте немного углубимся в детали протокола. Допустим, Алиса хочет купить ETH за XTZ, а Боб согласился заключить сделку. Возможны два варианта: или транзакция состоится или будет отменена, и каждая сторона останется при своем. Весь процесс описывается так:
Инициализация
- Алиса блокирует XTZ
Алиса генерирует случайную последовательность байт — secret, вычисляет его hash и отправляет XTZ на специальный смарт-контракт вместе с hash, значением lock_time_a и адресом Боба для получения XTZ address_b.
Эти XTZ могут быть получены только владельцем адреса address_b, если он знает secret, и это должно быть сделано до истечения периода lock_time_a, после чего Алиса сможет вернуть свои средства обратно. - Боб блокирует 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)
- Алиса выкупает ETH
Алиса отправляет secret на смарт-контракт в блокчейн Ethereum и получает взамен ETH Боба.
Теперь secret раскрыт, и Боб может получить себе заблокированные XTZ. - Боб выкупает XTZ
Боб отправляет secret на смарт-контракт в блокчейн Tezos и получает взамен XTZ Алисы.
Случай возврата (refund)
Мы не будем рассматривать случай, когда что-то идет не так во время фазы инициализации (это довольно тривиально), но рассмотрим случай, когда Алиса по какой-то причине не выкупает ETH Боба, то есть она не получает secret и время lock_time_b проходит.
- Боб возвращает ETH
Боб отправляет hash на смарт-контракт в блокчейне Ethereum и возвращает свой ETH.
Он не может потратить XTZ Алисы, так не знает secret который остался не раскрытым. - Алиса возвращает XTZ
Алиса ждет истечения lock_time_a, затем отправляет hash на смарт-контракт в блокчейн Tezos и возвращает свой XTZ.
Она не может получить ETH Боба, потому что время lock_time_b уже прошло.
Атомарный своп на практике
Время увидеть Atomex в действии! Для начала нам необходимо немного пополнить баланс ETH на кошельке. Что касается вышеприведенной схемы, то “мы” — Боб , а наш контрагент — Алиса.
Конвертация
Выбираем вкладку «Conversion» и устанавливаем сумму ETH, которую мы хотим обменять на XTZ. Проверяем условия сделки (цену, объем, майнерские комиссии) и нажимаем «Conversion».
В таблице появится новая операция конвертации со статусом «In progress».
На самом деле, это все, что нам нужно, чтобы сделать атомарный обмен через кошелек Atomex. Но не будем забывать про преимущество блокчейна — мы можем наблюдать за всем, что происходит с нашими средствами. Поэтому давайте проникнем за кулисы и проследим за внутренним процессом, который выполняет наше приложение.
За кадром
Алиса блокирует XTZ
Сначала проверим последние операции на смарт-контракте Atomex в блокчейне Tezos:
Мы видим транзакцию, отправленную Алисой. В итоге эти заблокированные средства станут нашими. Следим за полем hash в параметрах.
Боб (наше приложение) блокирует ETH
Как только транзакция XTZ подтверждена, Боб отправляет транзакцию ETH на смарт-контракт Atomex в блокчейне Ethereum. Мы видим, что она содержит тот же самый hash:
Алиса выкупает ETH
Еще один вызов контракта со стороны Алисы. Она получает наши ETH раскрывая secret и Боб (наше приложение) забирает его:
Боб (наше приложение) выкупает XTZ
Наконец, Боб может разблокировать XTZ, используя полученный secret:
Статус нашей конвертации меняется на «Completed», все в порядке.
Примечание для пользователей
Все внутренние действия, которые вы увидели, выполняются кошельком Atomex в фоновом режиме, поэтому необходимо держать его онлайн в сети до тех пор, пока обмен не будет завершен. В нашем примере на обмен XTZ/ETH уходит примерно 8 минут, однако это зависит от конкретного времени подтверждения транзакций в обоих блокчейнах. Будьте терпеливы, если делаете своп с Биткоином.
В настоящее время мы работаем над увеличением списка поддерживаемых валют. На данный момент добавлены Bitcoin, Litecoin, Ethereum и Tezos. Совсем скоро в приложении Atomex станет доступен обмен с USDT и другими стейблкоинами. Также будет добавлена поддержка hard кошельков.
Мы будем рады любой обратной связи, если у вас есть запрос на добавление функции или сообщения об ошибках, добро пожаловать в наш чат Telegram . И не забудьте подписаться на нас в Twitter!