就在几周前,第一个闪电网络的官方测试版——lnd——正式发布,其第二个版本——eclair——也在上周进行了部署,而闪电网络的第三个版本——c-lightning——预计也会很快实施。因此,人们期待已久的以廉价和即时的方式进行交易的比特币覆盖网络——闪电网络被许多开发商认为是安全的,同时它也可以在比特币的主网上使用:这是多年来相关开发者一直在努力达成的技术的一个重要里程碑。
以下是关于闪电网络从概念孕育到最近测试版本实施期间的故事。
关于闪电网络的第一个想法
闪电网络最早的起源可以追溯到比特币本身。
闪电网络拼图的第一部分可以从一个叫做“支付渠道”的概念说起。支付渠道本质上是两个比特币用户之间的比特币余额,这个渠道连接的只有两个用户:世界上的其他人不需要知道或关心他们的共同余额是多少。更重要的是,这些余额可以在不需要进行任何比特币链上交易的情况下进行更新;当一个用户的余额增加时,另一个用户的余额就会相应减少。实际上,这一过程允许参与者相互之间进行交易,这样就不会使他们的交易数据对整个比特币网络带来负担。
一旦用户完成了交易,他们就可以通过向网络仅传输一个交易来解决他们的支付渠道:交易根据用户的渠道余额会支付给他们各自应该接收的比特币。这一过程对用户的好处意味着通道更新(“链下交易(off-chain transaction)”)的费用会更便宜,因为它们不需要支付挖矿费用,而且由于这些交易不需要进行区块链确认,它相应的交易速度要更快。
这一普遍观点提出的时间可以说是和2009年由中本聪发布的第一个比特币软件一样早。Bitcoin 0.1包含了一份原始的代码草案,该草案允许用户在确认交易之前更新交易:
(一份包含在Bitcoin 0.1中的支付通道代码草稿,来源:GitHub)
虽然这段代码只是一个粗略的草稿,但中本聪与当时的bitcoinj开发者Mike Hearn进行私人通信时更详细地介绍了支付渠道将如何工作。
在几年之后的2013年,Hearn在Bitcoin-development邮件列表中公布了中本聪关于支付渠道的解释:
(中本聪对支付渠道如何运作的解释,由Mike Hearn描述。来源:Bitcoin-dev邮件列表)
第一个支付渠道
尽管支付渠道的概念存在的时间和比特币一样长,但中本聪的设计并不是完全安全的。最重要的是,支付渠道的用户可以与矿工串通起来获得比渠道余额能给他的更多的比特币。
在2011年夏天,即中本聪离开比特币项目后,有人首次提出了解决这个问题的方案。Bitcointalk论坛用户“hashcoin”列出了一个两层的支付通道,该渠道要求用户将几个部分签名的多重签名交易和带有时间锁(timelocks)的交易进行交换,时间锁依赖于彼此之间的确认。如果一个参与者消失了,另一个人可以在经过一段时间后在支付渠道中要求获得所有的资金。然而这种设计的缺点是,hashcoin的渠道只能在一个交易方向上工作。Alice可以向Bob进行任意次数的支付,但是Bob无法通过相同的渠道向Alice发起支付。
一个类似于hashcoin的想法在2013年初重新浮出水面,这一次它绕过了理论领域。在那年的4月份,Jeremy Spilman在Bitcoin-development在邮件列表中描述了一个支付渠道的概念。他甚至编写了一个概念证明(proof of concept)的机制。这个设计是由Mike Hearn来进行调整的,在那之后Bitcoin Core的参与者、Blockstream的联合创始人和Chaincode Labs的开发者Matt Corallo在2013年中期将这个概念转变为bitcoinj的工作代码。
又过了一年,也就是2014年,Alex Akselrod(现在是Lightning Labs的工程师)第一个提出了双向支付渠道。在这一渠道中,Alice可以任意多次的向Bob进行支付,但通过使用较少的时间锁, 尽管支付次数有限,但Bob可以在同一个通道内向Alice进行支付。但是与单向支付通道相反的是,这种解决方案实际上从未在代码中实现过。
第一个支付网络概念的提出
大约在第一个支付渠道被提出的同时,包括Bitcoin Core的开发者Peter Todd和Gavin Andresen在内的其他人正在考虑链下的支付网络。如果Alice可以通过一个链下交易向Bob进行支付, Bob可以通过一个链下交易支付Carol,那么Alice应该能够在不需要进行任何链上交易的前提下,通过Bob向Carol进行支付。
Corné Plooy(现在是荷兰比特币交易所BL3P的一名闪电网络的开发者)也在致力于比特币支付层的相关工作,他在2011年首次提出了这一想法。
(这是对Plooy的支付层进行设计的一个早期例子,它将会演变为了闪电网络的前身Amiko Pay。来源:Corné Plooy)
随着Bitcoin Core的开发者和未来的Blockstream 的CTO 、Gregory Maxwell和Ripple 的发明者Ryan Fugger(以及其他一些人)的建议,这个想法在过去的几年里逐渐演变成比特币和原始瑞波技术的合并版本,最终形成了被人们称为“Amiko Pay”的系统Plooy。早期的Amiko支付草案在设计中没有使用支付渠道,因此开发者在系统中注入了信任机制,但是:如果一个用户拒绝与另一个用户结清余额的话,后者就没有相关追索权。
在2012年夏天,数学家、未来的比特币公司TLV的联合创始人Meni Rosenfeld提出了一个早期支付网络的建议,该提议利用了支付渠道。在Bitcointalk论坛上,Rosenfeld描述了一个系统,在这个系统中Bob(来自上面的例子)被一个支付处理器所取代,Alice和Carol都是它的客户。支付处理器也可以与其它的有更多客户的支付处理器进行渠道的链接,这样就可以把支付渠道网络变成一个轮辐式系统。
而这样的一个系统也确实在支付处理其中引入了一点信任机制——他们可以拒绝完成付款并把钱留在自己手里——这个过程的风险是很小的:但是当用户注意并停止使用这一渠道之前,这种手段只能完成一次支付。此外,更大的支付可以被分割成较小的部分,如果一个支付处理器被证明是不可靠的话,那么只有一小部分的支付数据将会丢失。
这一解决方案在这些年里重新被人们提及了好几次。例如,Bitcoin Core的贡献者Peter Todd于2014年在比特币开发邮件列表上发表了这一概念。与此同时,支付处理器BitPay在2015年初发布了一份关于类似的跨渠道支付(“Impulse”)的白皮书。与此同时,还有一个类似的解决方案实际上是由瑞典的创业公司Stroem来实现的——但这些迭代都没有以一种有意义的方式进行下去。
(现在已经不存在的Strawpay微支付公司的标志。来源:互联网档案馆)
Alex Akselrod较早地尝试建立一个去信任的支付渠道网络。在2013年的wiki草案中,Akselrod的解决方案在理论上解决了这个问题。但他的解决方案的主要问题是其在实践中它仍然相当笨拙。例如,如果一笔付款在任何一条交易路线上都失败了,那么用户就没有追索权,他们只能等到资金通过支付渠道的时间锁定来能获得释放,这一过程可能需要几个月的时间。
与此同时,在2015年,Plooy的Amiko Pay已经发展到了可以被人们所信任的程度。然而,它的设计要求对比特币协议进行相对意义深远的改变,即有必要回滚某些类型的交易。虽然这一想法在技术上是可行的,但这一对比特币协议的这些改变是否会被采用还不清楚。
在同年晚些时候,来自苏黎世理工大学(ETH Zurich)的Christian Decker博士(现在在Blockstream任职)和Roger Wattenhofer在他们的白皮书中“一个快速、可扩展的支付网络,使用比特币的双微支付通道”中提出了另一种覆盖网络的设计。他们的解决方案非常依赖时间锁定作为支付渠道有效性的“倒数计时器(countdown ticker)”,它与一种名为“invalidation tree”的加密技巧相结合用于过期的通道余额。
Akselrod的解决方案也就是后来的Amiko Pay,和双工微支付通道(DMCs)在某些方面都与闪电网络相似,并且它们可以通过做出不同的权衡来实现他们自己的权利。如果没有发明闪电网络的话,那么这些解决方案中的任何一种都可能成为比特币的首选扩展层。
当然,闪电网络是被发明的。
闪电网络
经过多年的支付渠道和网络设计的演变,所有关于闪电网络的拼图碎片最终在2015年初一起平凑成了完成的图像。
智能合约交易平台Mirror的CTO,Thaddeus“Tadge”Dryja和Joseph Poon写了一篇题为“比特币闪电网络:可扩展的连锁即时支付”的白皮书,该论文于当年2月首次公开。
事实证明,这是一个游戏规则的改变者。
这篇论文被人们当做了闪电网络的白皮书,它提出了几种解决方案来实现一个完全去信任化的付款渠道网络:当参与者把他们所有的钱都放在他们的渠道上时,它们是不会冒险进行欺诈的,而中间商在完成交易的时候也无法窃取用户哪怕是一丁点的比特币。此外,该解决方案需要对比特币协议进行相对较少的修改,并承诺比目前提出的替代方案要更加灵活和友好。
在这份白皮书中所描述的关键创新是“Poon – Dryja渠道”。与早期的支付渠道设计一样,Poon-Dryja渠道依赖于部分签名和非广播交易的交换。但与以往的支付渠道相比,这些新渠道采取了一些额外的步骤,这些步骤包括了交换秘密数字,这使得支付渠道可以在不同“方向”上进行更新。Alice可以向Bob进行任意次数的支付Bob,而Bob也可以在同一个通道向Alice支付任意次数。
此外,闪电网络利用了哈希时间锁定合约(Hashed Timelock Contract,简称HTLCs)。这个概念通常被认为是由Tier Noan最早提出的,最初这一概念是为跨区块链交易而设计的;例如,通过这个系统用户可以去信任的交易比特币和莱特币。在闪电网络中,这个解决方案被用来连接支付渠道的支付。
2015年2月,Poon和Dryja在旧金山的比特币研讨会上首次公开了他们的想法。
此后的几个月的时间里,在2015年的春夏两季,比特币的扩容问题和区块容量大小限制的争论演变成了一场公开的争斗。在这种危机氛围中,2015年相关人士末组织了一系列的会议:在9月份的蒙特利尔比特币扩容大会(Scaling Bitcoin Montreal),在12月份的香港比特币扩容大会(Scaling Bitcoin Hongkong)。在蒙特利尔,Poon和Dryja再一次提出了他们的建议,随后他们在香港对这一话题也做了第二次,也是更为深入的介绍。
在香港会议的第二节扩容大会之后,Gregory Maxwell在Bitcoin-development的邮件列中提出了比特币的扩容路线图,这张路线图也包括了闪电网络。这个路线图获得了大多数比特币技术社区的支持,并成为了Bitcoin Core项目的路线图。
如果人们对闪电网络的预期不够大的话,那么现在人们肯定对它有了更大的预期。
闪电网络的实现
闪电网络白皮书是一篇很长而复杂的论文,它涵盖了高度技术化的概念;在2015年,很少有人有时间和相关技巧去阅读和理解它。但是,作为长期Linux内核开发人员的Rusty Russell了解了这份白皮书之后,它对这一技术的的理解就大大增加了。在2015年初发表的一系列博客文章中,Russel将这份白皮书“翻译”成了一个更容易让一般读者所理解的建议(但其内容仍然具有相当的技术性)。
在随后的2015年5月,区块链开发公司Blockstream聘请了Russell,并希望它在C语言中实现闪电网络:C – Lightning。事实证明,这一重大举措对闪电网络的实施来说至关重要。一个只有几个月前才提出的概念,现在正在由一个世界级的开发人员来实现。后来,Christian Decker也加入了Russell在Blockstream的项目,而其他的开发者,包括Corne Plooy在接下来的几年中也会对这一开源项目做出贡献。
在Russel开始研究c-lightning后不久,Blockstream不再是唯一一家实现闪电实现的公司。到2015年夏天,一家规模较小的、原本计划开发基于安卓的硬件钱包的比特币技术公司ACINQ也决定尝试一下这种有前景的技术。这家总部位于巴黎的初创公司后来宣布它已经开发了自己的Scala编程语言“eclair”来实现闪电网络侧协议。
(ACINQ公司关于 éclair的公告。来源:medium.com)
在接下来的几个月里,第三个关于闪电网络的实施方案也正在实施中。到2016年1月,闪电网络的两位作者Poon和Dryja,以及Elizabeth Stark、Olaoluwa “Laolu” Osuntokun共同创立了一个全新的公司来开发闪电网络:也就是Lightning Labs。Lightning Labs将率先开发lnd,这是在谷歌的Go编程语言(也被称为“golang”)中实现的闪电网络技术,他们在创建公司之前就已经开始开发这一技术了。
在成立该公司大约一年后,也就是在2016年末,Dryja离开了Lightning Labs转而加入麻省理工学院媒体实验室的数字货币计划,该组织雇佣了Bitcoin Core的开发者Wladimir van der Laan和其他几位Bitcoin Core的贡献者。在麻省理工学院,Dryja继续致力于在Lightning Labs所做的的闪电网络的实施工作,他将其重新命名为lit;现如今,lnd和lit都存在着。Lit通过将一个钱包和一个节点包装成一个数据包,将自己与lnd和其它的闪电网络技术区分开来;在今天,它还通过配置选项能同时支持多个币种。
此外,以矿池和挖矿硬件而闻名的区块链公司Bitfury,对lnd的实施进行了分叉产生了另一个版本的软件。该分叉的独特之处在于它在设计中进行了权衡,以便不需要在比特币网络上有一个可延用性的修正——稍后再详细说明这一独特之处。Bitfury还在交易路由领域做出了贡献,最明显的贡献是一种名为“Flare”的协议。(然而,lnd的Bitfury分叉目前的开发进度似乎是停滞不前了。)
此外,在2016年,主要的钱包提供商Blockchain宣布它开发了一个被称为thunder的闪电网络的简化版本。与典型的闪电网络的实现相比,这一版本做了相当大的权衡,最显著的原因是它需要获得网络上的对手方的信任。通过这种权衡,它能够在2016年春天发布其实现的内部测试版本,这可比其他开发团队要早得多。(虽然thunder也可能与未来的闪电网络进行兼容,但这一项目的发展目前似乎也停滞不前了。)
就在2016年年底,第三次扩容大会——米兰比特币扩容大会(Scaling Bitcoin Milan)过后的几天里,关于闪电网络实施的大部分贡献者汇聚一堂举行了第一次闪电峰会( Lightning Summit)。在这次会议中,他们讨论了如何使所有不同闪电网络实现相互协同工作,从而形成了一个被称为“BOLT” (一个以闪电技术为基础的缩写)的闪电网络协议规范。闪电网络白皮书是一个理论上的建议,BOLT则成为了我们今天所知的闪电网络的基础。
比特币的协议变更
当闪电网络白皮书首次发表时,它所描述的想法实际上是与比特币协议是不兼容的——至少它是不安全的。为了能够像描述的那样启用闪电网络,相关开发者需要对比特币进行一些协议上的改变。
第一个改变的协议是新的时间锁定,它将使支付渠道能够抵抗比特币的延展性漏洞。然而,这个问题早在闪电网络白皮书发布之前就已经被解决了,并且在2015年得到了彻底的解决,在当时Peter Todd设计并提出的一种新的在比特币协议中实现了:CheckLockTimeVerify (CLTV)。
后来,Bitcoin Core的开发者们意识到闪电网络与相关时间锁定的功能的表现甚至会更好。这些功能允许用户在另一笔交易被确认后,将比特币锁定在一个特定的时间点上。在使用闪电网络的情况下,用户可以无限期地打开他们的支付渠道,而CLTV 时间锁定则要求他们定期关闭他们的渠道。在2016年夏天,比特币网络上启动了一个名为CheckSequenceVerify (CSV)的软分叉升级,以实现相对的时间锁定。
但闪电网络需要(至少是假定用户有良好的用户体验) 的最大协议改变是对任何比特币交易可延展性的修正。
在闪电网络白皮书发布的时候这被认为是一个巨大的挑战。当一个软分叉草案正在修复这一挑战的时候,开发者不确定这样的方案是否可行,并且认为网络需要硬分叉来解决这个问题。然后,到了2015年年底,Bitcoin Core的参与者意识到隔离见证(SegWit),作为Blockstream 的Elements Project的一部分可以作为一种反相兼容的软分叉部署在比特币上。
经过长时间的斗争,隔离见证的软分叉终于在2017年夏天被激活,这也为比特币的闪电网络的发展铺平了道路。
闪电网络的内部测试版本
尽管隔离见证还没有被部署在比特币协议上(而且也不完全确定是否会这样做),但闪电网络的发展仍在进程中。
闪电网络的部署是从测试网络开始的,它是专门为测试目的而设计的比特币副本。或者更准确地说,在这种情况下,闪电网络开始于一个专门的测试网络版本,它被称为“SegNet 4”(它是第四个针对隔离见证的测试网络)并于2016年5月正式启动。
在2016年10月SegNet 4部署后不到6个月,Blockstream开发团队已经将c-lightning原型升级到了可以使用的程度。在被称为“闪电网络的第一次战役”的情况下,Decker使用测试网络的比特币在闪电网络的早期循环中从Russell那“买了”一张猫的图片。
(这只猫的照片是Christian Decker从Rusty Russell那里买的。来源:Blockstream.com)
到2017年1月,第一个闪电网络的实现——lnd的内部测试版本发布。与此同时,闪电网络本身已经“正式”进入了“内部测试阶段”:来自世界各地的开发者们首次被邀请尝试这项技术,而Lightning Labs将继续帮助项目进行测试和改进相应的代码。
这个内部测试阶段反过来也导致越来越多的开发人员在lnd和其他闪电网络的实现之上构建应用程序。这些在闪电网络上实施的应用被称为“Lapps”,这些应用包括了从桌面钱包和移动钱包,到微支付博客平台,再到赌博网站,浏览器,还有更多——尽管在大多数情况下,这些应用程序仍然是为比特币的测试网络所设计的。
在2017年夏季,隔离见证最终被激活,比特币闪电网络的基础工作已经完成。从那时起到比特币的主流网站上宣布完成了闪电网络的第一笔交易一共经历了三个月的时间。在不久之后的11月,Lightning Labs在区块链上进行了第一次闪电网络的跨链交易:从比特币到莱特币。在去年12月,来自Blockstream、Lightning Labs和ACINQ的开发团队宣布,他们已经成功的完成了互操作性测试。
此外,到今年年底,其他人也开始在比特币主网上的闪电网络使用比特币来进行交易——在某些情况下这些使用者违背了开发者的建议。随着越来越多的闪电通道被开放,到了12月,开发者Alex Bosworth通过他建立的支付处理器Bitrefill的闪电通道支付了他的电话账单:这是有史以来第一次在闪电网络上进行真实货币的买卖。
一个月后,Blockstream——尽管其开发的c-lightning的实现还在外部测试版——开了一家网络商店,在这家网络商店中人们可以用比特币买到真正的产品,尽管该网站上有明确的风险警告。到了2018年2月,由于比特币披萨而享誉盛名的比特币传奇人物Lazlo Hanyecz宣布会通过闪电网络购买到了两张披萨饼!
(Lazlo Hanyecz正在享用披萨)
闪电网络的外部测试版本
经过多年的发展,甚至是更多年不断的概念化,闪电网络也许正是在几个星期前达到的其发展历程中最伟大的里程碑。
到2018年3月中旬,Lightning Labs的lnd是第一个在外部测试版中发布的闪电网络实现。该公司同时宣布了一项价值250万美元的种子投资计划,投资方中包括了推特的首席执行官Jack Dorsey等知名投资者,Lightning Labs认为该公司一直在准备为比特币的主流网络(主要是技术用户)使用闪电网络。
随后,ACINQ在3月28日发布了一条推文,宣布eclair也已经发布了外部测试版,因此这也被认为是闪电网络为上线主网做好了准备。该公司还表示,他们的安卓版本的闪电钱包将于下周发布。(在这篇文章发表的时候,其发布时间为下一周。)
Blockstream的c-lightning实现还没有在外部测试版中发布,不过它的开发团队已经向比特币杂志表明了它也即将发布。不过,这一区块链开发公司在今年3月的最后一周推出了7款全新的Lapps,这也凸显了该公司在闪电网络方面的进展。
虽然人们已经开始使用了闪电软件,但其外部测试阶段只会进一步刺激这种使用量增长。在这篇文章发表的时候,超过1000个闪电节点已经打开了近5000个支付渠道,总共占有了10个比特币(大约7万美元)。每天都有成百上千的新节点出现在网上,甚至连一个特定在莱特币上部署的闪电网络也正在形成,在未来它可能会与比特币进行互操作。
(在发表这篇文章时的闪电网络图)
然而,即使有了这些进步,闪电网络仍处于早期阶段。在如今大多数闪电网络的用户仍然是技术人员(通常是开发者),他们的使用也大多是带有实验性质的。虽然测试版软件是闪电网络发展主要的里程碑,但是开发和改进网络是一个持续进行的过程,而且相关人员在这方面还需要做很多工作,而闪电网络上关于路由、隐私和其它风险的公开问题仍然存在。最有可能的是只有闪电完了进一步被更多的人使用才能回答这些问题。
备注:在为这篇文章做研究时,我意识到闪电网络的完整(至今为止)历史比我已经知道的更加广泛。将闪电网络发展的历史概括为一篇文章需要省略一些细节,这对所有对帮助该技术实现的人、项目和概念都是不公平的。本文试图概述闪电网络目前的情况,但最好将这篇文章理解为一篇粗略的摘要——而不是详尽的历史或技术描述。感谢所有为这篇文章提供信息的人。