10.1 闪电网络

10.1.1 闪电网络简介

比特币是现今最成熟的数字货币系统,无需任何中间人,用户可在比特币的网络里转移货币,实现对商品和服务的支付能力。 但作为实用的支付系统,比特币还存在着一些缺陷。如,比特币平均每秒只能处理大约7笔交易,全年的吞吐量约2.2亿笔,无法满足一个城市的基本需求;每笔 交易要等到1小时后才能基本确认;对微支付(micropayment)来说,交易费用可能太高。虽然有些方案可以提高比特币的性能,效果却不太显著。

闪电网络(Lightning Network)由Joseph Poon和Tadge Dryja首先提出,被认为是比特币创立以来最重要的革新。它利用了比特币的安全特性,在线下提供高速的实时交易处理能力。用户既可通过点对点的直接支付 方式,也可以通过网络路由的方式实现间接支付。闪电网络并没有发明新的加密形式,也没有使用新奇的比特币脚本,却巧妙地实现了离线支付的功能。目前闪电网 络还在实现阶段,相信不久将进入实用阶段。在其他加密货币(如以太币)系统中,也按照类似的原理实现了离线支付方案,如雷电网络(Raiden Network)。本节主要介绍闪电网络的工作原理。

10.1.2 支付通道的创建

在闪电网络提出之前,支付通道(Payment Channel)的概念就已经出现。支付通道可以实现某些特定场合的离线交易,但仅仅支持单向支付,有点像预付费的购物卡,只能不断地把钱从用户转向商 户。闪电网络对支付通道进行了扩展,实现了无需信任第三方的双向支付通道。

双向支付通道可由参与的双方共同发起一个交易来创建,实质上就是双方往一个多重签名(multisig)地址存入一定 数量的比特币。假定Alice打算给Bob发送1个比特币,Alice可直接在比特币的网络上广播一个交易,从Alice的地址转向Bob的地址。但是考 虑到两人经常有来往交易,他们决定向同一个地址X各转入3个比特币,X拥有6个比特币的未花费输出(UTXO)。由于该地址是2分之2(2-of-2)的 多重签名地址,因此需要两人同时签名才可以使用地址中的比特币。这个交易称为支付通道的“首次交易”(opening transaction),如图10-1所示。在向比特币网络广播“首次交易”之前,Alice和Bob各自确定一个随机数作为密码(secret),然 后对密码进行哈希运算,把哈希值(hash)告诉对方(密码各自保留)。在后面可以看到,这个哈希值和密码还可以用来取消过期的离线交易。

10.1 闪电网络

图10-1 支付通道的首次交易

接下来就是Alice和Bob各自创建离线交易,更改通道的离线余额。Alice创建的交易称作“承诺交易” (Commitment Transaction),是把首次交易中的输出地址X作为输入地址,发送2个比特币给自己,4个比特币给一个新的多重签名地址Y,如图10-2所示。这 个多重签名地址Y很特别,有两种花费方式:一种方法是Bob可以单独广播交易来解锁拿到4个比特币,但需要再等待1000个出块时间(从交易在区块链上确 认后算起),这是用比特币的CSV(CheckSequenceVerify)锁来实现的;另一种方法是由Alice单独广播交易来解锁,前提是 Alice得到和Bob的哈希值对应的密码。一般情况下,Alice是没有Bob的密码的,后面我们会看到在取消该交易的时候,Alice可以得到Bob 的密码。

10.1 闪电网络

图10-2 Alice发给Bob的不完整交易

Alice在上述交易中签名,由于输入地址X需要多重签名,这个交易还需要Bob的签名才能生效。Alice把这个缺 少Bob签名的不完整交易线下发给Bob(即不通过比特币网络),这点正是闪电网络设计精妙之处:Bob可随时在不完整交易中签名,然后广播到比特币网络 上去确认记账,也就是说,Bob任何时候能够确保自己获得4个比特币(需要等待1000个出块时间),而Alice可即时得到2个比特币。当然,Bob广 播这个交易的同时,地址X的余额被用完,支付通道也就自动关闭了(相当于清算了两人的账目)。这里看到,闪电网络不鼓励关闭通道,发起关闭交易的一方,会 比对方晚些获得比特币。

在Alice发给Bob不完整交易的同时,Bob也给Alice发送类似的不完整交易。不同的是,Bob的交易是给自 己4个比特币,将2个比特币发给另一个多重签名地址Z,如图10-3所示。同样,Alice可以从地址Z中拿走2个比特币(需等待1000个出块时间), 或Bob可拿走Z中的2个比特币(如果他知道Alice的密码)。

10.1 闪电网络

图10-3 Bob发给Alice的不完整交易

在Alice和Bob交换了不完整交易以及密码的哈希值之后,他们共同签名的首次交易就可以广播到比特币网络上去确 认,支付通道正式打开。上面已经提到,任何一方都可以从通道中退出并结算比特币余额,但是发起方会比另一方晚得到比特币。在不需要结算的时候,他们各自保 存对方发来的不完整交易。

10.1.3 支付通道的更新

过了一段时间,当Bob希望给Alice发送一个比特币这时候,他们可以在线下完成这笔交易,具体操作和上节的承诺交 易一样。Alice发给Bob一个不完整交易,给自己3个比特币,给Bob 3个比特币;Bob也同样发给Alice一个类似的不完整交易,给自己3个比特币,给Alice 3个比特币。和上次不同的是,Alice和Bob各自要使用新的密码,并和对方交换新密码的哈希值。这样操作之后,通道中Alice和Bob的比特币数目 将从2∶4更新为3∶3,实现了BoB转1个比特币给Alice的交易。

此刻,Alice和Bob各持有对方的2个不完整交易,为了防止任何一方广播已经过期的交易,闪电网络在更新支付通道 余额的时候,要求双方把上一轮交易中各自的密码发给对方,这实际上等同于作废了上一轮交易中双方持有的不完整交易。例如,Bob如果把旧的交易签名发到比 特币网络上(因为对Bob更有利),Alice可立刻得到2个比特币,Bob需要等待1000个出块时间才能拿到自己的4个比特币。可是在Bob等待之 时,Alice可用Bob的密码立刻取走Bob的4个比特币!所以,Bob不会发布过期的旧交易。同理,Alice也不会发布过期的旧交易,两人都会尽可 能地按照规则来办事。

10.1.4 支付网络的构建

支付通道解决了两个用户在线下直接交易的问题。但如果两个用户之间没有建立支付通道,他们怎样交易呢?闪电网络设计了 一种中间人方案:若Alice希望发送1个比特币给Carol,她们之间没有直接的支付通道,但她们分别和Bob有支付通道,于是可以通过Bob作为中间 人来支付。Alice把1个比特币给Bob,Bob再把1个比特币给Carole。

这种支付方法比较容易理解,在实施中需要解决各方间无信任的问题,例如,Bob需要确保他支付1个比特币给Carol 后,会收到Alice发来的1个比特币。闪电网络采用了HTLC(Hashed Timelocked Contract,哈希时间锁合约),来保证交易能够畅通进行。

在HTLC中,Alice不会直接发送1个比特币给Bob,而是发送1个比特币给一个多重签名地址Q,如图10-4所 示。地址Q有两种解锁方式:用Bob的签名加上其他人设置的一个密码;或者Alice用本人签名解锁,但需要等待一段时间,例如30天。这样的方式相当于 在30天内,Bob如果得到密码,就可以用签名拿走地址Q中的1个比特币;如果Bob在30天内没有提供密码,被认为超时(timeout),Alice 可以从地址Q中拿回自己的1个比特币。

10.1 闪电网络

图10-4 Alice和Bob的HTLC交易

同样的,Bob和Carol也设立这样的HTLC,并且满足两个要求:采用和Alice-Bob的HTLC相同的密 码,以及稍短一些的超时设置,如29天。Bob-Carol的HTLC超时要比Alice-Bob的HTLC要早,目的是确保在Bob支付了Carol之 后,可以从Alice取回相应的比特币,而不是因超时Alice取回比特币。因此,在HTLC中,采用了 CLTV(CheckLockTimeVerify)锁,来确保在未来特定时间点(如某个区块高度)超时解锁。

从Alice到Carol的整个支付过程如图10-5所示。首先Carol随机生成一个密码R,再把R进行哈希运算后 得到H(R),然后将H(R)发送给Alice。Alice用哈希值H(R)作为CLTV锁,创建和Bob的HTLC合同,包含1个比特币,有效期30 天。Bob用同样的H(R)哈希值打开一个和Carol的HTLC合同,也包含一个比特币,有效期29天。

10.1 闪电网络

图10-5 Alice、Bob和Carol的HTLC

在29天内,Carol可以提供密码R,来解锁Bob的HTLC,从而得到1个比特币。Bob也看到了密码R,他可用R去解锁Alice的HTLC,也得到了1个比特币,这样就完成了从Alice到Carol的支付,如图10-6所示。

10.1 闪电网络

图10-6 Carol用R解锁Bob的HTLC后,Bob也可用R解锁Alice的HTLC

如果在29天内Carol没有拿走比特币,因为Bob的HTLC已经超时,Bob可以取回自己的比特币;因为Bob没有Carol的密码R,无法取走Alice的HTLC中的比特币,Alice等到第30天,也能取回自己的比特币,如图10-7所示。

10.1 闪电网络

图10-7 超时后,Bob先赎回比特币,Alice随后赎回比特币

闪电网络还可以通过多个中间节点实现转账,像互联网的多节点路由一样,只要两个用户之间存在一条通路,就可以按照上述原理进行支付。

10.1.5 支付通道的关闭

上文已经提到,Alice或Bob两人都可随时把最新的不完整交易签名后发布的网络上,从而关闭支付通道,发起关闭的 一方需要等待较多的时间才能拿到自己的比特币。当然,双方也可以协商共同发布一个正常的交易,按照大家认可的余额比例来转移首次交易中的输出,双方都无须 等待时间,离线的所有不完整交易也同时作废。

10.1.6 小结

闪电网络实现了在离线环境下提供比特币交易的方式,在支付通道打开后,参与方可离线发生任意数量的交易,而无须广播到 比特币的网络上,从而大大提高了交易速度,也减轻了比特币网络的压力,这将成为比特币很重要的功能。目前,闪电网络依赖的一些必要的软件升级,如隔离见证 (Segwit)等已经基本就绪,闪电网络本身的实现也即将完成,相信不久将进入使用阶段。


来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=998

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();