Nervos Fiber Network 学习1:闪电网络介绍

bitget消息:这段时间在研究闪电网络,这是被认为最有可能实现比特币点对点支付愿景的一个方案。

这个方案实在是超级复杂,学得有点辛苦,感觉脑细胞死亡的速度要以每秒来计算了,头发掉落的步伐也在日渐提速。每天红枣,桂圆,当归,黄芪,玉灵膏,桑葚膏都上齐了也顶不住。

不过还好,学了半个月,基本上理清了思路。

这是闪电网络学习的第一篇:闪电网络基本介绍

主要内容

什么是闪电网络?闪电网络对比特币扩展的逻辑闪电网络的构成闪电网络的运行

第一部分:闪电网络介绍

1. 什么是闪电网络?

1)概念

闪电网络是一个运行在比特币主网之上的二层扩展方案,一种去中心化的链外扩展方案,被认为是最符合中本聪思想的比特币扩展方案。

扩展的是什么?

闪电网络主要是针对比特币区块链性能的扩展,而不是功能的扩展。

具体包括提升交易的处理速度,增加能够处理的交易数量,降低交易所需的成本,支持小额交易。

闪电网络的交易处理能力只受互联网带宽以及交易双方的交互速度限制,理论上其TPS没有上限。虽然单个闪电通道的TPS是有上限的,但是整个网络的TPS是由通道数量与单个通道TPS的乘积,而闪电网络中的通道数量是没有上限的,因此闪电网络的TPS也是没有上限的。

就目前来说闪电网络的TPS理论上可以实现 4000多万,刚刚截了图,数据上闪电网络的通道数量截至今天是48504个。单个通道如果按照1000TPS来计算,整个网络的TIPS就是4850万,如果单个通道按照500来计算,就是2425.2万。这个数据相较于比特币的7 TPS, Visa 理论上的几万级别,以及支付宝峰值时候的20多万级别。

在交易费用这个维度,如果交易双方有支付通道,完全可以做到0费用,就像两个人面对面的交易,不需要支付手续费。如果需要借助第三方节点来中转,费用也非常便宜。

上图是今天在1ML截图的两个公用节点收费情况,OKX 的收费是0.0000003美金/聪,转账100美金收费大概0.06美金;而 Alias 的收费更便宜,转账100美金,只需要0.00012美金手续费。

在转账金额要求上,支付的最少金额可以低至0.00000001比特币,大概为0.00065美金,只要交易对方愿意接受,很微小的金额你也可以支付。

在交易容量上面,因为交易发生在两方之间,数据只保存在交易方自己的设备上,不需要其他节点帮助存储,只要你的设备够用,交易数的容量几乎也是没有限制的。

在所有这些维度,可以说闪电网络完全能秒杀其他一切最牛逼的支付系统。

这些扩展使比特币能够实现在日常生活中的使用场景,比如零售付款,用户与用户之间进行的,点对点,高频,即时,小额,低成本的付款或者交易。因此根本上说闪电网络扩展的是比特币的使用场景,让比特币从价值存储的用途回归到点对点的现金支付系统的用途,这也是中本聪在白皮书中对比特币系统的定义:一个点对点的电子现金系统。

今天在听付少庆老师的分享时,他有一个观点是,未来Web3的大规模应用只可能基于闪电网络+RGB协议之上进行构建。只有闪电网络有可能把TPS和交易容量做到无限大,而把交易成本做到无限小,其他的任何公链,二层扩展,甚至是Web2 和中心化的方案都做不到。

闪电网络概念的缘起

闪电网络最初的来源是中本聪在 2009 年发布的 Bitcoin 0.1 软件中包含的一段代码草稿。根据这段代码在一笔交易被比特币网络确认之前,用户可以对这笔交易进行修改和更新。代码见Github链接。

https://github.com/trottier/original-bitcoin/blob/master/src/main.cpp#L434

这就是支付通道的工作模式,这里所说的对交易进行修改和更新就是放在链外支付通道中实现的。

2011 年,中本聪在跟当时的 BitCoinJ (开源比特币客户端库)开发者,时任Google 的高级软件工程师和技术主管的 Mike Hearn 进行的邮件往来中对这种模式进行了解释:“nLockTime 的一个用途是在一组参与者之间的高频交易,它们可以经过一致同意后不断对交易进行更新。如果一方不再同意继续更新,那么最后的状态将会在 nLockTime 被记录。中间交易事务不需要广播,网络(比特币区块链)只记录最终结果。”

这是中本聪对支付通道的解释,也是闪电网络最早的思想来源。

完整的闪电网络方案在2015年被提出,智能合约交易平台Mirror 的CTO, Thaddeus Dryja 和 Joseph Poon 在2015年2月首次发表了题为《比特币闪电网络:可扩展的链下即时支付》(The Bitcoin Lightning Network: Scalable Off-Chain Instant Payments)的论文,被认为是《闪电网络》的白皮书。

之后闪电网络的开发落地由闪电实验室,Blockstream,ACINQ等团队实施和完成,并得到了 Jack Dorcey 等比特币OG的支持和追捧。

2)思路

闪电网络的思路是在比特币区块链外面(或者上面)增加一层,用户能够在这一层的任意两方之间创建通道,日常和高频发生的交易就可以放到这些通道中去处理。

因为通道是直接在交易双方之间建立的,所以交易几乎可以即时完成,所需要的费用也可以忽略不计。而且只要通道里面的资金没有被消耗完,通道就可以一直存在,双方可以在里面来来回回进行不限次数的交易。这个通道是用来实现支付交易的,所以被叫做支付通道。可见这个通道只是建立在交易方之间,并没有放到区块链上,因此交易不需要通过矿工处理,而是交易双方自行处理。

3)为什么闪电网络能够实现这些扩展?

比特币交易性能低下的底层逻辑

比特币处理交易的性能难以提高,根本原因是它的区块链设计所限制。为了保证去中心化和网络安全,比特币采用的是全员共识机制,即一笔交易的确认,一个区块的产生都需要经过所有矿工和全节点的计算和验证,通过验证才意味着一个区块上链成功,交易才算得到一个确认。

同样为了维持系统去中心化,比特币规定了一个区块的大小上限为4M(隔离见证之前是1M),这就意味着一个区块中能够容纳的交易数量是有上限的。

另外为了维持经济模式合理性,即控制比特币新币发行速度和节奏,比特币的出块速度也是确定的,平均每10分钟出一个块,这种规定意味着每10分钟能够处理的交易数量也是有上限的。

总结一下就是比特币的区块链要求更多的节点数量,更大的算力保障,其分布式共识机制要求尽可能多的节点参与到计算和验证的共识过程中以确保交易的安全和可靠,为了减小节点负担对每一个区块的大小做了限制,另外比特币经济系统的稳定性要求挖出每一个区块所需要的时间平均为10分钟。这些设计共同决定了比特币系统的去中心化,安全性,可靠性,稳定性以及经济模式合理性,从另一方面它也决定了如果不修改区块链的底层设计,比特币交易的性能就不可能进行大幅度提升。

闪电网络扩展交易性能的逻辑

核心在于闪电网络放弃了区块链的思路,让交易仅仅发生在交易方之间,不上链,取缔了矿工和节点,也取消了区块链共识,出块等过程。记账不再由矿工完成,而是交易方之间私下记录,链下记录的账目也不需要广播给其他通道的节点知道,交易计算和验证也由交易方自己处理。

因此由区块链本身的设计所导致的问题,比如交易处理速度,交易手续费,区块对交易数的容量限制,链上所能记录和保存的数据大小等等限制都可以消除。

在交易对手方之间发生的交易,就如两个人面对面的线下交易,不存在交易数量,手续费,以及等待他人确认等问题,这种方案理论上可对这些问题进行以无限制的扩展。

2. 闪电网络的构成

任意交易双方之间都可以建立双方的支付通道,因此在比特币区块链之外可以建立很多个甚至无数个不同用户之间的通道。这些很多个通道合起来就形成了一个通道网络,也就是闪电网络。

所以可以理解为闪电网络包括了很多个用户之间的支付通道,还有建立通道的用户,也就是闪电网络节点,另外应该还包括通道中所存放的资金,因为每个通道的开通都需要参与通道的双方在里面存入一定BTC作为这个通道的支付额度。

3. 闪电网络的运作

闪电网络的流程从整体上来说可以分为开启通道,通道内(链下)交易,以及关闭通道三个环节。

其中开启和关闭通道是通过在比特币链上分别发起一笔交易来完成,而通道内的所有交易都发生在链外,不需要在区块链上发起,不需要广播给他人,不需要在链上记录,不需要在主网进行处理和确认,也不需要上链。因此在闪电网络进行无论多少次交易,不论是几百次,几千次,还是几万次,如果两方最后结算并关闭通道了,也只有两笔交易会进入区块链。如果双方就在通道中交易,不结算,就只有一笔交易进入区块链。

1)开启通道

开启通道实际上就是交易参与方创建一个多重签名的比特币钱包地址,并往多签地址里面冲入资金。因此支付通道可以理解成连接支付双方的一个虚拟通道,而从根本上说它只是一个建立在比特币链上的多签钱包地址,类似一个没有私钥的智能合约地址,或者由双方共同管理的公共账号。

这个通道里面能够进行多大金额的交易,是由开启通道时往里面冲入的资金金额决定的,这就是这个通道的支付额度。

充值交易是这个通道流程中的第一笔交易,被称为锚点交易,这笔交易需要广播并记录到比特币链上,让所有人都能够看见,见证这个通道的开启。

开启通道的目的是为了简化之后频繁发生的交易过程,缩减这些交易的成本,以及能够容纳更多的交易数量,因此建立这个通道的双方之间一定会有经常性的转账,支付或者交易行为,如果两个人之间并没有高频交易的需求,那就没有开启一个支付通道的必要,毕竟开启通道也是需要在比特币链上去发起一笔交易,而且还要往里面冲入一定数量的比特币,占用一定的流动性。

2)通道交易

开启通道之后,通道双方就可以通过通道进行私下的交易。因为通道是建立在比特币区块链之外类似二层这样的概念,因此通道里的交易可以理解成是二层交易或者链外交易。

通道中的交易其实并非真实的BTC交易,而是按照BTC交易的格式双方在私下记的账,因为原生比特币的所有权被锁定在一层多签地址持有的UTXO里面,并没有转移到链下的地址上;而且链下的交易也没有解锁比特币链上的UTXO。因此链下通道内的交易并不会真正转移比特币的所有权,而是依靠双方的记录和一整套机制维护一个类似资产负债表的账本来进行管理和确认。

不过虽然通道交易并没有影响链上的BTC所有权和余额状态,但是这些交易都是符合比特币协议的,随时都可以广播到链上去花费充值交易中的多签UTXO。这些交易有点类似你在自己钱包中创建一笔付款交易,但是并没有发出去,而是保存在本地,如果不发出去它就不会影响你在比特币地址中的余额,但是如果发出去并且被确认了,那么你指定的那个UTXO就会被花费,而且余额也一定会被扣掉。因此如果通道中的交易发到链上结算了,就变成真正的BTC交易了,链上的多签UTXO就被花费了,但是通道也就关闭了。

通道内的交易叫做承诺交易,承诺交易的流程大概是创建交易,签名,以及向对方发送交易这样三步。 这只是非常简化的理解,实际上支付通道内的交易机制非常复杂,而且不同的通道方案设计的机制也不一样,因为通道交易毕竟是在链下双方之间发生的,没有经过区块链这个信任机器的生产,所以需要通过各种设计来保证陌生人之间点对点资金转移的安全和可信。

每一次通道交易,双方的余额会发生一次变动,双方就会进行一次承诺交易的创建,签名和交换,这意味着账本上的一次结果或者状态更新。这些交易和状态都不会广播和发布到比特币链上去。

通道内的交易,只有支付额度这一个限制,只要交易双方没有关闭通道的想法,并且额度没有用完,通道就会一直存在,就可以一直进行来回的交易。双方的余额状态可以不断的发生变化,只要双方构建承诺交易的速度跟得上,多少次都可以。

每一次产生了新的承诺交易,老的交易状态就会作废,防止交易的任何一方把之前的交易状态发到链上去进行关闭通道的操作,从而进行有利于自己的欺骗行为。这种机制保证了只有最新的一笔承诺交易是有效的。

3)关闭通道

关闭通道就意味着交易双方退出通道,拿回属于自己的比特币金额,之后不能在通道当中继续进行交易。通道的关闭可以是双方同意之后再提出,也可以由单方提出。

只要交易的任意一方不想继续维持通道,都可以发起关闭通道的交易。关闭通道的操作是在比特币主网发起一笔“结算”交易,需要把通道交易中最新的状态,也就是最后一笔承诺交易广播到主网。

关闭通道时有一方会把最新的承诺交易提交到比特币一层去验证。验证的过程主要是针对主动发起结算和通道关闭的一方,因为只有发起方才有作弊牟利的可能性。验证会有一个期限,具体多久看时间锁的设置,主要是防止发起方提交了过期的交易状态进行有利于自己的作弊行为,这段时间另一方可以进行检举。

在一方发起关闭通道的交易中,另一方是不需要等待的,结算交易被广播的时候立即就能拿到自己的资金。

如果在检举期另一方没有提交新的承诺交易,就会默认没有问题,结算发起方的资金会被赎回,交易会立即完成。

当然关闭通道也可以由双方共同协商,向链上发起行权结算交易。这样双方都不用等待时间锁,可以立即拿回自己的资金。

以上是闪电网络的支付通道运行的基本原理。

具体实现过程还涉及很多的问题,比如在通道中如何防止交易方作弊,如何保证资金能安全到达对方,如何保证交易方的隐私,跟任何人转账如果都需要建立通道是不是太麻烦了等等。这些问题需要深入到RSMC合约,哈希时间锁,多跳路由等机制和原理中去,以后再写。

未完待续。。。。。。