原文作者:hotshot⚡
原文地址:https://hackernoon.com/so-how-do-i-really-do-an-atomic-swap-f797852c7639
译者微博:@从流域到海域
译者博客:blog.csdn.net/solo95
Atiomic Swap, 直译原子交换, 在计算机科学中,原子操作是指密不可分的操作,即一系列操作要么都不执行,要么全部执行,不可分割。比如银行转账包括从A账户转出,B账户转入2个操作,为保证交易正常进行以及资金安全,这2个操作要么都进行,要么都不进行,银行作为第三方提供担保。加密货币中,是指在不依靠第三方的情况下进行2种不同加密货币的交换。(译者注,详见https://en.wikipedia.org/wiki/Atomic_swap,另外比特币专门有一个wiki网站:https://en.bitcoin.it/wiki/Main_Page)
Viacoin和Litecoin之间真正的原子交换(Viacoin、Litecoin是2种不同的比特币)
Crypto,Crypto,Crypto,现在大多数人都在谈论加密,加密技术的消亡,加密技术的革命,但是在这篇文章中我们不会谈论它,而是去做,去实际使用它。
我将向您展示原子交换在实践中是如何工作的,从代码角度来窥探它们背后的逻辑,以及实现达到最终结果的执行流程,即:
Alice拥有Viacoin,而Bob则是一名坚定的Litecoin拥护者,但他也想要Viacoin,因为他相信Viacoin有着光明的未来,所以Alice&Bob如何在不通过第三方的情况下相互交换一定数量的加密货币?
答案是Hashed Time-locked Contracts(哈希时间锁合约)**,简称HTLC。
简单地说,一个哈希时间锁合约是一种非图灵完备(non-Turing complete)的合同,它像需要用密钥才能解开的一个谜题,但需要求解者(在本例中,指Bob)提供在X时间前的密钥(x是任意指定的时间,译者注),否则他将丧失领取奖励的能力,并将其归还给合同的发起发起人。
在脚本(比特币脚本语言)中,哈希锁是满足一个条件的“事务谜题”,输入数据哈希值等于前一个块的哈希值,如下所示:
脚本是一种基于栈的语言。
原子交叉链交换是在两个区块链上发生的哈希锁合约,发起者将创建一个合同并锁定以Z个比特币代表的金额X,如果一个密钥提供了有效的密文,则在该合约有效时间段T内它可以移动锁定的比特币,如果这在时间T的末尾合约还没有完成,则合同被取消。
如果您从比特币原语的角度来思考它,它就是有意义的,它还显示了密码学如何使这一操作在简单的逻辑中安全无疑。
Alice在合同A中锁定了一些Viacoin,Bob在合同B中锁定了一些Litecoin,Alice给Bob一密钥来解锁锁定的Viacoins,而Bob也在最后做了同样的事情,Alice和Bob都主动分享密文,因为如果(交易失败)两人的比特币会自动回到他们各自的钱包,交换并没有发生。
要求:
首先,你需要安装两个节点,并按这里的描述配置它们使用testnet 。
场景:
atomicswap cli命令及其参数
在您的第一台机器上,您使用initiator blockchain发起合同。(即Alice的Viacoin)
一旦合同创建,Bob必然会对其进行审核,以检查是否:
Bob审核Alice创建的合同
如果一切都是正确的,Bob就会紧接着通过参与合同来锁定他的硬币。
轮到Alice审核合同
如果一切都被检查完(条件达成一致),Alice继续兑换她的Litecoins
现在对于Bob来说,一旦这笔交易实际公布后,Bob就可以提取Alice在开始时就知道的密文,密文将解锁Viacoin区块链上锁定的比特币,Bob就可以兑换了。
就在这时,比特币被解锁,原子交换完成。
该技术将真正实现去中心式交换,原子互换相当于没有信任机制和去中心的外汇交易。(去中心是指不需要像银行或者交易中心等第三方参与,也有分散交易的意思。)
实现主流可用性的道路还很漫长,我希望这将有助于把它构建起来,这是新协议的时代。