Part I

比特币闪电网络

什么是闪电网络?

  • 闪电网络(LN)这一概念由Joseph Poon和Thaddeus Dryja在2015年提出。该项目的主要想法是设计一种链下支付协议,用于解决比特币面临的可扩展性问题。同时,这个概念也可以用于其他的加密货币。

  • 闪电网络启发于比特币以及许多其他加密货币所面临的限制。目前,比特币的网络每秒只能处理2到7个事务(TPS)。随着加密货币生态系统的发展以及更多的参与者加入网络,广播到区块链的交易数量可能会增加。随着网络越来越拥挤,区块链的整体性能会受到影响,这大大降低了比特币作为全球数字货币的实际可用性。在这种情况下,闪电网络的创建是为了减轻比特币的网络拥塞。

闪电网络发展史

  • 「支付通道」的概念可以追溯至中本聪发布的第一版比特币系统,其中包含着一段可以让用户在交易被确认之前更新交易的代码。

  • 中本聪对支付通道的解释是「未记录的开放交易可以被保持并替换,直到 nLockTime 达到为止。它可能包含多方支付,每个输入所有者都需对输入进行签名。」

  • 但从「支付通道」概念的提出到闪电网络的工程实现,却经历了漫长时间,开发者们不断地发展和完善这一理念,「双向支付通道」、「链下支付网络」等等概念相继被提出,最终时间来到 2015 年,闪电网络白皮书发布,它以之前的这些研究为基础,以去信任的方式实现了支付通道网络。

  • 本文以该白皮书的发布为起点,梳理闪电网络在此之后的发展历程。

  • 2015 年 2 月,Thaddeus Dryja 和 Joseph Poon 提交了一篇名为《比特币闪电网络:可扩展的 off-chain 即时支付》的白皮书,该白皮书又被称作闪电网络白皮书,它奠定了闪电网络的理论基础。

  • 2015 年 5 月,Linux 内核开发者 RustyRussell 用 C 语言完成了一个闪电网络的实现,称为 C-Lightning。这是闪电网络的第一次实现。

  • 2015 年年底,一份关于比特币系统扩展性问题的解决方案在开发者社区获得了多数共识,并成为 Bitcoin Core 的发展路线图,其中包括了部署闪电网络。闪电网络由此被正式纳入比特币系统。

  • 2016 年,多个团队开始了对闪电网络的开发。这其中包括闪电网络白皮书的作者 Dryja 和 Poon,他们创立了 Lightning Labs,以 Go 语言实现闪电网络。

  • 2016 年年底,第一次「闪电峰会」召开,闪电网络的开发者们讨论了如何让所有不同的闪电网络实现具有互操作性,为此,一个名为 BOLT 的闪电网络协议规范诞生了,它也是如今闪电网络真正的发展基础。

  • 2017 年 12 月,闪电网络测试版首次上线主网,开发者 Alex Bosworth 通过与 Bitrefill 建立闪电通道支付了自己的电话账单,这是闪电网络上的第一笔交易。

  • 2018 年 3 月,Lightning Labs 宣布闪电网络正式上线比特币主网。随后,包括钱包在内的各种闪电网络基础设施以超乎想象的速度发展起来。

  • 2018 年年底,人们迎来了闪电网络节点数量和交易量的「爆发」,2019 年年初,比特币交易量创下新高,而诸多拥有较大市场份额的电子支付系统及电商平台陆续支持闪电网络支付。

  • 目前,闪电网络的大部分开发工作由三个团队来共同完成,它们是 Blockstream (C 版),LightningLabs (Go 版)、ACINQ (Scala 版)。它们对闪电网络的不同实现支持完全的互操作,也就是说不同系统可以无缝衔接。

闪电网络是如何工作的?

  • 闪电网络由一个基于比特币的链下传输网络组成。该系统在点对点(P2P)的层面上工作,其可用性依赖于双向支付通道的创建。用户通过此通道可以进行无缝的加密货币交易。

  • 在双方决定开通一个支付通道后,他们就可以在钱包中来回传递资金。尽管建立支付通道的过程涉及链上交易,所有在通道内发生的交易都是链下的,不需要全球性的整体共识。这就意味着这些交易可以通过智能合约快速执行,从而达到更低的手续费和更高的TPS(每秒交易速率)。

  • 为了创建一个支付通道,双方需要设置一个多重签名钱包并在其中存储一些资金。存储在多重钱包上的资金只有在双方均提供私钥的情况下才能动用(两个或两个以上,取决于具体情况)。这就意味着一方无法在未经另一方同意的情况下打开钱包。

  • 举个例子来说,让我们假设Alice想要使用闪电网络和Bob交易比特币。首先,他们要用多重签名钱包设置一个支付通道。支付通道类似于一个智能合约,多重钱包类似于一个保险箱,其中存放了待交易的资金。在支付通道的有效期内Alice和Bob双方可以进行任意次链下交易。

  • 紧接着每次交易后,Alice和Bob都会签名并且更新他们的资产记录副本,该副本记录了每个人拥有的比特币数量。当他们完成了全部交易后,他们可以关闭支付通道并把自己的资产记录广播到比特币全网。闪电网络的智能合约会确保他们根据最新的资产记录接收比特币。

  • 总结一下,设计的双方只需要跟比特币全网进行两次交互。一次是创建支付通道,而另一次是关闭,这意味着在支付通道内发生的所有其他交易都不会直接与主链交互。

网络路由

  • 即便双方没有建立直接的支付通道,他们仍然通过互联的支付通道发送和接收比特币。这意味着Alice可以在不直接建立支付通道的情况下向Charlie付款,只要他们之前存在着余额足够的网络路由连接。

  • 因此,如果Alice和Bob,Bob和Charlie之间有一个开放的支付通道,Alice可以通过Bob向Charlie支付。支付路由可能涉及许多闪电网络节点,而智能合约将自动搜索最短的可用路径。

优点

  • 小额支付成为可能: 由于费用与支付金额成比例,你可以支付一小部分; satoshi(比特币最小单位)千分之几的账单甚至也可以完成;

  • 付款是即时支付的: 这些钱是在一定时间内(通过网络往返目的地所需)发送的,通常只需要几分之一秒;

  • 改善隐私: 并不是所有的交易都存储在公共区块链上,只有当交易通道最终关闭,双方分配好资产的那一次才会被存储。

缺点

  • 同行失败: 如果一个同行反应迟钝,用户可能要等上几个小时才能关闭支付通道,并通过另一种途径重新发送资金;

  • 没有离线支付: 用户无法支付不在线的人;

  • 不适合大额支付: 即使一条经由各种支付通道的路线可能存在,但同行多重签名钱包中的资金可能不足以转移大笔资金;

  • 集中化: 闪电网络可能会鼓励支付枢纽的集中化(类似于矿工集中化)。

闪电网络的局限性

  • 与链上交易不同,如果接收方不在线上无法进行闪电网络支付。

  • 网络的参与者可能需要定期监控支付通道,以保证他们的资金安全这种风险可以通过外包监控服务来克服)。

  • 闪电网络不适合大额付款。由于网络依赖于许多的多签名钱包(基本上是共享的钱包),因此很可能没有足够的余额来充当大额支付的中间人。

  • 创建和关闭支付通道涉及到链上交易,这通常需要手动工作和更高的交易费用。

闪电网络相关名词

  • RSMC (Revocable Sequence Maturity Contract / 可撤销序列成熟度合约) - 一个交易合约,允许带有该合约的交易(父交易)输出只能在该交易确认后推迟指定时间(由子交易序列确定)花费,可以通过创建一个特殊的子交易来取代其他子交易并立即花费父交易输出。

  • HTLC (Hashed Time Lock Contract / 散列安全时间锁合约) - 一个比特币脚本,允许受托方提供一个指定散列的原始密文来花费合约资金,也允许委托人在时间锁过期后赎回资金。

  • 资金交易 (Fund Transaction) - 一个 2-of-2 多重签名交易,用于创建最初的支付通道资金池。

  • 可撤销承诺交易 (Revocable Commitment Transaction) * 资金交易的子交易,可以花费资金交易的输出,通过创建新交易并撤销老旧交易在交易通道双方重新分配资金额。

  • 支付交易 (Delivery Transaction) - 一旦承诺交易广播上链,该交易能立即从承诺交易赎回资金。

  • 可撤销支付交易 (Revocable Delivery Transaction) - 带有时间锁的支付交易,可延迟收回承诺交易资金。

  • 违规补偿交易 (Breach Remedy Transaction) - 用于对不合作节点实施惩罚的交易。

相关比特币改善提案 (BIPs)

  • BIP65: CHECKLOCKTIMEVERIFY

    • 该BIP为比特币脚本系统引入一个新操作码 (OPCHECKLOCKTIMEVERIFY) ,使用比特币交易域nLockTime指定交易锁定时间,从而允许交易输出推迟至指定时间以后才能花费。闪电网络可以使用该机制创建微支付通道,但不便之处在于到期后需要清算并关闭通道。

  • BIP68: 基于交易序列号的相对时间锁

    • 通过在比特币交易记录中引入交易序列号 (nSequence) 实现相对时间锁 (RLT),确保签名交易的输入在其相应的前序交易确认后的指定时间内(现对于前序交易确认时点)保持无效。闪电网络使用nSequence,但修改其原有的语意以实现RSMC,好处是可以保持支付通道一直开启。

  • BIP199: 散列安全时间锁合约交易

    • 一个散列安全时间锁合约(HTLC)是一个脚本,它允许受委托者通过提供一个散列的原始密文来花费合约资金,也允许委托人在时间锁过期后赎回资金。该比特币改善提案实现HTLC。

推荐阅读