闪电网络简史:从头脑风暴到主网Beta测试(上)

目录

0/9 译注

1/9 最初的想法

2/9 第一个支付通道

3/9 第一个支付网络概念

4/9 闪电网络

5/9 闪电网络的各种实现

6/9 比特币协议更改

7/9 Alpha版

8/9 Beta版

9/9 作者手记


几周前,首个闪电网络实现lnd正式进入beta。紧接着在上周,第二个实现eclair进入beta,同时第三个实现c-lightning也有望很快beta。由此可以说:闪电网络这一万众期待的比特币网络之上的低费用即时支付网络,已经被多数开发者们认为足够安全,可以在比特币主网络使用了。

几年来加密货币技术发展的一个主要的里程碑正在形成。

0/9 译注

比特币无疑是本世纪以来最大的技术创新。分布式去中心、无须信任第三方的方式安全迅捷地进行价值的存储和传递,这是人类有史以来从未实现过的。通过比特币,人们第一次如此确信地攥紧了属于自己的财富,谁也拿不走。在数字时代,比特币这样的加密货币系统无疑将深刻改变整个金融体系,成为正在改变全球金融信仰的、数字世界的价值基石。

然而,比特币的广泛采用和交易量的迅速增长,使其容量不足的问题无可避免地凸显出来。每秒数笔交易的容量,与信用卡每秒数万笔无法相比。这成为比特币发展的巨大障碍。这个问题的出现、争论,和解决它的努力和尝试贯穿了整个比特币的发展历史,不但导致演化出了其他加密货币,也导致比特币本身多次分叉。在这个过程中,闪电网络,一个精巧、符合逻辑的设计逐渐成熟起来,2018年3月,按照这一方案实现的软件逐一发布Beta版本,并进入了主网测试的重要阶段。

这一发展历程有太多的曲折。其中一个很大原因是,很多人太迷信中本聪了。这些中本聪原教旨主义者们把中本聪近10年前的写下的想法和代码当作是加密货币的圣经,认为那是最正宗、最正确的,争相声称自己支持的分叉才是“中本聪”的比特币,其它都是山寨币。中本聪需要祛魅。我敢说10年或者8年前的中本聪,一定没有想到过如今闪电网络这种扩容比特币的方案。我们应该比当年的中本聪更有雄心和梦想,更有胆略和创新能力,解决目前的问题,让比特币继续向成为数字金融基石的方向迈进。

正如闪电网络的白皮书《比特币闪电网络:可扩展的链下即时支付》所说:比特币协议可以涵盖当今所有电子支付系统的全球金融交易量,而无须任何第三方来托管资金,只需参与者拥有比一台用宽带连接的电脑。

这是和中本聪发明比特币时一样的雄心。这篇论文,是中本聪的白皮书发布以来,加密货币领域内最重要的论文,是闪电网络发展的基础。

1/9 最初的想法

闪电网络最早的缘起可以追溯到比特币网络自身。

闪电网络的整个蓝图如果是一个大拼图,它的第一块碎片是一个叫做“支付通道”的概念。支付通道本质上是两个比特币用户共同的比特币余额,而且仅限于两个用户:其他人不需要知道或者不关心他们的共同余额。重要的是,在不需要任何比特币网络的链上交易的情况下,这些余额就可以更新;余额总数不变的情况下,属于某个用户的余额可以增加,同时属于其他用户的余额减少。这样,参与支付通道的双方可以进行交易,他们的交易数据不用整个比特币网络承担,即不用全部写入区块链。

当用户完成交易,仅向比特币网络传输一个交易,就可以结算他们的支付通道,这个交易基于他们各自在通道中的余额,向双方各自支付相应数额的比特币。这对用户来说有明显的益处,支付通道余额的更新(链外交易)因为无须支付矿工费所以更便宜,而且因为不需要区块链确认所以更快。

这个总体思路可以说和2009年中本聪最早发布的比特币软件一样古老。Bitcoin 0.1包含了一个原始代码草案,可以让用户在确认之前更新交易:

包含在Bitcoin 0.1中的支付通道代码草稿。 来源:GitHub

这个代码是一个粗略的草案。中本聪在当时bitcoinj开发者Mike Hearn进行私密交流中,讨论了支付通道如何工作的更多细节。

几年后的2013年,Hearn在Bitcoin-development邮件列表中发布了中本聪对支付通道的解释:

一个未记录的开放交易可以在nLockTime所标记之前保持可被替换状态。它可能包含多方支付。每个交易输入的所有者都要签署他的交易输入数据。对于要写入的新版本交易数据,交易的每方都必须签署更高的序列号(参阅IsNewerThan)。通过签署,交易输入的所有方说:“我同意把我的比特币放进来,如果所有人都把他的比特币放进来,那么交易输出就在这里。” SignatureHash中还有其他选项,比如SIGHASH_SINGLE,意思是:“我同意,只要这个交易输出(即我的交易输出)符合我的想法,我不在乎你如何处理其他交易输出。”如果写入的nSequenceNumber较高,除了该规定外,该方可以退出协商,或签署SIGHASH_NONE并完全退出。

各方可以通过使用OP_CHECKMULTISIG创建更高的nSequenceNumber 交易数据结构tx来创建预先约定的默认选项,该选项需要部分参与方签署以完成签名。各方保留这个交易数据结构tx,如果需要的话,签署后将它传递下去,直到有足够的签名。

nLockTime的一种用法是在一组参与者之间进行高频交易。他们可以通过一致同意不断更新交易数据结构tx。交易的支付方首先签署下一版本的交易数据。如果一方不再同意更改交易数据,则最后的状态将在nLockTime时记录。如果需要,可以在每个版本之后准备一个默认交易,这样n-1方可以将一个无响应方排除出去。中间交易不需要广播。比特币网络只记录最终结果。在nLockTime将要到时,交易各方和部分见证节点广播他们看到的最高序列号的交易数据结构tx。

Mike Hearn描述的中本聪对交易通道如何运作的解释。 来源:Bitcoin-dev邮件列表

2/9 第一个支付通道

尽管支付通道的总体概念一直存在于比特币本身,但中本聪的设计并不完全安全。最重要的是,支付通道中的用户可能会与矿工勾结,要求从支付通道余额支付给他更多的比特币。

中本聪离开比特币项目之后的2011年夏天,一个解决这个问题的方案被提出来。 Bitcointalk论坛用户“hashcoin”概述了一个双层支付通道,这一支付通道要求用户交换数个部分签名的多重签名交易,和带有时间锁的交易,时间锁依赖于另外一方交易数据的有效性。如果一位参与者消失了,另一位参与者可以在一段时间过去后要求获取支付通道中的所有资金。然而,“hashcoin”这种通道设计缺点是只能允许一个方向的支付。Alice可以支付任意次给Bob,但Bob无法通过同一通道支付给Alice。

一个与“hashcoin”想法类似的想法在2013年初重新出现,这一次它没有局限于理论领域。2013年4月,Jeremy Spilman在Bitcoin-development邮件列表中描述了一种支付通道概念。他甚至编写了用于概念证明的代码。这个设计由Mike Hearn进行了调整,之后,Chaincode Labs开发人员Matt Corallo(后来成为比特币核心贡献者及Blockstream联合创始人)在2013年中将该概念变成了bitcoinj的可工作的代码实现。

一年后,2014年,Alex Akselrod(现为Lightning Labs工程师)率先提出了双向支付通道。Alice可以支付任意次给Bob,同时,使用递减的时间锁,Bob可以在同一支付通道内支付给Alice,尽管次数有限。然而,与单向支付通道不同的是,该解决方案从未实现代码。

3/9 第一个支付网络概念

大约在第一个支付通道被提出的时候,包括比特币核心开发者Peter Todd和Gavin Andresen在内的一些人都在考虑“链下支付网络”。 如果Alice可以通过链下交易向Bob支付,并且Bob可以通过链下交易支付Carol,那么Alice应该能够通过Bob支付Carol,而无需进行任何链上交易。

Corné Plooy(现在是荷兰比特币交易所BL3P的闪电网络开发人员)也一直致力于比特币的支付层,他在2011年首次提出这个粗略的想法。

Plooy的支付层设计的早期图示,这一设计将演变为闪电网络前身Amiko Pay。来源:Corné Plooy

随着Gregory Maxwell(比特币核心开发人员,后来任Blockstream公司的CTO)以及Ripple发明人Ryan Fugger(以及其他人)加入的各种建议,这一想法经过数年时间逐渐演变为比特币与原始Ripple技术的合并,产生了Plooy称之为“Amiko Pay“的系统。Amiko Pay早期的草案并未使用支付通道,而是加入了必须信任系统这一条件。这样,如果一个用户拒绝与另一个用户结算余额,后者将无法追索。

利用支付通道的早期支付网络提案是由数学家和后来的Bitcoin emBassy TLV联合创始人Meni Rosenfeld在2012年夏季提出的。在Bitcointalk论坛上,Rosenfeld描述了一个系统,其中上述实例中的Bob被替换为一个支付处理器,Alice和Carol都是其客户。支付处理器还可以与其他支付处理器以及更多客户建立通道,将支付通道网络转变为中心辐射式系统。

然而这样的系统实实在在地引入了某种对支付处理器信任 – 它们可以拒绝转发支付并截留资金 – 尽管这种风险被认为很小:这种截留资金的诡计只要在一次支付中使用了,其后客户就会注意问题到并停止使用该支付通道。此外,较大的付款可以分成较小的增量,这样如果一个支付处理器被证明不可靠,只会丢失一小部分支付资金。

这种解决方案多年来一再浮现。Bitcoin Core的贡献者Peter Todd在2014年将该概念发布到比特币开发邮件列表。比特币支付处理公司BitPay也在2015年初发布了一个关于类似通道间支付(“Impulse”)的白皮书。这段时间内,瑞典初创公司Strawpay做出一个类似方案的实际实现,称为Stroem – 但这些迭代都未能产生有实际意义的影响力。

在建立一个无需信任的支付通道网络方面,Alex Akselrod做了相对较早的尝试。首次描述出现在2013年的wiki草案中,并在2014年一年的时间内做一个作为概念验证的实现。Akselrod的方案在朝向理论层面上解决问题的方向前进了一大步。这一方案主要问题是,在实践中仍相当笨拙。例如,如果一笔支付在交易数据传递路径的任何地方失败,则用户将无法索回,只能等待资金通过支付通道时间锁到期来释放,这可能需要数月。

2015年,Plooy的Amiko Pay进一步演进,在无须信任情况下也可能是可行的。然而,他的设计需要对比特币协议做出相对很大的变化,以适应回滚某些类型的交易的需要。虽然在技术上可行,但对比特币协议的这种改变是否会采用,答案并不明显。

同年,2015年晚些时候,苏黎世技术大学(现在是苏黎世联邦理工学院)的研究人员Christian Decker博士(现在Blockstream)和Roger Wattenhofer在他们的白皮书“一个基于比特币双工小额支付通道的快速和可扩展支付网络”中提出了另一种二层网络设计。他们的解决方案强烈依靠时间锁作为支付通道有效性的一种”倒数计时器“,在结合过期通道余额”invalidation tree“的加密方法一起使用。

Akselrod的方案,Amiko Pay的新版草案以及双工小额支付通道(DMC)在某些方面与闪电网络类似,并且可以通过做出不同的权衡来实际运作。如果闪电网络没有被发明出来,那么这些解决方案中的任何一个都可能成为比特币扩容层的基础。

然而,闪电网络被发明了。

(待续)

作者:Aaron van Wirdum

编译:Jeffery 无十三