7月10日,Qtum量子链基金会宣布实现QTUM-BEAM原子交换(Atomic Swap),原子交换(Atomic Swap)允许两个独立区块链上的加密货币进行原子性的跨链交易,QTUM和BEAM的原子交换成功象征着Qtum在隐私和跨链领域更进了一步。
前言
2019年1月,Qtum量子链基于Decred的支付脚本已实现QTUM-BTC原子交换,(回顾:Qtum 量子链实现QTUM-BTC原子交换),但由于区块链本身匿名性不足,更高程度的隐私保护仍然是一个急需解决的问题。
MimbleWimble隐私协议的出现给隐私领域指明了新的方向,Beam作为MimbleWimble的代表,在保护隐私的同时简化交易,具有良好的可扩展性。2019年6月,QTUM-BEAM原子交换代码被合入了Beam的主分支。目前,已经在Beam masternet和Qtum testnet成功进行了原子交换的实验,实现了完整的跨链价值流通。点击原文可查看:
https://github.com/qtumproject/qips/issues/22
背景
原子交换
原子交换(Atomic Swap)允许两个独立区块链上的加密货币进行原子性的跨链交易,这种交易无需依赖第三方的信任背书。原子性的意思是,要么交易成功,要么交易失败,不会存在第三种状态。
原子交换是一种技术,该技术允许您在没有第三方的情况下交易完成点对点交易。它们还会安排您与未知用户交易,而且无需信任。别人必须首先发送他们的资金,因为他们可能决定不履行他们的交易。原子交换使各方能够根据他们预先商定的条件,在无需信任的条件下,进行不同货币交换,而不必担心会损失资金。
如果Alice和Bob想交换某种数量的两种加密货币A和B,在没有使用中心化交易所的情况,两人需要就两种加密货币的汇率进行达成一致,然后通过原子交换,Alice将A发送给Bob,而Bob将B发送给Alice。
但是,区块链中的交易是不可逆转的,在没有中心背书的情况进行不同货币的交易就一定牵涉到操作先后的问题,如果Alice首先发送了他的A货币,那么Alice则处于不利的状态,因为她不能确定Bob是否会按照约定将一定量的B发送给她。
为了使分散的点对点交易能够顺利完成,就需要一种机制来保证双方不会发生欺骗,哈希时间锁(HTLC)是现在比较常用的解决办法。
HTLC
实现原子交换的主要解决方法是哈希时间锁(Hashed Timelock Contracts,HTLC)。其核心思想是将一笔交易锁住,只有当满足特定的条件下才能使用这笔交易。
假设Alice和Bob正在进行数字代币A和B的交换。Alice首先创建一个加密的数字密码箱,她将锁的规格告知Bob。并把数字代币A放入密码箱中,打开密码箱需要钥匙和Bob的签名。Bob将用相同规格的锁来创建一个类似的密码箱,解锁Bob的密码箱需要相同的钥匙和Alice的签名。
由于打开密码箱需要另一个人的签名,只有Alice可以打开Bob的密码箱,只有Bob可以打开Alice的密码箱子。当Alice打开Bob的密码箱时,钥匙会显示在区块链上。Bob可以使用Alice公布的钥匙打开Alice创建的密码箱以获得A币。如果出现问题或者一方在交易期间退出,即在约定的时间内密码箱没有被打开,根据HTLC的设计,数字货币会分别退回给Alice和Bob。
以上就是HTLC的设计理念,但算法的实际实现会更复杂,考虑的实际问题也会更多。
Beam
Beam是基于MimbleWimble协议开发的加密货币,具有强隐私性、替代性和扩展性。MimbleWimble通过将用户的身份和交易的金额等数据进行隐藏,从而保证了交易的隐秘性。
MimbleWimble需要交易的双方在发起交易之前进行交互以协商一些参数。因此,一笔交易的生成需要交易双方在线进行联合签名。值得一提的是,Beam提供了Secure Bulletin Board System(SBBS)的机制,以提供一个双方同时在线的缓冲时间。
功能实现
假如有两个用户Alice和Bob,Alice拥有BEAM,Bob拥有QTUM。Alice想用200个BEAM兑换Bob的80个QTUM。
交易流程
1.1 Bob生成Qtum Lock Transaction
Alice首先将自己的公钥传给Bob,Bob本地生成一个原像(Hash Preimage),计算其像(Hash Image),并利用Alice的公钥和像(Hash Image)生成一个有加锁脚本的交易,这个交易锁住了80个Bob的QTUMUTXO,只有当满足以下任一条件时,才能使用这笔UTXO。
-
原子交换约定的时间已过(通过当前块的高度来判断经过的时间),Bob通过使用自己的私钥来宣称对这笔UTXO的所有权。这个条件主要用于在原子交换因为某种原因失败之后,Bob有能力将这笔UTXO收回。
-
揭露原像(Hash Preimage),并使用Alice的私钥进行认证。这个条件主要用于正常情况下,Alice通过揭露隐私的原像(Hash Preimage),接受Bob发送给自己的QTUM。
Bob将生成的Qtum Lock Transaction发送给Alice,这样Alice就有能力在Qtum网络上验证这笔交易。
1.2 Alice和Bob协作生成Beam Lock Transaction和Beam Refund Transaction
由于Beam使用了MimbleWimble协议,其实现中摒弃了脚本,且隐藏了货币的金额等属性,故一笔加锁交易需要两个参与者协作产生。由于本文的重点是原子交换,故对MimbleWimble交易的生成过程不作过多介绍,详情可以参考Qtum量子链研究院:新型的隐私保护协议MimbleWimble。
Alice和Bob进行交互,包括blinding factor的协商、Bulletproof的签名等。从而生成一笔Beam网络上的加锁交易Beam Lock Transaction,这笔交易锁住了Alice即将转给Bob的一笔BEAM UTXO。由于交易中不存在脚本以判断分支,所以Alice还需要生成一笔Beam Refund Transaction,这笔交易将锁住的Beam UTXO转回给Alice。这是为了防止原子交换失败之后Alice能够拿回自己的BEAM。
1.3 Bob和Alice互相确定两笔UTXO已被锁定
当QTUM和BEAM的两个独自加锁交易完成之后,Alice和Bob需要分别查看两笔交易是否被正确地锁定。Alice还需要确定Qtum加锁交易的锁定时间是否比Beam的长,以防止Bob在得到BEAM时通过超时条件将QTUM收回。
1.4 Alice和Bob协作发起Beam Redeem Transaction
当双方确定了加锁交易的正确部署之后,即进入到了原子交换的交换货币环节。首先Alice和Bob进行基于MimbleWimble的交互协商,以生成一笔Beam Redeem Transaction,这笔交易将锁定的BEAM UTXO转到Bob的所属下。在交易的过程中,Bob会揭露由他自己生成的原像(Hash Preimage),Alice由此了解到原像(Hash Preimage)。
1.5 Alice发起Qtum Redeem Transaction
Alice在Beam网络中获得了Bob生成的原像(Hash Preimage)之后,在Qtum网络上发起Qtum Redeem Transaction,这笔交易将触发Qtum Lock Transaction脚本的第二个条件,通过揭露原像(Hash Preimage)和Alice的签名将QTUM转到自己的账户下。
1.6 原子交换完成
当原子交换的交易在各自网络中得到足够多的确认之后,整个原子交换过程结束。当有任何一个环节出现问题,导致原子交换不能进行,加锁交易保证在锁定时间后货币能够退回原来的账户。
更多详细介绍请参考BEAM原子交换:
https://github.com/BeamMW/beam/wiki/Atomic-swap
实验细节
1、首先配置Qtum的testnet环境,编辑用户主目录下的.zshrc,添加环境变量,q1t-dae和q2t-dae分别是Bob和Alice的Qtum节点服务,q1t-cli和q2t-cli分别是Bob和Alice的Qtum客户端命令。使用客户端命令可以与区块链进行交互。
2、使用./beam-wallet-masternet info命令查看两个用户账户下的BEAM余额,使用qtum-cli getbalance命令查看用户的QTUM余额。
可见,Alice拥有约347个BEAM和0.0022个QTUM。Bob拥有约295个BEAM和254个QTUM。
3、Alice和Bob进行原子交换,Bob需要开启原子交换监听的模式,通过在用户目录下运行
./beam-wallet-masternet swap_listen -n eu-node01.masternet.beam.mw:8100 --swap_netword testnet –swap_coin qtum --amount 8000000000 --swap_feerate 5000000 --qtum_node_addr 127.0.0.1:13300 --qtum_user Bob --qtum_pass 123 --log_level info
进行原子交换监听。节点首先会进行区块数据的同步,当同步完成之后,如果有节点发起了对自己地址的swap_init交易,便会开始原子交换交易。按照上述交易流程的顺序进行各个步骤的交易。
4、同时Alice运行
./beam-wallet-masternet -n eu-node01.masternet.beam.mw:8100 swap_init --swap_netword testnet --swap_coin qtum --amount 200 --swap_feerate 5000000 -r 1d8dfa6993230cfd1d84fc29ded73b04ee35ccbfdb9d112d466237dc30dc79470f9 --swap_amount 8000000000 --swap_beam_side --qtum_node_addr 127.0.0.1:13400 --qtum_user Alice --qtum_pass 123 --log_level info
命令,通过指定BEAM接受方的地址来初始化一笔原子交易。Alice节点首先也会开始同步区块数据,当完成之后会按照上述交易流程的顺序开展和Bob的原子交换。
5、双方等待BEAM和QTUM的两个区块链网络对各自的交易进行多次确认后(Qtum默认是10次),原子交换过程完成
Bob的客户端界面显示如下:
Alice的客户端界面显示如下:
6、通过查看Alice的账户,可以看到她已经接受到了来自Bob的80个QTUM并发送了200个BEAM给Bob,她现在拥有147个BEAM和80个QTUM。
7、 通过查看Bob的账户,可以看到他已经接受到了来自Alice的200个BEAM并发送了80个QTUM给Alice,他现在拥有495个BEAM和174个QTUM。
8、 在Qtum的测试网络浏览器上,可以看到关于QTUM原子交换的交易记录通过命令q2t-cli listunspent查询Alice拥有的UTXO的详细信息,得到一笔金额(amount)为80的UTXO的交易id是:
d11e3474ca070a7d673a7784775479277abb2f820b8575a66f9b2a3b89722702
在Qtum区块链浏览器(https://testnet.qtum.info/tx/d11e3474ca070a7d673a7784775479277abb2f820b8575a66f9b2a3b89722702)进行查询,可以看到这笔通过原子交换生成的交易确实已经写入区块链中。
总结
原子交换使用HTLC巧妙地避免了可能存在的点对点的信用欺诈问题,实现了在没有第三方背书的情况下不同加密币种间的交易。在支付、交易等场景中跨链技术支持大额交易在链上完成,不再被中心化管理风险与大额手续费用束缚。
2018年Qtum量子链联合伯克利大学研究零知识证明,今年6月Qtum量子链发起了全球首个线上隐私黑客马拉松,Qtum也将会在隐私技术和跨链领域进行深入探索,打通孤岛式数字资产的流通网络,将各独立经济体通过Qtum技术链接在一起,让全球市场价值交换更加安全、快速、自由,成为区块链行业发展的内在动力。