“打通”区块链:闪电网络即时跨链交易|比特币中文门户网站 比特币值得您拥有!

              本文重点:“打通”区块链:闪电网络即时跨链交易|比特币中文门户网站 比特币值得您拥有!

              编者按:今日(2017年11月17日)早间五点四十五分,闪电网络实验室在推特上发文宣布,他们成功完成了首笔从到莱特币的闪电网络跨链原子级交易。

              同时,推文上还附带了相关的说明公告,为大家详细地介绍了闪电网络是如何在链下实现跨链原子交易的。 隔离见证于莱特币以及网络相继激活之后,围绕着跨链原子交易的讨论以及实验也逐渐热烈起来。

              前段时间,莱特币创始人李启威和早期投资者RogerVer之间建立了一笔价值约8百万美元涉及1000个比特币的BTC、B2X(现已取消)间跨链交易。 此外,不少团队也在其他区块链间实现了这种无缝对接的交易(比如由AltcoinExchange测试的比特币兑以太坊交易)。

              而今天,闪电网络实验室则在比特币和莱特币的测试网络间完成了首笔闪电原子级跨链交易。 那么这究竟是什么呢?就是当两个人,比如Bob和Alice的数字货币资产处于两条不同的区块链时,他们可以通过这种原子级跨链交换技术直接进行安全地货币交换。 这种原子级跨链交易的执行只有两种结果,要么Alice和Bob之间成功完成数字货币交换,要么就什么都没有发生。

              这是至关重要的,因为它无需经过任何可信的第三方,也避免了欺骗等现象的出现。

              闪电网络上的跨连原子级交易具有不少可取之处,比如即时结算、提高交易隐私性以及降低交易手续费等等。 在闪电网络实验室看来,这种技术将有助于未来基于闪电网络的去中心化交易所的建立。 链上原子级交换关于链上原子级交换,我们将从一个简单的图表开始说起(点击这里可获取概念介绍)。 此外,在这里声明,目前出现了很多复杂的链上协议,但是闪电网络实验只专注研究其中一种。 上图大概描述了生成跨链原子级交易的过程。 不过要注意的是,编号仅代表交易签名的顺序,不表示其生成的顺序。

              向上的箭头代表着在双方区块链上交易的建立以及完成(可能),实线箭头用于表示成功交换之后的操作。

              为了方便接下来的介绍,我统一使用了闪电网络的相关术语来进行描述。 假设交易之前Alice有1个比特币,Bob有10个莱特币;经过跨链原子级交易协议的系列操作之后,Alice会按交易要求收到10个莱特币(6),而Bob则会收到1个比特币(7)。 我们把整个跨链原子级交换的过程可以分为两大阶段:设置阶段(setupphase:1-5)和认领阶段(claimphase:6-7),我们今天讨论的三种协议就是在这七个步骤中实现的。

              在进入认领阶段之前的任一环节中,Alice和Bob可以随时单方面终止交易,届时数字货币将会原路退回。

              一旦进入认领阶段,Alice和Bob便无法撤销交易且可在相应的区块链上获得数字资产。

              设置阶段设置阶段是为了在Alice和Bob间建立起足够安全的交易通道。 作为起始步骤,Alice会首先生成一个32字节的散列值x,作为原像,并进行加密——使用如SHA256等哈希函数计算出的哈希值H(x)来代表原像。

              然后,Alice会建立一个包含H(x)值的委托交易,也可以说是一个临时账户。

              而委托交易只会在以下两种情况其中之一成立时,释放出Alice暂存在里面的1个比特币:①Bob提交正确的哈希值,x;②48小时后系统自动退款。

              这意味着,Alice只要在规定时间前将x值告诉Bob,Bob就可通过提交x值来获得Alice的比特币。 而刚刚提到的退款协议则是在双方交易前签订的,用以确保交易无法进行时,相关数字货币可退回原持有者的账户。 不然,Bob就能故意不提供x值,使双重签名交易无法实现,而导致Alice的数字资产冻结在临时账户里。

              下一步,同样为Bob的10个莱特币建立安全临时交易账户,并依照Alice的顺序签订相关退款协议。

              不过,Bob协议上的超时交易退款时间设定为24小时,而非48小时。

              顺带一提,待会儿你将看到这种时间锁存在的重要性。

              当交易双方在各自的区块链上创建好相关的委托交易之后,设置阶段的工作就告一段落了。 认领阶段上面的步骤完成之后,Alice依然是唯一一个知道x值的人,所以她可以在这24小时内选择任一时间向Bob提出获得莱特币的要求。 另一方面,虽然Bob不知道x值,但是它能让Alice的比特币冻结48个小时。

              此外,由于双方的委托交易使用了相同的哈希值,所以只有当Alice告诉Bobx值是什么的时候,她才有获得10个莱特币的权利。

              总的来说,Alice想要获得Bob的10个莱特币,就需要释放自己的认领协议;否则临时账户中的数字资产将在相应时间后返还到双方的原账户中,回归原样。 那Alice应该什么时候释放她的认领协议(或者说将x值透露给Bob)呢?还记得吗,Bob退款协议的期限是24小时。 所以24小时内,Alice没有将含x值的认领协议给Bob,Bob就可以拿回自己的莱特币,并把Alice的比特币冻结在临时账户里,直到退款协议的48小时时间锁失效。 而Bob在拿到x值之后,他也有足够的时间考虑是否与Alice进行原子交换。 当Bob也给出正确的x值后,交易完成,双方立即获得自己所需的数字货币。

              那么,这和闪电网络有什么联系?虽然在Alice告诉Bob原像x的时候,认领阶段可能还会继续,但实际上他们已经锁定在交易完成的状态了,否则他们可能会面临丢失所有交易资产的风险。 此外,使用这种基于原像的模式进行交易,将能把等待交易完成的时间从一小时甚至是更长的时间,缩短至像发送32字节文件一样快。 你们可能会想,如果我们能建立一个更高速、去中心化的网络来发送这种匿名的基于原像的交易,不是更棒吗?先别急,看下面。

              在这些基础之上,闪电网络使用了一种特殊的支付方式,称为哈希时间锁定协议(HTLC)。 这种协议与我们上面提到的——使用退款协议来保证双方资产安全并使用原像来确认交易的例子有点相似。 从理论上说,他们之间唯一的区别是,闪电网络可使用的范围更广、延展性更高。

              简单起见,我们不全面地讨论闪电网络是什么,仅仅关注于如何在闪电网络和跨链原子交换中实现交易。 这里要注意的是,闪电网络的交易并不会广播到区块链上,但是方便起见你可以自己想象“交易链”的存在。

              任何一方在任何时候,都可以将自己的委托交易广播到“交易链”上,系统随时监测链上发出的含有x值的协议,以及过期等待退款的协议等等。 简单闪电支付上面是Alice通过Bob与Carol实现简单闪电支付的示意图。 这种交易方式由两条比特币支付通道和一条从Alice到Bob再从Bob到Carol的原子交换通道组成。 如果v是支付给Carol的金额,那么交易完成之后,Alice账户上会减少v个比特币,Bob没有变化,Carol获取v个比特币。 开始的时候,Carol会生成原像,x值,并把计算出的哈希值H(x)交给Alice。

              接下来,交易将进入设置阶段,也就是设定支付路线的过程。 整个支付路线(从Alice到Carol)搭建的过程中,将会使用同一个H(x)值来设定不同通道间的哈希时间锁定协议。

              此外,在支付通道中,越靠近Carol的支付通道的时间锁,时间越短。

              这样便可迫使支付通道间各环节能即时释放出x值,从而保证交易的原子性和一致性。 建立好安全的交易通道之后,我们接下来就要解决支付问题。

              在这种情况下,Carol将沿着支付通道将x值传回给Alice。

              也就是说,如果Alice从Bob中获得一个与H(x)匹配的x值,就代表交易已经成功,因为Bob获得x值的唯一条件是已经将比特币转给Carol。

              闪电原子交换上面我们已经为大家介绍了链上原子级交换与闪电支付,最后我们再介绍一下如何使用闪电网络实现跨链原子级链下交易。

              在简单闪电网络的支付中,Alice没有收到任何的钱。 这也是问题所在,交换意味着每一个发出方,在发送交易同时也应该接收到相应的交易。 所以我们为Alice构建了一条循环的通路来解决这一问题。 简单来说,Alice是路线的起点也是终点,是原子交换的交易发送方和接收方。 所以,为了让Alice在进行闪电网络跨链原子级交易过程中,能够和Bob实现比特币和莱特币的交换,她必须同时在两条链上开放支付通道。

              就像上图所示,实现交易的方法是Alice和Bob在两条链上都开通支付通道。 正因如此,Alice和Bob间的支付通道不一定要直接相连,因为支付通道是环状的,无论怎么样Alice都能通过支付通道与Bob建立联系。

              在构建起的环形支付通道中,Alice将比特币转移给Bob,Bob把莱特币转移给Alice;而Bob接收到的比特币和发送出的莱特币的数量比值,则反映出当下两种数字货币间的汇率。

              由于闪电支付的原子性质,交易过程只会出现两种情况,要么成功(完成交换),要么失败(返还各自原账户)。 实验简介下图使我们这次成功完成交易的截图,以莱特币兑比特币100:1的固定汇率进行的交易。 1、Alice在lnd(闪电网络守护进程)上查询与Bob的交换路线,并发出用100Satoshis(1Satoshis=)换取莱特币的请求;2、将交易路线放到lnd的sendtoroute功能中,它便能按照设定执行交易;3、如果交易成功,Alice将会第一时间将10000Litoshis传送给Bob,并随即收到100个Satoshis;4、最后,通道上余额量表示着,交易成功。 最后,你们可以点击这里观看我们第二次测试的相关视频;而我们使用的修改版lnd,可在Github上查看。 【重磅】粹客网旗下区块链研究小组哈希派正推出针对比特币扩容事件的系列专题报道,想要全方位了解扩容事件始末、掌握未来走向,请关注微信公众号“哈希派”。