原子跨链交易

最近复习一篇以前看过的16年的论文,发现里面居然好无聊的提到过跨链问题,称为原子跨链交易。想起前几天跟朋友聊天刚提到过这事,据说还很有市场,于是便想着找找,找来找去找到了一个Wiki,https://en.bitcoin.it/wiki/Atomic_cross-chain_trading。随意的翻译看看,学习一下。

今天在网上看到有个写翻译稿的,稍微看了看,想起自己的翻译稿,知道翻译稿大致上只是给翻译的人自己看,和给看原文的同学们参考的,直接看翻译稿,还是比较痛苦的 :)

~~以下为翻译稿~~

问题描述

原子跨链交易的问题是这样一个问题,涉及至少两个参与方,例如Alice和Bob,这些参与方分别拥有不同的密码货币,希望在不涉及第三方的情况下完成交换。一个非原子的平凡解决方案是Alice把她的比特币发送给Bob,然后Bob把他的密码货币发送给Alice,然而Bob也可以不遵守协议,单方面终止,既得到了比特币也没有损失代币。

解决方案之一:揭开你的盖头来

基本思想是使用公平交换协议,基于比特币合约和锁定时间操作符。下面是一个解决该问题的算法,描述可以追溯到TierNolan,该算法以其它的方式由其它人描述过,包括Mike Hearn。

A选择随机数x;

A生成交易TX1,“给w比特币给B,条件是(输入中包含x使得H(x)与这里的相同,并且有B的签名)或者(有A和B的签名)”

A生成交易TX2,“给TX1的w比特币到A,条件是锁定48小时,A签署该交易”

A发送TX2给B

B签署TX2返回给A

1) A提交TX1到比特币网络

B生成交易TX3,“支付v个代币给A,如果(输入中包含x,并且有A的签名)或者(有A和B的签名)”。

B生成交易TX4,“支付TX3的v个代币给B,锁定24个小时,B签署该交易”

B发送TX4给A

A签署TX4并返回给B

2)B提交TX3到代币网络

3)A解锁TX3,解密x

4)B解锁TX1,使用x

这是一个有超时的原子。如果该过程终止了,不管是什么时间终止的,协议都是公平的。

在1)之前,没有新的交易记录到区块链中,没有任何事件发生

在1)和2)之间终止,A可以在48个小时后把钱拿回来

在2)和3)之间终止,B可以在24小时后把钱拿回来,A还要多等24个小时

在3)之后终止,交易已经完成了,当然

A必须在24小时内解锁她的新代币,否则B就能把钱要回去了

B必须在48小时内解锁他的比特币,否则A就能把钱要回去了

为了安全,双方应该早在时限到期之前就完成交易,(避免网络延迟和出块延迟的问题)。协议的关键在于A获得B的钱需要提供x,与此同时,B就可以获得A的钱,正应用了12年的公平交换协议的精髓。

使用特定链的方案

上述方法可以用于直接交易比特币和各种基于比特币脚本的代币。一个明显的缺点在于锁定时间。如果交易对手终止,交易方的钱会被锁定一段时间,无法再次用于交易。另外,交易需要使用脚本锁定操作。

另外一种跨链的点到点交易是使用特定代链,可以快速交易,且使用比特币的最简交易形式。假设代链是有价值的,它甚至可以作为有效的零信任的点到点市场的中介,例如在BTC和LTC之间,这归功于套利做市商。

算法

假设Alice有代币,Bob有比特币。

Bob生成并且签署Bitcoin交易,计算交易的txid。他发送txid和交易体(即不包含交易脚本/签名)给Alice。

Alice计算交易体的哈希值,姑且称为blankhash,使用bitcointxid (blankhash, txid) 操作符构造交易,广播交易给代链

Bob等待代链确认Alice的交易,并校验它的输出(按照后面的规则),之后他发送自己的交易给Alice,Alice会广播它到比特币网络。Alice这样就得到了Bob的比特币,但是与此同时Alice在代链中的交易的操作符校验为真了。

注意到Bob只有在等到代链充分确认了Alice的交易之后,Bob才会把他的比特币交易给Alice。在等待期间,双方都可以取消交易。

上述操作之所以成立,是因为代链规则是很特殊的

操作符和代链规则

bitcointxid脚本为真当且仅当txid(以及blankhash能够对应交易体)在比特币区块链中被确认。(也就是代链需要咨询比特币网络),并且它的输出是可以消费的。

代链中的交易总是可以被确认的,即使txid和blankhash没有在比特币网络中出现。

代链中的交易在bitcointxid被验证为真之前,输出是不可用的,反而输入却可以被包含在另外一个交易中。但是当bitcointxid验证为真之后,输入就不可以再用了。

可选的,在确认bitcointxid为真时可以使用比特币区块数目参数,即指定比特币交易被确认几次后bitcointxid为真

代链中可以多次使用同一个输入,这些相同输入的代链交易中最先把bitcointxid验证为真的交易成为有效的,其它的就无效了。

~~以上是翻译稿~~

小结

在Wiki的介绍中,有两种跨链交易方法,一种是基于公平交换协议的,采用了同时揭盖头的方法。一种是基于特定跨链区块链的,该区块链规则较为特殊,指定了专门的操作符,绑定比特币就可以交换代币和比特币,绑定莱特币就可以交换代币和莱特币,进而如果该币有公允值,就可以作为基于链的无中心的交换代币。

后记

有人专门在研究跨链,有一个帖子http://www.8btc.com/elwingao-blockchain-8,还有一个帖子http://www.sohu.com/a/219830841_100108683,有兴趣的同学要仔细看看了。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180424G1PVL000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券