作者 | Aaron van Wirdum
编译 | 老曹、Aholiab
不久前,闪电网络的第一个官方测试版lnd正式发布,第二个版本eclair也在上个月进行了部署。而第三个版本——C-Lightning预计也很快就会开始实施。正因如此,人们期待已久的以「低成本」和「即时」的方式进行交易的比特币覆盖网络——闪电网络(Lightning Network)成为很多开发商的首选。同时,它也可以在比特币的主网上使用,这是多年来技术发展的一个重要里程碑。
说起闪电网络,很多人对这个名称并不陌生,可是对于它究竟是干什么的却知之甚少。今天营长就讲讲关于闪电网络从「头脑风暴」到最近官方Beta版发布的这段历史,真是一段有趣的故事。
接下来,让我们坐时光机回到比特币诞生的时(nian)候(dai)。
雏形的诞生
闪电网络最早的起源可以追溯到比特币本身。
闪电网络拼图的第一部分是一个叫做「支付通道」的概念。支付通道基本上是两个比特币用户之间的比特币收支,这个渠道链接的只有两个用户:其他人不需要知道也不需要关心他们的共同余额有多少。更重要的是这些余额可以在不需要进行任何比特币在线交易的情况下更新;如果一个用户的余额增加,另一个用户的余额就会相应减少。实际上,这一过程使得参与者之间可以互相交易,且不会因为交易数据而给整个网络带来负担。
一旦用户完成了交易,他们就可以只向网络传输一个交易来结清他们的支付通道:这种交易根据他们的通道余额向每个交易支付应得的数额。对于这些用户来说,这一过程的好处是,通道更新(链下交易)的成本更低,因为它们不需要挖矿的费用,此外,由于不需要区块链的确认所以速度也更快。
这一概念可以说和2009年由中本聪发布的第一款比特币软件一样古老。比特币0.1中包含了一段原始版本的代码,可以让用户在交易被确认之前更新交易:
虽然这段代码只是一个粗略的草稿,但中本聪与当时的bitcoinj开发者Mike Hearn进行私人通信时更详细地介绍了支付渠道的工作原理。
几年后,也就是2013年,Mike Hearn在比特币开发者邮件列表中,发布了中本聪对支付通道的解释:
未记录的开放交易可以被保持并替换,直到nLockTime达到为止。它可能包含多方支付,每个输入所有者都需对输入进行签名。对于新的写入,每个版本都必须签名更高的序列号。如果写入的是较高的nSequenceNumber,则除了上述规则外,该方可以退出协商,或签名SIGNHASH_None完全退出。
参与的各方可以通过使用OP_CHECHMULTISIG创建一个更高的nSequenceNumber tx,用来创建一个预先约定的默认选项。各方保留这个tx,如果需要的话,直到它有足够的签名才能传输。
nLockTime的一个用途是在一组参与者之间的高频交易,它们可以通过一致的同意而不断地更新一个tx。如果一方停止同意更改,则最后的状态将在nLockTime中记录。如果需要,在每个版本之后默认交易可以是预先准备,中间交易不需要广播,网络只记录最终结果。
原文如下:
支付通道的首次提出
尽管「支付通道」的概念与比特币本身一样是一直存在的,但中本聪的设计在安全性方面并不是十全十美的。最重要的是,一个支付通道的用户可以与矿工串通确认一笔旧的交易,让他索取比通道余额更多的比特币。
2011年夏天,中本聪离开比特币项目后,有人第一次提出了解决这个问题的方案。BitcoinTalk论坛用户「hashcoin」简要描述了一种双层支付通道,该通道要求用户交换几个部分签名的多重签名交易,并且交易的时间锁相互依赖才能生效。
如果一个参与者消失了,另一个人可以在一段时间过去之后在付款通道中索取所有的资金。然而,这种设计的一个缺点是,hashcoin的通道只能在一个交易方向发挥作用。Alice可以向Bob进行任意次数的支付,但Bob不能通过同一个通道向Alice发起支付。
一个与hashcoin类似的想法在2013年初再次出现,这一次它绕开了理论。当年4月,TapLink创始人Jeremy Spilman在比特币开发者邮件列表中描述了支付通道的概念。他甚至编写了一个概念的证明。对于这个设计,Mike Hearn接下来进行了调整,之后比特币核心的贡献者——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
这一想法,连同Bitcoin Core、后来的Blockstream CTO——Gregory Maxwell,以及Ripple的发明者Ryan Fugger等人的建议,在过去的几年里逐渐演变成比特币和原始Ripple技术的合并版本,最终形成了被称为Amiko Pay的系统。
但是,早期的Amiko Pay草案并没有使用支付通道,因此在系统中注入了信任机制。然而,如果一个用户拒绝与另一个用户结清余额的话,则后者将无法追索。
2012年夏天,数学家、后来的TLV的联合创始人Meni Rosenfeld,提出了一个利用支付通道的早期支付网络提案。在BitcoinTalk论坛上,Meni Rosenfeld描述了一个系统,在这个系统中,Bob被一个支付处理器取代,而Alice和Carol都是它的客户。反过来,支付处理器也可以与其他拥有更多客户的支付处理器建立通道连接,这以做法把支付通道网络变成了一个轮辐式系统。
而这样的一个系统也确实在支付处理其中引入了一点信任机制——他们可以拒绝完成付款并把钱留在自己手里,这无疑降低了风险。不过这一系统只能在用户注意并停止使用这一通道之前,这种手段只能完成一次支付。此外,更大的支付可以被分成较小的部分,这样如果一个支付处理器被证明是不可靠的,那么只会损失一小部分支付数据。
这个解决方案在后来的几年里被提及了好几次。Peter Todd在2014年将这个概念发布到了比特币开发者的邮件列表中。与此同时,支付处理器BitPay,在2015年初发表了一篇关于类似的跨渠道支付(Impulse)的白皮书。与此同时,一个类似的解决方案,实际上是由瑞典的一家初创公司Strawpay来实现的,称为Stroem (或Ström),但是这些迭代最终并没有以一种有意义的方式进行下去。
已成为历史的Strawpay的公司logo
作为一个相对早期的尝试,Alex Akselrod建立了一个去信任的支付通道网络。在2013年的wiki草案中,Akselrod的解决方案在理论上解决了这个问题。但他的解决方案并不完美,如果一笔付款在任何一条交易路线上都失败了,那么用户就没有追索权,只能等到资金通过支付渠道的时间锁定来能获得释放,这一过程可能需要几个月的时间。
与此同时,到了2015年,Plooy的Amiko Pay已经发展到了一个可以被人们所信任的程度。不过,这一设计仍然需要对比特币协议进行相对深远的改变,以至于有必要将某些类型的交易进行回滚。虽然在技术上是可行的,但比特币协议对于这些改变是否会采纳还尚不明确。
到了2015年末,来自苏黎世理工大学(ETH Zurich)的研究员Christian Decker博士(现就职于Blockstream)和Roger Wattenhofer在他们的白皮书中提出了另一种网络设计——通过比特币双微支付通道建立一个快速和可伸缩的支付网络。
这一解决方案在很大程度上依赖于时间锁,并把时间锁作为支付渠道有效性的「倒数计时器」(countdown ticker),这种方法与一种被称为「失效树」(invalidation tree)的加密技巧结合起来应对过期的通道余额。
Akselrod的解决方案也就是后来的Amiko Pay和双工微支付通道(DMC),在某些方面都与闪电网相似,并且可以通过做出不同的权衡来实现自己的权利。如果闪电网络没有出现,那么这些解决方案中的任何一个都可能成为比特币可扩展层的基础。
然而,历史不接受假设……闪电网络最终还是被发明出来了。
闪电网络
支付通道和网络设计经过了多年的演变,所有的碎片终于在2015年初一起形成了一张完整的拼图。
智能合约交易平台Mirror CTO、Thaddeus“Tadge”Dryja和Joseph Poon写了一篇题为《比特币闪电网络:可扩展的连锁即时支付》(The Bitcoin Lightning Network: Scalable Off-Chain Instant Payments)的白皮书,该文章于当年2月首次公开。
事实证明,这份白皮书最终成为了游戏规则的改变者。
这篇被人们称为「闪电网络白皮书」的文章,提出了几个解决方案,以完全去信任的方式实现了支付通道网络。当参与者把他们所有的钱都放在他们的渠道上时,它们是不会冒险进行欺诈的,而中间商在完成交易的时候也无法窃取用户哪怕是一丁点的比特币。此外,该解决方案对比特币协议的要求相对较少,并且承诺比目前提出的替代方案更加灵活和方便使用。
白皮书中描述的关键创新是「Poon-Dryja通道」。像以前的支付通道设计一样,Poon-Dryja通道依赖于部分签名和非广播交易的交换。但与以往的支付通道相比,这些新的通道采取了额外的步骤,包括交换秘密数字,这使得支付通道可以更新支付的「方向」。Alice可以随意多次向Bob发起支付,而Bob也可以在同一个通道里向Alice支付任意次数。
此外,闪电网络利用了哈希时间锁合约(HTLC, Hashed Timelock Contract)。这个概念通常被认为是Tier Nolan提出的,最初这一概念是为跨区块链交易而设计的。例如,通过这个系统,用户可以去信任地交换比特币和莱特币。在闪电网络中,这个解决方案被用来连接跨支付通道的支付。
Poon和Dryja在2015年2月的旧金山比特币研讨会上首次公开展示了他们的想法。感兴趣的话可以点击下面链接查看:
https://youtu.be/8zVzw912wPo
在那之后的几个月里,比特币的规模问题和区块大小限制的争议变成了公开的争执。在这样的气氛中,Poon和Dryja分别在蒙特利尔和香港扩容大会上,两次就这一主题进行深入的讲解。
就在香港扩容大会之后,Gregory Maxwell在比特币开发者邮件列表中提出了一个关于可扩展性的路线图,这个路线图也包括了闪电网络。它获得了大多数比特币技术团体的支持,并成为了Bitcoin Core项目的路线图。
闪电网络的实现
闪电网络白皮书是一篇很长很复杂的论文,包含很多技术性的概念。在2015年,很少有人有时间和心思阅读并理解这篇论文。但是当Linux内核开发者Rusty Russell了解到这份白皮书之后,对大众对闪电网络的理解起到了促进的作用。Rusty Russell在2015年初发表了一系列博客文章,把闪电网络白皮书「翻译」成了更适合普通读者(但仍然有相当的技术性)的文字。
在随后的2015年5月,区块链公司Blockstream聘请了Russell,并希望他能用C语言来完成一个闪电网络的实现,称为C-Lightning。这一实现成为了闪电网络的转折点,一个几个月前才提出的概念现在正由一个世界级的开发者来实现。Russell后来加入了Blockstream,其他开发者包括Corné Plooy也在未来几年内为该开源项目做出了贡献。
在Russell开始开发C-Lightning后不久,Blockstream就不再是唯一一家实现闪电网络的公司了。到了2015年夏天,一家原本计划开发基于Android的硬件钱包的比特币技术公司ACINQ也决定尝试一下这一有前景的技术。这家总部位于巴黎的初创公司后来宣布,他们已经用Scala语言开发出了自己的闪电网络协议,名为「eclair」。
ACINQ公司关于 éclair的公告
在接下来的几个月里,第三个关于闪电网络的实施方案也在进行中。到了2016年1月,闪电网络的两位白皮书作者Poon和Dryja,以及Elizabeth Stark和Olaoluwa “Laolu” Osuntokun,共同创立了一个全新的公司来开发闪电网络——Lightning Labs(闪电实验室)。Lightning Labs将带头开发lnd,这是以Google的Go语言(也称为「Golang)来实现的闪电网络,他们在创立公司之前就已经开始使用这种语言了。
在闪电实验室成立约一年后,2016年底,Dryja离开Lightning Labs加入了麻省理工学院媒体实验室的数字货币计划,这个组织雇用了比特币核心开发者Wladimir van der Laan和其他几个比特币核心的贡献者。在麻省理工学院,Dryja继续致力于他在Lightning Labs的闪电网络实现工作。
他把自己的闪电实验室重新命名为Lit,这一时期,Lit和Ind同时存在。Lit通过将一个钱包和一个节点包装成一个数据包,将自己与lnd和其它的闪电网络技术区分开来。今天,它还可以通过一个配置选项同时支持多个币种。
除此之外,以挖矿池和挖矿硬件著称的区块链公司Bitfury,对lnd的实施进行了分叉产生了另一个版本的软件。这款分叉软件的独特之处在于,在设计中做出了权衡,以便不需要对比特币网络进行延展性修复。Bitfury还在交易路由领域做出了贡献,其中最著名的是一种名为「Flare」的协议 (然而,Ind和Bitfury分叉目前的开发似乎没什么新进展)。
此外,2016年,钱包供应商Blockchain宣布他们开发了一个简化版的闪电网络叫Thunder。与典型的闪电网络实现相比,这个实现做了相当大的权衡,最显著的一点是它需要在网络上获得对方的信任。通过进行这种权衡,它能够在2016年发布一个Alpha版本,这一版本的发布要远远早于其他开发团队(尽管未来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年的夏天激活使用,为闪电网络在比特币上的应用铺平了道路。
闪电网络的Alpha版本
尽管当时隔离见证尚未被部署在比特币协议上(并且还不能完全确定是否会这样做),但闪电网络的发展仍在继续进行。
闪电网络的部署是从测试网络开始的。更准确地说,闪电网络开始于一个专门的测试网络版本,被称为SegNet 4(这是第4个专门针对隔离见证的测试网络),SegNet 4在2016年5月投入使用。
同年10月,在部署SegNet 4之后不到6个月,Blockstream的开发小组将其C-Lightning原型推进到了可用的程度。在被称为「闪电网络第一战」中,Christian Decker用测试网络中的比特币在闪电网络的早期循环中,从Russell那「买了」一张猫的照片。
到了2017年1月,第一个闪电网络的实现——lnd,发布了Alpha版本。因此,闪电网络本身已经正式进入了「Alpha测试阶段」。来自世界各地的开发者第一次被邀请进行这项技术的实验,而Lightning Labs将继续对项目进行测试和代码的改进。
Alpha版本阶段反过来又导致越来越多的开发者在lnd和其他闪电网络实现的基础上开发应用程序。这些在闪电网络上实施的应用,被称为LApps。这些LApps的类型很广,从桌面、手机钱包,到微支付博客平台;从到赌博网站,到浏览器……但大多数情况下,LApps仍然是为比特币的测试网络而设计的。
2017年的夏,隔离见证终于被激活,比特币闪电网络的基础工作已经完成。从那时起,到比特币的主网上宣布完成了闪电网络的第一笔交易,前后共经历了三个月的时间。
不久后,在同年11月,Lightning Labs首次在区块链上通过闪电网络进行了一次货币兑换交易——从比特币到莱特币。到了2017年12月,来自Blockstream、Lightning Labs和ACINQ的开发团队正式宣布,他们已经成功地完成了互操作性测试。
此外,到去年年底,更多人开始在比特币主网上的闪电网络使用比特币来进行交易——在某些情况下这些使用者违背了开发者的建议,越来越多的闪电通道被打开。到了12月,开发者Alex Bosworth通过他与支付处理器Bitrefill建立的一个闪电通道,支付了他的电话账单。这是有史以来第一次在闪电网络上进行真实货币的买卖。
一个月后,尽管C-Lightning仍处于beta测试阶段,Blockstream还是开设了一家线上商店。在这个商店里,人们可以用比特币来购买实际的商品。到了2018年2月,比特币传奇人物Lazlo Hanyecz因「比特币披萨事件」而名声大噪,他通过闪电网络购买到了两张披萨!
闪电网络的Beta版本
经过多年的发展,加上更多年概念的酝酿。闪电网络的发展在上个月达到了最伟大的里程碑。
2018年3月中旬,Lightning Labs的lnd是第一个发布beta测试版的闪电网络实现。Lightning Labs同时宣布了250万美元的种子轮融资。出资方包括Twitter CEO Jack Dorsey这样的大牌投资者。
随后,ACINQ在3月28日发布了一条推文,声称eclair也已经发布了beta版,这也被认为是闪电网络为上线主网做好了准备。ACINQ还表示,他们的Android版闪电钱包将在一个月内月发布。
虽然Blockstream的开发团队向媒体表示,不久后也会这样做,但C-Lightning的实现还没有发布Beta版本。然而,不过,Blockstream在今年3月的最后一周推出了7款全新的LApps,这也凸显了该公司在闪电网络方面的进展。
尽管人们在alpha版本的时候就已经开始使用闪电网络软件,但beta版的发布无疑进一步刺激了这种增长。截止到目前,超过1,000个闪电网络节点打开了5,000多个支付通道,总共的比特币占有量为10个(价值约为7万美元)。每天都有数以百计的新节点上线,甚至一个针对莱特币的闪电网络也正在成形,未来可以与比特币进行互操作。
闪电网络图
然而,尽管取得了很多的进展,闪电网络仍处于早期阶段。如今,闪电网络的大多数用户仍然是技术人员或开发者,而且使用场景大多是实验性的。
虽然beta版软件的发布是一个重要的里程碑,但网络的开发和改进是一个持续的过程,还有许多工作要做,而关于路由、隐私和其他风险的开放问题依然存在。
这一切问题,只有等待闪电网络被更多人使用后才能解决了。
注:本文为区块链大本营(ID:blockchain_camp)原创,未经授权不得擅自转载,如要转载请联系营长,微信:qk15732632926
扫码加入区块链大本营读者群,群满加微信 17600222208 入群
热门文章
谁不想低门槛接入区块链!这三年,他们为你的方便操碎了心
既得利益者的灭顶之灾:当数字货币结合证券...
孟岩:想抓住EOS的机会,从这四个方向入手吧!
谁说高颜值女神做不了技术?她偏做,还是百万级主链!
了解更多区块链技术及应用内容
敬请关注: