[翻译]闪电网络历史:从头脑风暴到测试版(一)

Joseph Poon

来源:The History of Lightning: From Brainstorm to Beta

文章写于 2018年4月4号,介绍了整个闪电网络的历史,其最初的想法甚至可以追溯到2009年bitcoin 0.1 版的代码,以及中本聪当年支付通道的邮件解释,后来经过各路大神对其不断讨论与扩展,终于开花结果了。

闪电网络历史:从头脑风暴到测试版(一)
闪电网络历史:从头脑风暴到测试版(二)
闪电网络历史:从头脑风暴到测试版(三)

几星期前,闪电网络的第一个官方实现 lnd 正式处于测试阶段。第二个实现 eclair 在上周发布,第三个实现 c-lightning 预计很快就会发布。
因此,闪电网络,这是一个期待已久的低成本和即时的比特币覆盖网络,被许多开发人员认为足够安全,可以在比特币的主网上使用:这是该技术多年来的一个重要里程碑。

想法的诞生

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

闪电网络拼图的第一部分是一个名为“支付通道”的概念。支付通道本质上是2个比特币用户之前的余额,仅仅2个比特币用户:世界其他的人不需要了解或关心他们的之间的余额。重要的是,这些余额可以更新,不需要任何链上比特币交易;当一个用户增加余额,另一个用户的余额减少相同的数量。实际上,允许双方参与者之间进行交易,交易数据不会给整个网络增加负担。

一旦用户完成交易,他们只需向网络传送一笔交易,就可以结算支付通道:该交易根据他们的通道的余额向每个交易支付他们应该得到的报酬。为了这些用户的利益,这也意味着通道更新(“链下交易”)更便宜,因为他们不需要手续费,也意味着更快,因为他们不需要区块链确认。

这一基本想法可以说和中本聪2009年发布的第一版比特币软件一样古老。Bitcoin 0.1版包含一份原始代码初稿,允许用户在交易确认前更新交易:

Bitcoin 0.1版中包含的支付通道代码初稿,来自github

虽然这是一份初稿,中本聪在跟bitcoinj的开发者 Mike Hearn的私人通讯中,对支付通道如何工作做了更详细的介绍。

几年后的2013年,Hearn在比特币开发者邮件列表发表了中本聪对支付通道的解释:

中本聪解释支付通道如何工作

第一个支付通道

虽然支付通道的基本概念与比特币本身存在的时间一样长,但中本聪的设计并不是完全安全的。最重要的是,支付通道的用户可能会与矿工串通,确认一笔更早的交易,要求获得比通道余额允许的更多的比特币

这个问题的解决办法在2011年夏天第一次被提出,在中本聪退出比特币项目后。 Bitcointalk 的用户 “hashcoin” 提出了一个两层的支付通道,这要求用户交换多个部分签名的多重签名交易和时间锁交易,它们相互依赖,以保证其有效。 如果有一方参与者不在了,另一方则可以在一段时间后,在支付通道中取回全部资金。然而,这种设计的缺点是 hashcoin的通道只能在一个方向上工作。“Alice”可以向“Bob”支付任意次数的费用,但是Bob不能通过相同的通道支付给Alice。

类似于hashcoin的一个想法在2013年初重新浮出水面,但这一次它脱离了理论领域。 同年4月,Jeremy Spilman在bitcoin开发邮件列表中描述了支付通道的概念。他甚至编写了一个概念证明。这个设计后来又被Mike Hearn进行了调整,之后将来的 Bitcoin Core贡献者、Blockstream联合创始人、Chaincode Labs的开发者Matt Corallo在2013年的年中将这个概念转化为bitcoinj的代码。

又过了一年,在2014年,Alex Akselrod(现在是Lightning Labs的工程师)是第一个提出了双向支付通道的人。Alice可以任意次数地支付给Bob,而使用递减的时间锁, Bob可以在相同的通道内支付给Alice,尽管次数有限。然而,与单向支付通道相反,这种解决方案从未在代码中实现过。

第一个支付网络的概念

大约在第一个支付通道被提出的同时,其他人包括Bitcoin Core的开发者Peter ToddGavin 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年夏天,数学家、之后的Bitcoin emBassy TLV 联合创始人Meni Rosenfeld提出了利用支付通道的早期支付网络方案。在Bitcointalk论坛上,Rosenfeld描述了一个系统,其中Bob(来自上面的例子)被一个支付处理器所替代,Alice和Carol都是它的客户。反过来,支付处理器也可以拥有与其他支付处理器的通道,从而拥有更多的客户,从而将支付通道网络变成一个中心辐射型系统。

虽然这样的系统确实在支付处理器中引入了一点信任问题——他们可以拒绝转发支付请求并保留资金——这种风险认为很小:在客户注意到并停止使用该通道之前,这个技巧只适用于一次付款。 此外,更大额的支付可以分割成更小的量,如果一个支付处理器被证明是不可靠的,那么只有一小部分支付额将会损失。

这一解决方案在过去几年中出现过几次。 例如,Bitcoin Core的贡献者Peter Todd在2014年将这个概念发布到比特币开发邮件列表。同时,BitPay在2015年初发表了一篇关于类似的跨渠道支付(Impulse)的白皮书。这样类似的解决方案由瑞典初创公司Strawpay实现,称为Stroem,但是这些迭代最终并没有以一种有意义的方式进行下去。

现在已经不复存在的初创公司Strawpay的Logo

Alex Akselrod较早地尝试建立一个无需信任的支付通道网络。Akselrod的解决方案在2013年的维基草案中首次提出,并在2014年实现了概念验证,他在理论层面上解决了这个问题。主要问题是它在实践中仍然相当笨重。如果支付在交易过程中的任何地方失败,用户没有追踪权,只能等待通过支付通道 timelocks 来释放资金,这可能需要几个月的时间。

与此同时,到2015年,Plooy的Amiko Pay已经发展到可以无需信任地工作的程度。 但是,他的设计需要对比特币协议进行相对比较多的修改,以至于需要回滚某些类型的交易。 虽然从技术上讲是可能的,但目前还不清楚比特币协议是否会做出这样的修改。

同年晚些时候,苏黎世理工大学(ETH Zurich)的研究人员Christian Decker博士(目前在Blockstream)和Roger Wattenhofer,在他们的白皮书中提出了另一种网络设计——“A Fast and Scalable Payment Network with Bitcoin Duplex Micropayment Channels”。他们的解决方案非常依赖于timelocks作为支付通道有效性的一种 “倒数计时器(countdown ticker)”,它结合了一种称为 “失效树(invalidation tree)” 的加密技术来处理过期的通道余额。

Akselrod的解决方案,Amiko Pay之后的草案,双微支付通道(Duplex Micropayment Channels,dmc) 在某些方面都与闪电网络相似,它们可以通过做出不同的权衡来发挥各自的作用。如果闪电网络没有发明出来,那么这些解决方案中的任何一个都可能成为比特币可扩展层的基础。

当然,闪电网络终于发明了出来。


参考:

https://mp.weixin.qq.com/s/P0X6kGLdrzEmZqzq3jktrw

推荐阅读更多精彩内容

  • 背景:在很多时候,有没有经常遇到过,线上部署的系统依赖二级或三级域名,而测试环境又因没有多的域名而无法真实的进...
    Saxon_323e阅读 1,059评论 0 10
  • 人们需要生存,所以拿起了武器 人们需要稳定,所以筑起了围墙 人们需要胜利来武装,所以开始了呐喊和张扬 人们需要面子...
    忘朔梦阅读 113评论 2 3