闪电网络(Lightning Network)学习总结

Posted CNFINITE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闪电网络(Lightning Network)学习总结相关的知识,希望对你有一定的参考价值。

一、背景

  • 比特币是一种加密货币,因其去中心化、不可篡改等特性避免了传统金融体系可能带来的风险,受到了越来越多的关注。但是,随着比特币的发展,其设计之初的一些欠缺逐渐显露出来,其中非常严重的问题就是可扩展性问题
  • 支付网络Visa,2013年就在其网络上实现47000TPS,而比特币由于区块大小的限制,最多支持7TPS。如果每次比特币交易我们平均用300字节,并假设块大小无限制,达到与Visa峰值47000TPS的交易量等数据容量意味着每十分钟每比特币区块将近8千兆字节数据。持续下去,每年数据将超过400万亿字节。显然,在比特币网络上获得Visa级的交易能力是不可行的。没有家用电脑有那样的带宽和存储。
  • 要使用比特币实现远高于每秒47,000笔交易,需要在比特币区块链本身之外进行交易。2015年2月Joseph PoonThaddeus Dryja两位技术宅在论文“The Bitcoin Lightning Network:Scalable Off-Chain Payments”中提出了基于比特币的链下扩展方案:闪电网络
  • 众所周知,比特币网络至所以是可靠的、值得信任的,一个很重要的原因是因为每笔交易都是公开在链上的(on-chain),需要网络上节点的认可的,所以交易的任何方没办法反悔、抵赖。现在要链下交易(off-chain Transaction),没有了区块链网络,怎么保证交易的双方不会反悔、抵赖?

二、技术原理和过程

2.1 LockTime & Sequence Number

2.1.1 LockTime

LockTime字段是Transaction级别的,每个Transaction有1个LockTime字段,是用来锁定区块高度,也就是当区块到了设定高度,交易才可以被打包。由此看出它表示的是绝对时间,用的是整个区块链的长度,或者时间戳来表达的。下图为LockTime值的含义。

K4VtSA.png

2.1.2 Sequence Number

Sequence Number是Input级别的,1个Transaction有多个Input,每个都对应1个Sequence Number。它是交易可替换的标志,默认是UINT_MAX= 0xffffffff = 4294967295。它是一个相对时间,表示的是当前交易所引用的UTXO所在的块,后面追加了多少个块。意思是达到所追加的块数后,交易开始打包。下图为transaction的部分结构。

K4VaOP.png

中本聪最初设计两个值的构想:

1、发送一笔交易时LockTime设置为非零某值, Sequence为非最大值;
2、在LockTime到达前,可以用新版本的交易代替旧版本的交易,Sequence大被认为是新的

2.2 如何建立双向支付通道

2.2.1 通道的融资交易 Funding Transaction

闪电网络的设计是:交易双方想要建立双向支付通道进行转账,首先需要最初的通道融资交易Funding Tx,是通过一个或者两个通道交易的双方为Funding Tx提供资金(如下图:Alice和Bob各提供0.5BTC),资金锁定在Funding Tx交易中,就像一个钱箱子一样,并由交易双方进行签名,只有交易双方都同意拿出资金,才能从钱箱子里拿出钱。

K4VNQI.png

2.2.2 承诺交易 Commitment Transaction

在未广播的Funding Tx创建后,双方签署并交换初始Commitment Tx。这些Commitment Tx来自于Funding Tx的双重签名输出。但是,只有Funding Tx在区块链上广播。来自Funding Tx的所有其他交易尚未广播,以防交易双方希望更新其余额。

K4Vq61.png

为了更新余额,他们必须更新他们的Commitment Tx输出值。如果Alice和Bob现在同意通道余额为0.4给Alice和0.6给Bob,并创建一个新的Commitment Tx来反映这一点。

K4VUyt.png

从上图中可以看出,Alice和Bob可以广播任何一个Commitment Tx。但是这样会产生新的危险:产生新的Commitment Tx后,资金较少的一方有显著的动机广播在Commitment Tx输出中对其自身价值较大的交易。也就是说,在图中,Alice为了自身的利益会广播左边的旧交易,这样的话,Bob的资金将被窃取。显然,在这种模式下无法建立支付通道。必须要知道是谁广播了旧交易,并对其进行处罚,这就需要归责。

归责:在支付通道中,交易双方合约承诺只广播最近的交易。任何对旧交易的广播都将导致违反合同,所有的资金都将作为罚款给予交易另一方。所以,交易双方都需有一个唯一可识别的Commitment Tx:双方必须签署交易另一方负责广播的Commitment Tx的输入。由于一方拥有由另一方签署的Commitment Tx版本,因此只能广播自己的Commitment Tx版本。K4VzkD.png

这样的模式可以识别出谁违反合约承诺,广播了旧交易,但是还未做到对其进行惩罚。为了能够实际执行合约承诺只广播最近的交易,有必要构建一个能够撤销一个交易的Commitment Tx。当交易一方广播了旧交易后,延迟其获得自己在通道中余额的时间,以供交易另一方有时间证明其违反合约承诺,并对其进行惩罚。

2.2.3 可撤销的序列成熟度合约(RSMC,Revocable Sequence Maturity Contract )

如何来延迟广播交易的一方获得自己余额的时间呢?这就用到了2.1.2节介绍的Sequence Number。利用Sequence Number,在该交易UTXO所在块后有Sequence Number数个块确认才有效。在这段时间,交易另一方可以立即广播一个证明的交易来撤销广播交易的一方获得自己余额的交易,对其惩罚。

K4dFiQ.png

从图中的Commitment Tx (C2a)可以看出,C2a的outputs有两个,output1是Bob拿回自己在通道中的余额,output0是一个RSMC。从RD2a来看,该交易只有在所在块后有Sequence Number数个块确认才有效,也就是说,如果在这时间之前Bob拿出了Alice广播旧交易的证明,那么Alice就拿不到自己的余额,但如果在这时间内Bob没有拿出证明,Alice会在RD2a交易生效后广播,拿到自己的余额。

那Bob拿出的证明是什么呢?违约救济交易Breach Remedy Transaction。当双方达成新的Commitment Tx 对(C2a/C2b)时,双方将为新的Commitment Tx 签署并交换签名,然后使旧的CommitmentTx 无效;该无效宣告是通过**双方签署违约救济交易Breach Remedy Transaction(BR1)**而发生的,BR1取代了可撤销支付交易(RD1)。

K4ZFXt.png

例子:如果Alice和Bob都生成了一对新的Commitment Tx (C2a/C2b):Alice支付给Bob 0.1BTC,并且取消了之前的Commitment Tx (C1a/C1b),并且后来Bob在区块链上错误地广播了C1b,那么Alice可以从该通道中拿走Bob的所有余额。Alice可以这么做,因为Bob已经通过BR1向Alice证明了他永远不会广播C1b,自从他广播C1b的那一刻起,Alice就可以把Bob在这个通道的所有余额都拿走。

2.2.4 执行结算交易 (ES,Exercise Settlement Transaction)

如果交易双方是合作的,希望拿回通道中的各自的余额并关闭通道,那么交易双方可以用当前Commitment Tx中的余额,并从Funding Tx中执行结算交易Exercise Settlement Tx(ES) 。

K4BMo8.png

执行结算交易的目的是减少区块链上发生的交易数量且交易双方能够立即收到他们的资金,而不是一方等待撤销支付交易RD生效。

由此,双向支付通道就安全的建立好了。这个过程中,只有在交易双方最初建立通道时的Funding Tx是上链的以及在最后结算最终通道钱包余额状态是上链的。对于中间交易双方相互之间的转账产生的余额状态改变都是放在链下的,避免了比特币链上交易效率的限制,实现双方小额交易的即时支付。

2.3 如何跨多节点实现通道支付

上一节描述的双向支付通道只能实现通道内的安全交易。但是,不可能在闪电网络所有节点间都建立双向支付通道,那样就构成了一个全连接网络。因此,必须有一种方案来实现在没有建立双向支付通道的两个节点间的安全交易,也即是要使用跨多个节点的通道网络构建安全传输到最终目的地。该方案的核心就是哈希时间锁定合约HTLC。

2.3.1 哈希时间锁定合约 (HTLC,Hashed TimeLock Contract)

HTLC的目的是允许通过hash跨多个节点实现全局状态。这种全局状态由时间承诺time commitments和基于时间的资源无阻碍(通过公开原像)time-based unencumbering of resources via disclosure of preimages来保证。

HTLC是通过区块链强制执行的与一个交易另一方的通道合约。在一个通道的交易另一方同意以下条款为一个哈希的时间锁合约:

1、如果Bob可以从已知的哈希H中产生一个未知的20字节随机输入数据R,三天之内,Alice将通过向Bob支付0.1 BTC来解决合约问题。

2、如果三天过去了,那么上述条款无效,清算过程无效,双方不得试图在三天之后结算和索赔。

3、只要本合约双方当事人同意,任何一方都可以(也应该)按照本合约的条款以任何方式选择并提前终止本合约。

4、违反上述条款将使本合约中锁定资金的最高罚款,作为保真保证金支付给未违反上述条款的交易另一方。

为了使示例更清晰,我们使用days表示HTLCs,使用block height表示RSMCs。

实际上,这种付款方式取决于接收者在一定时间内对R的了解。在此时间段之后,资金将被退还给发送者。例如:如果Bob在三天内知道R,那么他可以通过广播交易来赎回资金;Alice不能以任何方式扣留资金,因为当交易广播在比特币区块链上时,脚本返回为有效。

在交易中,HTLC是Commitment Tx中的一个输出:

K4V1oD.png

从概念上讲,这个脚本从单个HTLC输出有两个可能的路径。第一个路径(在OP IF中定义)将资金发送给Bob,前提是Bob能够生成R。第二条路径是被赎回,使用 3 天timelock退款给 Alice。为期 3 天的 timelock 使用来自于交易的 LockTime 执行。

2.3.2 不可撤销的 HTLC 构造 Non-revocable HTLC Construction

从脚本及下图可以知道单个HTLC输出有两个可能的执行路径。如果Bob能在3天内生成原像R,他就能执行路径1,获得Alice支付给他的0.1BTC。三天后,Alice可以广播路径2。当3天过去后,任何一个都是有效的。

K4ZIDP.png

然而,此模型不能用于多个Commitment Tx,关闭HTLC是绝对必要的。因为为了让Alice得到她的退款,她必须终止合约并收到她的退款。否则,当3天后Bob发现R时,他可能会偷走本该属于Alice的资金。

对于不合作的交易对手,如果不将HTLC广播给比特币区块链,则无法终止HTLC,因为不合作的一方不愿意创建new Commitment Tx。

2.3.3 链下可撤销HTLC Off-chain Revocable HTLC

为了能够在不向比特币区块链广播的情况下终止HTLC合同,需要在输出中嵌入RSMCs,其结构与前面描述的双向通道类似。

K4V8Fe.png

以Alice广播C2a的时间为起点为例,如果Bob没有此后三天内提供前像R,那么Alice有权收回这0.1个比特币。但是Alice广播了C2a,Alice要拿回资金会比较波折。为此,Alice在C2a广播三天后,广播HT1a(HT1a的output包含了一个RSMC)。在HT1a获得1000个确认之后,Alice再广播HTRD1a,此时,Alice就可以从中获取0.1个比特币了。值得注意的是,在Alice广播HT1a之后,广播HTRD1a之前,Alice与Bob可以协商达成一个新的花费交易来替代当前HTLC。

2.3.4 流程:A fully revoked commitment Tx and terminated HTLC

K4VGJH.png

上图中,Commitment 3是最近的交易。

2.3.5 例子:Payment over the Lightning Network using HTLCs.

K4VJWd.png

Alice想向Eric转账1BTC, 因为Alice并没有直接跟Eric建立通道,但是有一条到Eric的路径:Alice——>Bob——>Carol——>Diana——>Eric。

首先Eric生成密钥R,并将密钥R的哈希H给Alice。Alice向Bob发起了一笔commitment Tx,一共1.003BTC,output指向持有Eric提供的密钥R的收款人。因为Bob并没有密钥R,所以他转而向跟他建立通道的Carol发起一笔commitment Tx,一共1.002BTC,这样如果Carol能向他提供密钥R的话,他转可以获得1.003-1.002=0.001个BTC, 因为Carol也没有密钥R,所以他向Diana发起另外一笔1.001BTC的commitment Tx,期望Diana能给他密钥R,最后到达了Eirc,他提供了密钥R,因此所有人都获得了对应的commitment Tx,交易完成。

三、优缺点

3.1 优点

3.1.1 Scalability

比特币网络将需要支持更高数量级的交易量,以满足自动支付的需求。未来联网设备的增长需要一个机器对机器支付和自动微支付服务的平台。闪电网络交易是在区块链之外进行的,没有授权的信任和所有权,允许用户在其他设备之间进行几乎无限的交易。

3.1.2 Instant Payments

比特币将交易聚合成间隔10分钟的区块。人们普遍认为,在确认了六个区块(约一小时)后,比特币上的支付是安全的。在闪电网络中,支付不需要阻止确认,而且是即时和原子的。Lightning可以用于零售销售终端,用户设备到设备的交易,或任何需要即时支付的地方。

3.1.3 Micropayments.

小额支付的可能性可以打开新的市场。闪电使人们可以将资金发送到0.00000001比特币,而无需承担保管风险。目前,比特币区块链的最低输出规模是比特币的数百倍,每笔交易收取固定的费用,这让微支付变得不切实际。闪电允许使用实际的比特币交易进行最低限度的比特币支付。

3.1.4 Cross-Chain Payments.

Alice使用比特币,Bob同时使用比特币和x币,Carol使用假设的x币,Alice可以在不了解x币共识规则的情况下支付给Carol。

3.2 缺点

3.2.1 Complexity of channels.

理论上,闪电网络的链下交易应该是无缝交易的,但是若付款者采取过于过于复杂的路线,不确定会发生什么,通道太多,费用也会增加。跨多节点支付的路径问题也是制约闪电网络广泛应用的瓶颈。

3.2.2 Routing concentration.

对于拥有大量资金的节点,大多数交易都将通过这些节点,会使得网络进一步中心化,虽然这些中心并不能获取重大的利益。

3.2.3 Economic fluctuations.

在闪电网络中交易,交易双方必须提交超过交易额度的资金,这样才能使交易通道打开并有效的资金流动性。但是大量资金锁定在在支付通道里,意味者必须承受市场的波动。

四、参考文献

[The Bitcoin Lightning Network_ Scalable Off-Chain Instant Payments.pdf](The Bitcoin Lightning Network_ Scalable Off-Chain Instant Payments.pdf)

lightning-network-presentation-sfbitcoinsocial-2015-05-26.pdf

lightning-network-presentation-time-2015-07-06.pdf

lightning-network.pdf

http://www.lightning.network/

https://www.cnblogs.com/dgutfly/p/10796024.html

http://www.sohu.com/a/302182618_489821

https://www.ucloud.cn/yun/24315.html

https://www.sohu.com/a/227799336_100137203

https://blog.csdn.net/chunlongyu/article/details/80417309

https://www.jianshu.com/p/05a298fbf88f

https://blog.csdn.net/mongo_node/article/details/85986365

https://www.cnblogs.com/dgutfly/p/10781174.html

以上是关于闪电网络(Lightning Network)学习总结的主要内容,如果未能解决你的问题,请参考以下文章

用Liquid网络学习比特币闪电支付

Flalsh Lighting Network(闪电网络)

比特币闪电网络代码解析

探究Lightning(闪电)接口

谷歌前产品经理Michael Levin加入Lightning Labs担任产品增长主管

Salesforce闪电了