根据侧链白皮书里的说法,资产之间的原子交换是,要么完全完成,要么根本不发生,不应存在会导致资产损失或允许欺诈产生的失败交易模式。也就是说,这交易具有原子级别的刚性。
这名字意会意会就行了,接下来我们看看它的具体实现原理。
假如现在要用侧链技术在比特币和莱特币两条链之间进行资产互换,A在比特币区块链上有地址A1,A1上有1个比特币,在莱特币区块链上有地址A2。同理,B在比特币区块链上地址B1,在莱特币区块链上有地址B2,B2上有100个莱特币。A和B通过原子交换的方式,将这1个比特币和100个莱特币进行兑换。
第一步:A准备一个秘密数a。
第二步:A在比特币的区块链上构造一笔交易,从A1地址发送1个比特币到一个特殊的输出M1(请注意,M1只是一个输出,不是一个地址),这个输出的锁定脚本是精心构造的,要想拿到这1个比特币,解锁脚本要满足以下条件:(1)提供秘密数a和B1的签名;或(2)A1和B1两个签名。这笔交易构造后,不广播。
第三步:A构造第二笔交易,将输出M1上的比特币转回给A1,但带有48小时的时间锁定。根据第二步我们知道,第二笔交易要成功执行,也就是A要拿回自己的这1个比特币,必须要B1的签名。所以,A将第二笔交易单独发给B,要求B1签名。
第四步:如果B1不愿意签名,因为A的第一笔交易并没有播布,大家都没损失,只不过双方的原子交换就玩不下去了。如果B1签名了,那么A就有底了,于是广播第一笔交易到比特币区块链上。A的1个比特币暂时锁定在输出M1。
第五步:同样地,B也构造一笔交易,将B2的100个莱特币锁定在输出M2上,解锁的条件是:(1)提供秘密数a和A2的签名;或(2)A2和B2双方的签名。接着,B再构造第二笔交易,将币从M2转回给B2,同时要求A2签名。
好,现在双方都相互提供签名了,接下来就是原子交换的执行。
这个执行是由A发起的。因为只有A知道秘密数a,于是他可以利用条件(1),将M2输出上的100个莱特币,转移到自己的莱特币地址上。但同时,他也把秘密数a个暴露了,于是,B也可以利用条件(1)将M1输出上的1个比特币转移到自己的比特币地址上。这样,双方的互换就完成了。
在这个过程中,似乎A占优势,他既知道秘密数a,也有自己构造的第二笔交易的B2的签名,那他是否可以在将莱特币转到自己账上后,又马上利用自己构造的第二笔交易,把比特币转会给自己呢?其实不行的。因为他的第二笔交易有个附加条件,要锁定48小时才生效。这就让B有充分的时间先将比特币转走。
所以,在这个过程中,一开始拥有秘密数也占不到什么便宜,双方仍是对等的。也完全可以是B准备一个秘密数b,然后按上面的原理进行操作,效果是一样的。
不投资毋宁死
自由,就是拥有选择的权利,而每一次选择都是一次投资。
谢谢阅读
✬如果你喜欢这篇文章,欢迎分享到朋友圈✬
评论功能现已开启,灰常接受一切形式的吐槽和赞美☺
领取专属 10元无门槛券
私享最新 技术干货