Что такое своп в космосе
Принципы работы и особенности применения 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) — это операция по обмену одной криптовалюты на другую, которая может быть реализована мгновенно без необходимости полагаться на требующую доверия третью сторону (посредника) в лице биржи или обменной платформы. В результате контроль над сделкой осуществляют исключительно участвующие в ней стороны.
Атомарные свопы могут осуществляться как ончейн, то есть напрямую между блокчейнами разных криптовалют, так и офчейн – за пределами блокчейна. Первый такой обмен был совершен 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% всех существующих монет и токенов.
ПРИМЕРЫ СО СВОПАМИ В ТРЕЙДИНГЕ И ПРИНЦИП «ТЫ МНЕ — Я ТЕБЕ»
Своп в трейдинге — это термин, значение которого сводится к временному обмену любыми активами в процессе торговли на бирже. Трейдеры меняются определенным количеством активов на время, потом возвращают друг другу то, чем обменялись. Звучит несколько бессмысленно — это как два приятеля, которые поменялись равноценными автомобилями, чтобы покататься на машине друга, свою предоставить на время ему, а потом каждый возвращает чужое имущество в руки хозяина. Какой-то особой выгоды здесь не видно. В случае со свопами картина выглядит иначе — в подобном процессе обмена есть очень даже большой смысл. Простыми словами своп — это обоюдная выгода для обоих трейдеров. Он помогает увеличить сумму активов, хеджирует риски, дает возможность получить доступ к рынкам другой юрисдикции и соответственно прибыль. Если на первом этапе трейдеры обмениваются активами, то на втором происходит возврат, который является закрытием сделки.
КАКИЕ БЫВАЮТ СВОПЫ
Валютные свопы
Они улучшают структуру активов, позволяют финансировать различные операции, а также страхуют риски. Самая простая механика валютного свопа — это когда трейдеры временно обмениваются валютой. При первичном обмене они покупают друг у друга валюту на одну и ту же сумму и сразу договариваются о будущем возврате активов через конкретный промежуток времени. Естественно, что на дату закрытия сделки уже будет другой курс. Поэтому одна сторона получит прибыль от данной сделки, вторая — соответственно, убыток.
Свопы на форекс
Прибыль от разницы курса валют и величина прибыли/убытков будет существенной, если открыть сделку больше, чем на неделю. Причем серьезными потерями такой промежуток не угрожает при наличии достаточного кредитного плеча и видимых колебаний курса. Если вы занимаетесь внутридневной торговлей, то не имеете права держать открытой потенциально выгодную сделку из-за положительного свопа. По правилам вы должны все позиции закрыть в течение дня, иначе вас ждут штрафные санкции. Свопом на форексе считается сделка, которую брокер переносит на следующий день и получает за нее комиссию. Такое явление существует только на форексе. Но какой-то прибыли от него трейдеры обычно не имеют. Для расчета подобных свопов применяется специальная таблица брокера.
Есть два исключения на форексе, когда можно открыть безсвоповый счет:
Это ограничение оправдано тем, что только именно при одном из этих двух условий от свопа может получиться существенная прибыль или по закону противоположности значительный убыток (темную сторону луны никто не отменял). Когда вы регистрируетесь в системе и открываете счет для свопа, обязательно оставьте отметку в необходимой графе, чтобы вам не открыли стандартный трейдерский депозит.
Акционные свопы трейдинге
Свопы на акциях — это когда происходит обмен потоками платежей, при которых учитываются величина биржевого индекса и процентной ставки. Иначе говоря, здесь имеются в наличии две составляющих — непосредственно акции и фиксированные/плавающие процентные платежи. Свопы на акциях расширяют возможности инвесторов вливать капиталы в фондовые биржи развивающихся стран, к которым относится и Россия.
Свопы процентные
Это когда стороны обмениваются процентными ставками по кредиту. Простой пример процентного свопа — у одного трейдера ставка по проценту, трейдер хочет уменьшить риски и перейти на фиксированную. У другого трейдера фиксированная ставка, и он в ожидании снижения ставки желает перейти на плавающую. Две стороны договариваются об обмене ставки и от разницы ставок извлекают прибыль.
Свопы на сделках с драгоценными металлами
Это сделки, при которых покупают/продают драгметаллы, а потом торговая операция происходит в обратную сторону.
Кредитно-дефолтный своп
Данный инструмент является подстраховкой от возможных убытков при дефолте — он хеджирует риски от дефолта, отсюда и название. Такие свопы были оценены по достоинству трейдерами, которые сняли хорошую прибыль от кризиса 2008 года — именно тогда обрушились кредитные рынки.
КАКИМ ОБРАЗОМ СВОПЫ ХЕДЖИРУЮТ РИСКИ ТРЕЙДЕРОВ
Финансовые рынки трудны для освоения в том плане, что их трудно прогнозировать. Котировки валют и процентные ставки по разным инструментам всегда могут измениться в невыгодную для трейдера сторону. Риск того, что придется фиксировать потери от закрытой сделки слишком велик. Идея сделок со свопами дает шанс свести потери к минимуму. Когда два трейдера по свопам обмениваются активами и достигают договоренности о проведении обратной сделки и заранее фиксируют будущую цену обмена активов, они тем самым равномерно распределяют риски для обеих участвующих сторон. На высокую вероятность потерь влияет развитие рынка, своевременность контрактов, которые позволяют каким-то образом компенсировать большие скачки котировок или цен на активы.
А если применять свопы грамотно, можно существенно повысить прибыль от своих финансовых операций. Что надо знать о заключении своп-контракта:
Механика хеджирования рисков методом свопов сводится к тому, что предоставляются встречные кредиты с равнозначными суммами в разных валютах и одним сроком погашения.
КАК ИЗВЛЕКАЮТ ДОХОД ОТ СВОПОВ В РОССИИ
В России больше всего популярны кредитно-дефолтные свопы. Из-за отсутствия стабильности в экономике при стандартных сроках по кредитным обязательствам слишком высок риск того, что деньги обесценятся. Тем более, что кризис обычно касается всех участников — и заемщиков, и кредиторов. Степень риска зависит от того, в какой валюте оформляли кредит, какая была ситуация на внутренних финансовых рынках и международных. Курс иностранных валют по отношению к российскому рублю обычно резко меняется без видимых причин. Кредитно-дефолтные свопы в данном случае играют роль своеобразной страховки. Заинтересованная сторона регулярно или одноразово выплачивает определенную сумму ради того, чтобы когда случится дефолт, получить компенсацию (страховку), которая погасит убытки обесценивания денег и банкротства заемщика
Сделка может проходить в формате поставки физических активов, когда они выкупаются по заранее оговоренной стоимости при наступлении неблагоприятных событий. Дефолтные свопы гораздо выгоднее классической страховки — эксперты считают, что кредитными рисками легче управлять, чем валютными или процентными. Более рисковые сделки характерны для российских компаний, ведущими бизнес с иностранными партнерами.
Своп в трейдинге — это взаимовыгодная двухэтапная сделка, которая позволяет увеличить объем активов и будущую прибыль, страхует обоюдные риски. Свопы бывают процентные, кредитно-дефолтные, акционные, с драгметаллами и на форексе. Есть и другие, но это уже из разряда высшей математики. А мы пока рассматриваем базовые явления. По российскому законодательству трейдеры имеют право применять свопы на различных инструментах, но реально используют в торговле всего несколько. Самый популярный своп — кредитно-дефолтный. Прибыль от свопов формируется от разницы курсов валют или процентных ставок. Торговать на свопах очень непросто, надо оперировать сложными формулами, чтобы рассчитать стоимость инструмента. Без серьезного обучения в эту нишу трейдинга даже соваться не стоит, иначе наломаете дров и сольете депозит.
Если вы уже торгуете со свопами, то поделитесь опытом в комментариях — что из этого у вас хорошо получается, а с чем испытываете трудности? На какие вопросы о свопах ищете ответы? Пишите там же — обязательно ответим со всеми подробностями или запишем для вас отдельное видео на эту тему.
Блеск и нищета 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 торговля, главное следить за временем и закрыть сделку до таймаута.
Однако, немного поправив наши контракты, мы можем подарить нашим каналам бессмертие, что сильно упростит нам создание сети.