Бездоверительная межсетевая транзакция с биткойнами — есть ли недостатки?

Допустим, Алиса хочет отправить Бобу 1 BTC, а взамен Боб отправит Алисе 1 ETH.

Биткойн-адрес Алисы — BTC_A, а адрес Алисы в Ethereum — ETH_A. Точно так же Бобу принадлежат адреса BTC_B и ETH_B.

BTC_B — это «свежий» адрес, без какой-либо истории транзакций.

Алиса создает одну транзакцию в ETH_A, содержащую немного больше суммы, которую она отправит Бобу, и транслирует ее. Хэш этой транзакции будет называться tx1.

Боб ждет подтверждения этой транзакции, а затем создает смарт-контракт со следующими (неизменяемыми) параметрами:

inputaddr, установите BTC_A

inputtx, установите tx1_txhash сверху

выходной адрес, установленный в BTC_B

minfee, установленная на «разумную» плату за биткойн/байт, в зависимости от текущих условий сети

время ожидания, устанавливаемое на количество секунд, по истечении которых транзакция с minfee будет подтверждена в блокчейне BTC, плюс значительный запас для безопасности

val устанавливается на сумму, представляющую 1 BTC, или сколько Алиса отправляет Бобу

Боб также вносит 1 ETH в смарт-контракт и не может его вывести.

Алиса отправляет транзакцию tx2 в блокчейн Биткойн со следующими свойствами:

  • inputtx - его единственный ввод
  • outputaddr - его единственный выходной адрес
  • плата > минимальная плата
  • подписано BTC_A

Она также отправляет всю эту транзакцию в смарт-контракт, который проверяет эти четыре свойства. Если все они выполнены, отметьте время как txtime.

Боб будет постоянно следить за блокчейном Биткойн, и если Алиса попытается дважды потратить входную транзакцию, он отправит транзакцию двойного расходования в смарт-контракт. Смарт-контракт проверит, является ли эта транзакция законной, и, если она не идентична первой транзакции, отправленной Алисой ранее, вернет ETH обратно в ETH_B.

Боб также сможет вывести заблокированный ETH, если Алиса не отправит транзакцию BTC в контракт в течение разумного периода времени.

Если время ожидания истекло с момента txtime, а Боб не представил доказательства двойной траты, Алиса может вывести заблокированный ETH на ETH_A на досуге.


Это похоже на то, что кто-то уже придумал, но я не смог найти других ненадежных примеров обмена BTC-ETH. Есть ли принципиальный недостаток в этой системе?

Проблема с вашим подходом заключается в том, что вы можете отправлять поддельные транзакции в контракт, и контракт не может проверить, были ли они добыты или нет в блокчейне биткойнов. Возможно, вам придется использовать BTCRelay, но он очень устарел.
@Ismael, разве Боб не может отправить эти транзакции, поскольку они были подписаны Алисой и теперь общедоступны?
Биткойн-транзакция все еще имеет некоторые проблемы с пластичностью, возможно, что B может манипулировать tx2 из A и получить действительную транзакцию, которая имеет те же свойства, что и tx2, но не такие же, поэтому они будут выглядеть так, как будто A вызывает двойную трату.
@Ismael Исходя из того, что я читаю в биткойн-вики, вы можете избежать гибкости, принимая только транзакции, которые точно соответствуют спецификации, и кажется, что сеть Lightning также полагается на негибкие транзакции.

Ответы (1)

Это было реализовано Комодо .

Я также разработал образец контракта атомарного свопа между цепочками (для цепочек, совместимых с BIP-199). Вы можете посмотреть репозиторий здесь

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