当前位置:首页 行业动态 正文

闪电网络的历史:从头脑风暴到测试版本(上)

2025-04-20

几周以前,第一个闪电网络实现 lnd 已经正式推出 beta 版。第二个实现 eclair 在上周发布,第三个实现 c-lightning 也快要来了。因此,这个在比特币上实现便宜和即时支付的覆盖层网络,已被大部分其开发者认为可以安全地用在比特币主网上了:这是这项技术在经年开发之后的一个重大里程碑。

这个故事,说起来可就长了。

第一串火花

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

闪电网络用到的第一个概念叫做 “支付通道”。而支付通道本质上就是两个比特币用户之间的比特币余额;而且只需要他们彼此知道就好,其他人既不需要知道,也不需要关心他们相互之间的关系。重要的是,他们彼此的余额无需任何链上的比特币交易就能更新;而且 A 的余额增加,就意味着 B 的余额减少同样的数量。

在他们完成交易,心满意足之后,他们只需在网络中广播一笔交易就可以结算他们的支付通道:这一笔交易会基于他们的通道余额,给双方分发应得的数额。对于他们双方来说,这也意味着通道的更新(“链下交易”)相对更便宜,因为不需要付矿工手续费,而且也更快,因为不需要区块链的确认。

这个观念,整体上可以说跟中本聪在 2009 年放出的比特币软件一样早。Bitcoin 0.1 就包含了一个代码草稿,是允许用户在交易被网络确认之前更新这笔交易的:

闪电网络的历史:从头脑风暴到测试版本(上)

Bitcoin 0.1 包含的支付通道草稿

虽然这份代码很粗糙,中本聪后来在跟 bitcoinj 开发者私聊时 Mike Hearn 讲了更多支付通道如何工作的细节。

几年以后(2013 年),Hearn 在比特币开发邮件组中公开了中本聪对支付通道的解释:

闪电网络的历史:从头脑风暴到测试版本(上)

中本聪对支付通道原理的解释,曝光自 Mike Hearn

第一个支付通道

虽然支付通道作为一个概念,可以说与比特币同样久远,中本聪的设计是不够安全的。更重要的是,支付通道中的一个用户可以跟矿工合起伙来让区块链确认一个旧的交易,从而获得比自己该得的数量更多的比特币(比如刚给对方支付完,又把旧的交易上链)。

这个问题的第一个解决方案出现在 2011 年(在中本聪离开比特币项目之后)。Bitcointalk 论坛用户 “hashcoin” 构想了一种双层的支付通道 hashcoin,需要用户交换部分签名的多签名事务,以及与这些多签名事务相互依赖的时间锁事务。如果一个参与者消失了了,另一方可以在等待一段时间后拿走通道中的所有资金。不过,这一设计的缺陷在于,这种支付通道是单向的。Alice 可以给 Bob 支付任意次,但 Bob 没法用同一个通道给 Alice 支付。

另一个类似于 hashcoin 的想法在 2013 年早期浮出水面,而这一次它不再只是想想而已。在这一年的 4 月份,Jeremy Spilman 在比特币开发邮件组中描述了一个支付通道的概念。他甚至写了一份概念验证代码。这个设计又由 Mike Hearn 调整过,后来成为 Bitcoin Core 软件贡献者、Blockstream 公司联合创始人和 Chaincode Labs 开发者的 Matt Corallo 在 2013 中段把它从概念变成了 bitcoinj 上可以工作的代码。

又过了一年,Alex Akselrod(现在是 Lightning Labs 的工程师)首次提出了双向的支付通道。Alice 可以给 Bob 支付任意多次,而 Bob 也可以使用递减的时间锁,在同一个通道中给 Alice 支付 —— 只不过次数是有限的。不过,不像单向的支付通道,这个解决方案从来没被代码实现过。