Атомарные свопы что это
Принципы работы и особенности применения atomic swap
В этой статье освещены вопросы, связанные с актуальностью подхода атомарного обмена разных монет между собой без участия посредников. Мы постарались описать особенности работы такого обмена и требования к цифровым валютам для поддержания этой функциональности. Кроме того, разобрали актуальные вопросы проектирования и запуска децентрализованных бирж на базе atomic swap, а также недостатки и риски их использования.
По определению владелец криптовалюты работает со своими монетами без участия доверенной третьей стороны, то есть trustless. Вполне естественно, что пользователи хотят и обменивать эти валюты по такому же принципу. Существующие централизованные биржи не могут удовлетворить этим требованиям. Об этом свидетельствуют многочисленные ограничения со стороны самих бирж и частые случаи их взломов.
Как происходит обмен на централизованной площадке? Алиса регистрируется на бирже и выставляет order на покупку определенного количества монет определенной криптовалюты. Боб, который уже зарегистрирован на этой бирже, видит order и, если его устраивает цена, соглашается на него. Балансы аккаунтов на этой бирже у Боба и Алисы изменяются. После этого они могут вывести эти деньги на свои кошельки.
В этой ситуации и Алиса, и Боб доверяют бирже. Точнее, они доверяют владельцам биржи, что те не заберут деньги и не исчезнут с ними. В некотором смысле пользователи должны доверять инженерам, которые проектировали и разрабатывали биржу, и другим специалистам, которые обеспечивают надежную защиту от хакеров и мошенников.
Идея и требования к валюте
Идея атомарного обмена была предложена как альтернатива. Atomic swap – это обмен, который или выполняется неразрывно, или не выполняется вообще. Такой подход позволяет совершить обмен, даже если пользователи не доверяют друг другу. Кроме того, участник не потеряет монеты, даже если оппонент целенаправленно хочет обмануть его.
Atomic swap является идеей с большим потенциалом и может быть реализован по-разному и для совершенно разных цифровых валют. Поэтому в этой статье мы ограничимся спецификой работы atomic swap именно для таких криптовалют, как Bitcoin и Ether.
Для того чтобы цифровая валюта могла успешно поддерживать atomic swap, она должна удовлетворить некоторым фундаментальным требованиям.
Основным из них является возможность создать смарт-контракт с возможностью временной задержки. Кроме того, для совершения транзакции между двумя разными учетными системами необходимо, чтобы обе они могли использовать одну и ту же криптографическую хеш-функцию в задании условий траты монет (например, SHA-256). Это необходимо, чтобы контракт выполнялся корректно, когда пользователь предоставит результат выполнения хеш-функции. Более того, для успешного осуществления atomic swap необходимо наличие канала связи, поскольку пользователи должны off-chain обсудить условия обмена.
Принцип работы
Atomic swap использует так называемые блокировки с ограничением по времени (HTLC). Фактически это контракты, которые поддерживает сама учетная система цифровой валюты. Пара специальных контрактов гарантирует, что если монеты одной валюты меняют владельца, то и монеты второй валюты тоже. А если одна из сторон контрактов не подтвердит перевод в срок, то монеты вернутся изначальным владельцам обратно. Таким образом, монеты обеих валют блокируются до тех пор, пока все условия не будут выполнены и подтверждены. Либо обмен монетами выполнится атомарно, либо будет отклонен полностью.
Рассмотрим этот процесс на более детальной схеме. Представьте две цифровые валюты, для учета которых применяется технология блокчейн: α и β. Есть два участника: Алиса (А) и Боб (Б). Сначала Алиса создает новый адрес в блокчейне валюты α и передает его Бобу. Боб также создает новый адрес, но в блокчейне валюты β, и передает его Алисе.
Алиса инициирует транзакцию со смарт-контрактом, на котором блокирует свои монеты, которые она хочет обменять с Бобом. Боб верифицирует этот смарт-контракт (проводит ручной или автоматизированный аудит), создает свой смарт-контракт на основе контракта Алисы и передает его ей. В свою очередь Алиса верифицирует смарт-контракт Боба в блокчейне β и, если все корректно, публикует свое секретное хеш-значение в блокчейне β во время разблокировки монет, которые были заблокированы Бобом. С помощью этого хеш-значения Боб может разблокировать монеты, которые Алиса заблокировала в блокчейне α. Таким образом, совершается обмен. До момента первой публикации хеш-значения, все участники остаются при своих монетах, а после участники свободно могут получить доступ к монетам оппонента. Именно поэтому обмен можно считать trustless.
Время подтверждения
Для совершения trustless обмена atomic swap необходимо всего 4 транзакции, по 2 в каждом блокчейне, а также off-chain коммуникация между субъектами для передачи текста смарт-контракта. Поэтому время совершения обмена с помощью atomic swap может занимать от 1 часа до того времени, которое указано в смарт-контракте субъектов во временной задержке.
Валюты, поддерживающие atomic swap
К валютам, которые на данный момент поддерживают atomic swap, относятся:
Децентрализованные биржи
На базе atomic swap можно построить децентрализованные биржи, которые позволят работать с несколькими учетными системами, со своим блокчейном для каждой. Но при проектировке таких децентрализованных бирж необходимо помнить, что кто угодно должен иметь возможность оставить свое предложение о покупке или продаже. Поэтому сначала необходимо наличие протокола, который позволит составить orderbook децентрализованным образом.
Что касается гарантий выполнения orders, здесь есть особенности. В случае централизованных бирж, весь баланс находится у биржи. Поэтому, несмотря на то, что пользователь в любой момент может отменить свой order, до того момента, пока он не отменен, биржа исполнит этот order в любом случае. Для децентрализованных бирж, необходимы штрафы за нарушение обязательств. Пока такой подход к решению этой проблемы является лучшим из тех, которые имеются на момент 2018 года.
Недостатки
В децентрализованных биржах пока нельзя реализовать так называемые dark pools – специальный orderbook, в которых никто не видит orders. Такой подход используют в централизованных биржах, чтобы скрывать предложения по обмену крупных сумм, поскольку они могут манипулировать рынком. Для реализации dark pools в децентрализованной бирже необходимо использовать сложную криптографию.
Кроме того, в децентрализованных биржах пока не будут доступны операции с фиатными валютами. Фиатные валюты не имеют учетной системы, где можно было бы прописать смарт-контракт. Поэтому нет возможности совершить atomic swap между фиатными и цифровыми валютами.
Проблема Panic Sell
При массовом использовании atomic swap существует проблема, которая тяжело поддается решению. Допустим, что есть учетная система, внутри которой взимается очень высокая комиссия за обработку транзакций, а сами транзакции очень долго подтверждаются. Пользователи начинают продавать эту валюту, поскольку она имеет низкую пропускную способность, и создают orders на децентрализованной бирже, но эти orders при выполнении создают смарт-контракты в том же блокчейне, что и валюта, которую пытаются продать. Таким образом, сеть нагружается еще больше, ожидающие транзакции образуют еще большую очередь и пользователи еще сильнее хотят продать эту валюту, выставляя больше orders и увеличивая очередь транзакций.
Риски использования atomic swap
Из-за отсутствия третьей стороны при использовании atomic swap есть свои риски. Если пользователь не провел аудит контракта, который ему прислал оппонент, есть вероятность, что оппонент может украсть деньги первого пользователя. Кроме того, если после исполнения смарт-контракта первый пользователь забрал деньги, а оппонент не выполнил redeem script вовремя, оппонент может потерять свои деньги.
Atomic Swap
Понравилась статья? Поделись:
Atomic Swaps (Атомарные свопы) – это децентрализованные и не требующие доверия сделки между двумя пользователями разных криптовалют. Эта технология относительно новая и предназначена для того, чтобы произвести революцию в транзакциях.
Содержание
Atomic Swaps (Атомарные свопы) [ править ]
Так как блокчейны не связаны, и транзакции не могут быть отменены, нет обеспечения защиты, если одна из сторон не соблюдает свою часть сделки. Одним общим решением данной проблемы является введение третьей стороны, имеющей взаимное доверие, для попечительства, однако это представляет проблему масштабируемости и конфиденциальности. Это также не предлагает никакой защиты против сговоров. Атомарные свопы решают данную проблему без необходимости третьей стороны, используя смарт-контракты на обеих цепях.
Атомарные свопы привлекают каждую платёжную сторону к транзакции с контрактом, один контракт на каждый блокчейн. Контракты содержат выпуск, который может быть потрачен любой из сторон, но правила, требуемые для возврата, для каждой привлечённой стороны разные. Одна сторона (называемая контрагент 1 или инициатор) генерирует секретный ключ и отправляет установленную сумму сделки в смарт-контракт. Вторая сторона (называемая контрагент 2 или участник) может только изымать средства, зная секретный ключ. Если истекает предопределенный период времени (обычно 48 часов) после того, как транзакция через смарт-контракт была замайнена или авансирована, но не изъята участником, средства могут быть возвращены в кошелёк инициатора.
Для простоты представим, что инициатор хочет торговать с участником Particl за Decred. Инициатор также может торговать Decred за Particl, и шаги будут теми же, но каждый шаг будет сделан на другом блокчейне. На данном этапе участник не может требовать средства из смарт-контракта Particl инициатора, потому что секретный ключ ему неизвестен. Если инициатор в этот момент передаёт секретный ключ, участник может потребовать средства из контракта, даже не выполняя свою часть сделки, нанося убыток инициатору.
Во избежание этого, участник создаёт похожий смарт-контракт, но на блокчейне Decred, и отправляет указанную сумму Decred на него. Однако, чтобы инициатору изъять выпуск, им нужно предъявить участнику их секретный ключ. Чтобы участник мог создать свой смарт-контракт, инициатор должен предъявить участнику не секретный ключ ( так как участник всё еще может потребовать средства и не выполнить свою часть сделки), а криптографический хеш секретного ключа, чтобы смарт-контракт мог сработать должным образом. Контракт участника может быть возмещен так же после предопределённого периода времени. Тогда инициатор изымает средства Decred участника, предъявляя секретный ключ к смарт-контракту участника. Затем секретный ключ извлекается из компенсирующей транзакции Decred инициатора. Эта процедура атомарна (с тайм-ауом), так как даёт каждой стороне минимум 24 часа, чтобы изъять свои коины на другом блокчейне до того, как может быть сделан возврат. Это лучший вариант для людей, которым необходима конфиденциальность, и возможно, он станет наиболее дешёвым в использовании.
Децентрализованные биржи [ править ]
Существуют альтернативы централизованным биржам, называемые DEX или децентрализованные биржи. Структура таких платформ позволяет пользователям удерживать владение своими коинами атомарных свопов с их закрытыми ключами. Этот метод позволяет предотвратить накопление криптовалют на одной централизованной точке атак.
Как работают DEX? Их работа строится путём того, что люди устанавливают и берут заказы индивидуально. Заказ существует в отдельных регистрах заказов, и эти регистры хранятся независимо друг от друга. Те заказы, которые размещаются в одном регистре, не могут появиться в другом. К сожалению, это создаёт недостаток ликвидности для пользователей. По этой причине пользователи должны смотреть на несколько разных журналов, чтобы разместить заказ.
Как решить эту проблему? Она может быть решена через «Liquidity Network». Это процесс, означающий, что разные журналы заказов используют API для совместного использования друг с другом. В этом случае заказы идут между «рилейерами» и обеспечивают необходимую ликвидность внутри сети. Как было сказано выше, децентрализованные биржи идут на опережение. Опережение – это концепция, означающая, что люди могут перебить заказ, размещенный на DEX. Множество DEX, запущенных на Ethereum, зависят от смарт-контрактов. Однако, это создаёт проблему, так как сеть является публичным блокчейном, и каждый может проверить пул памяти, чтобы посмотреть, кто хочет взять заказ.
Бывший инженер-программист Google Иван Богатый в своём блоге предложил Bancorteam реализовать минимальный возврат сделок, эффективно отменяя заказ, как только пользователь понимает, что кот-то хочет сорвать сделку на его глазах. Он предложил ещё одно решение установить максимальную цену на газ для людей, чтобы делать ставки выше ограничения. Данные решения являются краткосрочными. Они не смогут предотвратить опережение, но сократят потери пользователей. Ещё одно возможное решение – это «схема обязательства» от Уилла Уоррена, сооснователя проекта 0х (и открытого протокола для DEX).Что она означает? Трейдер тайно берет свои средства за транзакцию, но не открывает их. Как только транзакция замайнена, отправляется вторая со всеми деталями, выполняя заказ на децентрализованной бирже. Этот метод тоже не безупречен, так как могут возникнуть случайные сговоры, когда, например, два одних и тех же заказа размещаются одновременно.
Технология [ править ]
Lightning Network объявила о выпуске первых ставок для Mainnet на Bitcoin и Litecoin 15 марта 2018 года.
Atomic Swaps – это самое долгожданное приложение LN. Атомарные свопы – это обмен одной криптовалюты на другую по принципу «всё или ничего» (например, BTC на LTC). LN не является обязательной, но она сделает атомарные свопы закрытыми, мгновенными и бесплатными по сравнению с майнингом.
Принимая во внимание ликвидность, LN может столкнуться с проблемой доступности средств и каналов. Природа сети требует от пользователей создание платёжных каналов через мультиподписи, что означает, что пользователь может попасть на канал LN, только если у него есть что тратить. Посредники могут направлять платежи только в случае, если у них есть определённая сума средств. Решение может быть тем же, как и с DEX. Транзакции могут направляться и распределяться между узлами, у которых есть достаточно средств и каналов, чтобы осуществить своп. Возможно, это не самое лучшее решение на сегодняшний день, так как LN находится на ранней стадии разработки, но с её ростом, это будет хорошим решением.
Атомарные свопы используют технику контрактов HTLC (Hash Time-Locked Contracts). Когда обе валюты доставлены в данные контракты, HTLC обеспечивают, чтобы сумма обмена не могла быть перебита, как это может быть на DEX, поэтому нет опасности «случайного сговора».
Коины Аtomic Swap Coins [ править ]
Скажем, вы хотели бы обменять Litecoin на Bitcoin, и вам нужно найти кого-то на LN, чтобы совершить обмен. Соответствующие коины введены в своп. Они направляются через другие узлы, если вам нужны другие точки связи, и вы не хотите оплачивать комиссию за создание двух платёжных каналов. Итак, обмен гарантирован. Для защиты от обмана и похищения средств других людей преступниками, существуют строгие наказывающие контракты.
Коины [ править ]
Атомарные свопы позволяют членам криптосообщества торговать на различных блокчейнах безопасным способом, на высокой скорости и с минимальными комиссиями. Вы можете конвертировать Altcoin атомарного свопа, включая Litecoin атомарного свопа, Bitcoin, а также полный список валют, доступных для конвертации, который включает:
Атомарные свопы и сборы [ править ]
Комиссия за транзакцию должна оплачиваться дважды.
Что такое атомарные свопы?
Что такое атомарные свопы?
Атомарный своп (atomic swap) — это операция по обмену одной криптовалюты на другую, которая может быть реализована мгновенно без необходимости полагаться на требующую доверия третью сторону (посредника) в лице биржи или обменной платформы. В результате контроль над сделкой осуществляют исключительно участвующие в ней стороны.
Атомарные свопы могут осуществляться как ончейн, то есть напрямую между блокчейнами разных криптовалют, так и офчейн – за пределами блокчейна. Первый такой обмен был совершен 19 сентября 2017 года между криптовалютами Decred и Litecoin.
Чем вызвана необходимость в атомарных свопах?
Процесс обмена криптовалют на биржах и других специализированных платформах до сих пор может отнимать достаточно много времени и часто связан с завышенными комиссиями. Кроме того, не все биржи поддерживают все монеты или нужные торговые пары, в результате чего трейдер, желающий обменять одну криптовалюту на другую, сталкивается с вынужденной необходимость дополнительных конверсий.
Для решения этих проблем, включая упомянутые риски доверия третьей стороне, и была разработана технология атомарных свопов. Впервые она была описана еще в 2013 году, однако лишь недавно стала реализовываться на практике.
Как это работает с технической точки зрения?
При осуществлении атомарных свопов используется контракт хеширования с блокированием по времени (HTLC). Как следует из названия, HTLC представляет собой временной смарт-контракт, включающий в себя генерирование криптографической хеш-функции, которая может быть верифицирована участниками обмена.
Иными словами, HTLC требует, чтобы получатель платежа до истечения установленного срока подтвердил получение средств путем генерирования криптографического подтверждения платежа. В противном случае транзакция признается недействительной, а средства возвращаются отправителю.
А как это работает на практике?
Алиса имеет 100 LTC, которые она хочет обменять на эквивалентное количество BTC. Традиционный механизм предполагает, что Алиса отправляется на биржу, пополняет свой счет и выставляет ордер на продажу своих монет LTC. В случае с атомарным свопом Алиса может напрямую обменять свои LTC на BTC, нужное количество которых есть у Боба.
Алиса как инициатор транзакции создает адрес контракта, который можно сравнить с банковской депозитной ячейкой. На этом адресе хранятся LTC Алисы в процессе свопа. Для его открытия требуется подпись Боба, а также сгенерированное Алисой число. Очень важно, чтобы на данном этапе Алиса не делилась этим числом с Бобом, так как тогда тот сможет открыть ячейку и забрать все находящиеся там средства еще до того, как будет завершен своп.
Следующим шагом Алиса придумывает секретное число и создает его хеш. Хеш действует как замок, в то время как секретное число является ключом. Боб просматривает адрес контракта от Алисы, убеждается, что все в порядке, после чего создает свою собственную ячейку с тем же ключом. Для этого Алиса отправляет Бобу созданный ранее хеш, однако для открытия ячейки ему нужна подпись Алисы.
Начиная с этого момента Алиса имеет ключ, а также возможность подписать ячейку Бобу и, следовательно, выкупить средства, привязанные к адресу. После этого Бобу передается необходимое ему секретное число, которое он вплоть до этого момента не знал. Это секретное число Боб может использовать, чтобы открыть ячейку Алисы и забрать полагающиеся ему средства.
Как видно, HTLC структурирует транзакцию таким образом, что для обеспечения успешного завершения обмена стороны зависят друг от друга. Транзакции создаются таким образом, что в случае, если по каким-то причинам сделка прекращена, все средства возвращаются их владельцам через определенный период времени, установленный каждой стороной.
Необходим ли для атомарных свопов протокол Lightning Network?
Вопреки широко распространенному заблуждению, технология Lightning Network не является обязательным условием для успешного осуществления атомарных свопов, однако она может сделать процесс обмена более простым, быстрым и эффективным.
Как и атомарные свопы, Lightning Network использует контракты хеширования с блокированием по времени, разница в том, что в то время как атомарные свопы связывают блокчейны, Lightning Network связывает платежные каналы. Этот метод предполагает, что Алиса и Боб открывают платежный канал с Кэрол и осуществляют обмен через Кэрол без необходимости ей доверять.
Один и тот же основополагающий механизм означает, что интегрировать Lightning Network в атомарные свопы достаточно просто, в результате чего различные Lightning-сети могут быть связаны между собой в разных блокчейнах. Благодаря этому участник свопа, который открывает платежные каналы на обоих блокчейнах, может выступать в роли платежного процессинга или, например, децентрализованной биржи альткоинов.
В чем разница между ончейн- и офчейн-обменами?
Ончейн (on-chain) атомарные свопы происходят непосредственно в блокчейнах обмениваемых криптовалют, которые для успешного обмена, помимо поддержки HTLC, также должны использовать один и тот же алгоритм хеширования.
Офчейн (off-chain) атомарные свопы позволяют проводить обмен монет вне блокчейна, являясь расширением Lightning Network.
Какие криптовалюты поддерживают технологию атомарных свопов?
Первые успешные обмены с использованием технологии атомарных свопов были проведены между Litecoin и Decred, Vertcoin и биткоином. Они, возможно, и привлекли повышенное внимание сообщества, однако одними этими криптовалютами дело не ограничивается.
Следует отметить, что для успешного осуществления атомарных свопов в их первоначальной имплементации пользователю необходимо скачать блокчейны обеих валют. Для среднестатистического пользователя этот процесс с практической и технической точки зрения совсем неудобен.
Однако решение этой проблемы уже найдено, и есть вероятность того, что в скором времени оно станет доступно широкому кругу пользователей. Так, над созданием собственной децентрализованной биржи BarterDEX работает проект Komodo. В частности, его разработчики успешно провели атомарный своп при помощи сервера Electrum, который позволяет взаимодействовать с криптовалютой без необходимости скачивать весь блокчейн.
Более того, команда Komodo заявляет, что после того, как успешно связала блокчейны биткоина и Ethereum, а также имплементировала поддержку токенов формата ERC-20, их биржа BarterDEX теперь поддерживает p2p-обмены между 95% всех существующих монет и токенов.
Блеск и нищета atomic swaps
Чем плохи атомарные свопы и как каналы им помогут, что важного произошло в хардфорке Constantinople и как быть, когда нечем платить за газ.
Главная мотивация любого специалиста по безопасности— желание избежать ответственности.
Провидение было милостиво, я покинул ICO, не дожидаясь первой необратимой транзакции, но вскоре обнаружил себя за разработкой криптобиржи.
Я— решительно не Мальчиш Кибальчиш, и одного строгого взгляда достаточно, чтобы я сдал все ключи и пароли. Поэтому главной моей целью как архитектора было расположить раскаленное жало криптоанализа как можно дальше от дорогих мне элементов инфраструктуры.
Не твои ключи, не твои проблемы
Мы строим систему обмена активами и хотим исключить промежуточное хранение этих активов у себя, но должны обеспечить безопасность сделки.
Можно выступить в качестве судьи в спорной ситуации и проводить сделки с кошельками, требующими две из трех подписей: покупателя, продавца и эскроу.
Однако, если участник успешно атакует эскроу, то он получает искомые две подписи.
Атомарный своп— схема обмена, где гарантом выступает смарт-контракт, который допускает только честное поведение.
Словно в загадке про волка козу и капусту ты можешь действовать только по единственному правильному сценарию и несешь потери, если отступаешь от него.
Только вместо прожорливых животных порядок обеспечивает хэш функция, в которой так сложно найти коллизию, что не стоит и начинать.
Шаг первый: загадка
Предположим, что Алиса в одно прекрасное утро хочет передать Бобу биткоин за горсть “криптоюаней”.
Шаг второй: приманка
В игру вступает Боб и переводит“криптоевро” на свой контракт, который написан таким образом что:
Шаг третий: отгадка в приманке
Алиса приходит за своими деньгами и забирает деньги с контракта Боба, раскрыв при этом свой секрет.
Шаг завершающий: загадка разгадана
Транзакцию видит Боб, и орлиным взором вычленяет из нее секрет, предъявленный Алисой контракту. Этот секрет он использует, чтобы забрать уже свои биткоины.
Когда что-то идет не так
Если Алиса вдруг оказывается внезапно смертна, Боб в обед забирает свои юани.
В свою очередь, Алиса к вечеру возвращает биткоин, если вероломный Боб решает придержать деньги до лучших времен.
Если вы предпочитаете картинку тексту, на Хабре для вас есть более подробное и наглядное объяснение работы атомарных свопов.
Разница между таймаутами призвана застраховать нас от зловредной Алисы, которая забирает деньги Боба в самый последний момент, и таймаут истекает, пока тот дрожащими пальцами вбивает hex в транзакцию.
Участники не могут потерять свои деньги, максимум, придется подождать возврата.
Это простая, как валенок, схема, которая требует от взаимодействующих блокчейнов всего ничего:
На первый взгляд, уже можно сказать бирже “прощай, наша встреча была ошибкой”, но не тут-то было.
При всех своих достоинствах решения на atomic swap не поражают ликвидностью. Во многом потому, что в самой популярной паре BTC-USD фиатная часть была не вполне токенизирована.
Успех USDT породил целую волну стабильных монет формата ERC20 на любой вкус, от кастодиальнейшего USDC до алгоритмичнейшего DAI.
Поэтому для простоты мы рассуждаем далее о том, что Алиса продает Бобу биткоины за какие-то ERC20 токены, и надеемся на удачу стабилизаторов, благо у нас еще много более технических проблем.
Скорость
Биткоин и Ethereum и по отдельности не слишком быстры, а тут нам приходится ждать сначала один депозит со всеми подтверждениями, потом второй.
Это все потому, что сначала деньги вносит участник, которому известен секрет, а оппонент ждет финальности и только затем переводит свою часть.
Кроме того, мы имеем дело с весьма волатильным активом, так что за это время курс может весьма существенно измениться, а поменять условия уже непросто.
Конфиденциальность
Любой обмен оставляет артефакты на обоих блокчейнах. Внимательный наблюдатель может заметить одинаковые хеши в смарт контрактах и сделать логичный вывод, что тут свершилась сделка, из чего можно произвести массу умозаключений от курсовых до налоговых.
Usability
Конек блокчейна вообще и эфира в частности. Давайте посмотрим, какие телодвижения придется совершить продавцу и покупателю.
С точки зрения продавца все относительно просто: нужно просто перевести биткоин на p2sh адрес. С эфиром все гораздо хитрее.
Рассмотрим усредненный по гитхабу контракт для свопа:
Внимание! Не используйте этот и другие контракты из статьи на продакшене, они написаны исключительно для демонстрации. Особенно этот.
Сами пользователи часто ошибаются и просто переводят токены на контракт, после чего токены просто теряются. Комментарии на Etherscan полны стенаниями несчастных.
А чтобы вызвать контракт, нужно заплатить комиссию в ETH, значит оба участника должны запастись им перед началом сделки, а этим мало кто хочет заниматься.
Газголдер
Для начала стоит убрать проверку отправителя везде, где только возможно, и предположить, что у нас есть кто-то, страдающий от избытка газа и вызывающий контракты для всех желающих.
Контрактно-ключевой дуализм и EIP 712
Как мы знаем, адрес в эфире может быть контрактом, а может быть субъектом, сиречь ключем.
Главное занятие ключа— подписывать какие-нибудь сообщения.
Мы можем использовать в качестве отправителя Боб-контракт, который совершает все необходимые пассы, проверив перед этим подпись Боба-ключа.
Теперь, кто угодно может спонсировать комиссию участника, но принимает решение только тот, кому известен ключ.
Для работы с подписями сложных структур данных в Ethereum есть стандарт EIP 712, подробнее о нем вы можете прочитать в блоге кошелька Metamask
Разделяй и властвуй
Часто сценарий взлома Ethereum контракта выглядит так:
Создавая для каждой сделки отдельный контракт, мы можем изолировать контракты на уровне EVM.
Но и это еще не все: теперь каждая сделка имеет свой адрес, на который можно перевести токены с любого кошелька или биржи.
Брошенные контракты и create2
Но теперь для каждой сделки нам приходится создавать контракт и ждать пока покупатель переведет туда трудовой “криптофенинг”. В схеме “утром контракты, вечером деньги” всегда есть опасность, что покупатель отвалится, а эфир на создание контракта уже потрачен.
Нельзя ли сделать так, чтобы утром деньги, а вечером байты?
В хардфорке Constantinople разработчики EIP 1014 добавили инструкцию create2, которая создает новый контракт на детерминированном адресе
Инструкция работает только через assembly, поэтому фабрика выглядит несколько устрашающе:
Код вашего контракта можно получить при помощи web3:
Из-за ограниченной поддержке в solidity газ для контракта может расчитываться неправильно из-за некоторых тонкостей эфира.
Особенно мило, что в случае нехватки газа контракт падает с внутренней ошибкой, не сообщая при этом, что газа не хватило, как того можно ожидать.
Теперь мы можем переводить токены на контракты не создавая их заранее и пока мы их не опубликуем в сети никто не догадается, что именно делает контракт.
Ворон ворону глаз не выклюет
Понятно, что настоящего аналитика, особенно получившего хорошие инвестиции на борьбу с врагами режима отмыванием денег, такие детские хитрости не остановят, и после создания контракта он все равно увидит хэш.
Как сделать так, чтобы хэш не засветился?
Сам своп мы переносим в офчейн: участники обмениваются подписями для перевода на своп-контракт, а затем приватно раскрывается секрет.
Создаются два “мультисига”, с которых можно забрать средства при наличии подписей Алисы и Боба.
Дабы уход в оффлайн кого-либо из участников не стал трагедией, добавим старый добрый таймаут.
Алиса и Боб параллельно вносят депозиты
В этот момент наступает гармония: и Алиса и Боб могут в любой момент закончить сделку. В такой дружественной обстановке они могут обменяться подписями от для вывода денег на конечные адреса.
Для стороннего наблюдателя это выглядит как будто деньги прошли через контракт с мультиподписью 2 из 2.
А еще такая схема позволяет обеим сторонам делать депозит одновременно, так как секрет загадывается уже после всех подтверждений.
Level 2
Раз мы можем выводить деньги на один адрес и не публиковать промежуточную транзакцию, ничего не мешает нам выводить деньги на несколько адресов и совершать неограниченное количество промежуточных транзакций. Не то что бы это был необходимый набор для обмена, но если начал собирать своп, трудно остановиться.
Теперь Алиса и Боб смогут развернуться вовсю. Например, автоматически высчитывать среднюю цену, обменивая по сатоши в секунду, или просто напрямую соединить маркетмейкера и получателя ликвидности.
Теперь нам доступна высокоскоростная p2p торговля, главное следить за временем и закрыть сделку до таймаута.
Однако, немного поправив наши контракты, мы можем подарить нашим каналам бессмертие, что сильно упростит нам создание сети.