作者:bcSatoru

来源:https://www.spark.money/research/channel-factories-scaling-lightning

每一条闪电通道的起点都是一笔在区块链上确认的交易。开启一条通道,需要在比特币网络中广播一笔注资交易,支付相应的手续费并等它确认。关闭通道需要发布另一笔交易。对于一个希望服务数十亿用户的网络来说,这种每条通道都要负担的链上开销,带来了一个根本性的扩容瓶颈。

通道工厂提供了一种解决方案:与其让每一条支付通道都有自己单独的注资交易,不如让一群参与者将资金都汇集到同一个 UTXO 中,然后在这个共享的空间内,在参与者们彼此形成多条通道,而不将这些信息暴露在区块链上。这样一来,区块确认的手续费开销可以在工厂内的所有通道间平摊,还有希望将各通道的链上信息暴露减少一个数量级(甚至更多)。

区块空间瓶颈

闪电网络的扩容挑战在于比特币区块空间是有限的。比特币网络的每个区块大约能容纳 4000 笔交易,而区块大约每 10 分钟挖出一个。每个闪电通道在其整个生命周期中都需要至少两笔链上交易:一笔交易负责打开这条通道,另一笔交易负责结算这条通道。如果地球上的每一个人都需要一条通道,那么光是让所有人打开通道,就需要占满几年间出产的区块(还假设没有其它应用使用比特币区块链)。

手续费市场让问题更加复杂。在交易确认需求高涨的时候,开启和关闭通道都需要付出更多手续费。 这时候,一些用户可能会发现,他们通道容量只是堪堪超过管理通道所需的手续费。这种动态会格外影响闪电网络意图服务的用户群体:希望高频发送小额支付的群体。

(译者注:作者此处描述的问题是,在非锚点通道中,表达通道内部状态的承诺交易自身必须携带足以使自身得到区块确认的手续费,为此,通道容量会有一部分预留;在手续费率高涨时,更新通道状态会改变预留的容量,从而降低通道的可用性。这个问题在当前的闪电网络(广泛使用锚点通道)中一定程度已被解决。)

通道拼接” 允许在保持通道可用的前提下调整通道的容量,但依然需要为每一次拼接操作发送一笔链上交易。基本的限制仍在:每一条通道都要付出一些链上开销,按比特币区块当前的大小,无法扩容到服务全球用户。

Burchert-Decker-Wattenhofer 通道工厂

在 2018 年,Christian Decker、Conrad Burchert 和 Roger Wattenhofer 出版了《比特币微支付通道网络的可扩容注资方法》,带来了 “通道工厂” 的概念。其核心洞见是:一个多方的链外协议,可以作为一个工厂, 产生和管理多条支付通道,无需为每一条通道在链上发送一条注资交易。

这种构造使用了分层交易的结构。在最基础的一层,N 各参与者在区块链上创建一个 N-of-N 的多签名 UTXO 。在此之上,是许多链外交易构成的分配层,将汇集在一起的资金分配给各个两方通道。这些通道与标准的闪电通道完全一样,支持 HTLC多路径支付以及闪电网络现有的所有功能。

分层架构

这种通道工厂是由三层不同形式的交易组成的,每一层都在协议中服务于不同的目的:

  • 注资层:单笔链上交易,创建一个 n-of-n 的多签名输出,这是唯一一笔在正常的工作模式中得到区块链确认的交易。
  • 分配层:链外的交易,将池子中的资金分发到各个双方的通道输出,需要所有 N 个参与者签名。
  • 通道层:标准的两方支付通道(闪电通道),都是独立操作的,更新一条通道的内部状态只需作为参与者的两方协作。

关键洞见:分配层正是让通道工厂大显神通的因素。通过在链外重新构造这一层的交易,同一个通道工厂的参与者们可以创建、关闭和重新平衡通道,无需在区块链上发布交易。这个 N 方协作的要求只针对改变通道容量的变更,与通道内的支付无关。

通道生命周期

从创生到最终结算,一个通道工厂会经历几个阶段。每一个阶段都涉及不同的协调要求和链上开销。

阶段 1:工厂开张

N 个参与者一致同意形成一个工厂。他们集体构造一笔注资交易,将各人的输入转化为一个 n-of-n 多签名输出。在广播这笔交易之前,所有参与者要签名一笔退款交易,在一个时间锁解锁之后将资金返回给原来的主人。这保证了,如果出现了不合作的参与者,众人也不会因此无限期锁定资金。

这笔注资交易会得到广播并被区块链确认。在正常的工作模式中,这是唯一必须得到区块链确认的交易。

阶段 2:创建通道

给工厂注入资金后,参与者们会集体签名分配交易,创建各个单独的支付通道。10 个参与者可能会创建 20 条乃至更多通道:每个参与者都可以和其他多个人形成通道。这些通道,在协议层面看与普通的闪电通道没有区别。

在工厂内创建新的通道需要所有 N 个参与者签名一笔新的分配交易。不过,一旦创建好了,这条通道就是独立运行的:为路由支付,只需这两个通道参与者在线。

阶段 3:在链外重新平衡通道

在时间流逝中,通道余额会随支付流而转移 。在普通的闪电通道中,调平通道(参与者主动改变通道内的余额分别,以改变自己的支付额度和收款额度)通常需要链上交易(潜水艇互换、或关闭再开启通道),或使用复杂的环路支付(将某一条通道中的余额转移到另一条通道)。而在通道工厂内,调平只需在链外确认:参与者们签名一笔新的分配交易,在不同通道之间重新分配资金。

这就是通道工厂发挥最大长度的领域:流动性管理。一个闪电网络服务商可以在自己的工厂内操作,在不同通道间重新分配用户的收款额度,无需区块链确认。

阶段 4:工厂关闭

工厂的关闭方式有两种。在合作情形中,所有参与者一致同意最终的余额状态,然后签名一笔关闭交易,在区块链上将资金分割到各人排他性占有的 UTXO 中。这是理想的结果:只需一笔链上交易开启工厂,也只需一笔交易来关闭它,其它一切事情都放在链外。

在非合作情形中,任何一个参与者都可以单方面关闭工厂,办法是公开最新的分配交易。这会让各通道在区块链上生成,从而可以按标准的闪电通道争议裁决机制来结算(惩罚交易撤销密钥 等)。在这种情形下,要付出更高的链上费用,但没有参与者会损失资金。

节约链上开销

从通道工厂中获得的效率收益,取决于工厂的规模以及参与者们保持工厂存活的时间。下表演示了使用和不使用工厂情况下,各场景所需的链上交易数量。

场景不使用工厂使用工厂(10 个参与者)
开设 20 条通道20 笔链上交易1 笔链上交易
调平 5 条通道5 ~ 10 笔链上交易(关闭 + 重新开启)0 笔链上交易
关闭所有通道20 笔链上交易1 笔链上交易(合作情形下)
总的链上踪迹45 - 50 笔链上交易2 笔链上交易

这种节约效果,会随着工厂的规模和存活时间而增大。拥有 100 个参与者的工厂、管理数百条通道,可以将链上开销削减两个数量级(相比各个通道都单独注资)。

为何通道工厂未见部署

虽然在 2018 年就有了提议,今日仍未有能够进入生产环境的闪电节点实现支持通道工厂特性。障碍既有技术性的,也有跟协调要求有关的。

N-of-N 协调问题

工厂更新通道分配需要所有参与者的签名。只要任何一个参与者离线,整个通道仅在无法更新分配层的交易。如果一个工厂有 10 个参与者,那么至少一个参与者离线的概率就已经不小了。如果工厂有 100 个人,那几乎是一定的。

这就带来了一个矛盾:越大的工厂,在链上成本摊销上越有优势,但在协调上越困难。更小的工厂(3 到 5 个参与者)更可靠,但提供的效率优势也小得多。最优的工厂规模依然是一个开放的研究问题。

状态管理的复杂性

最初的状态工厂提议与当前的闪电通道一样,依赖于基于惩罚的撤销机制(即所谓的 “LN-Penalty”)。已经撤销的状态分布在三个交易层,并且协调层有 N 个参与者,管理这些状态带来了可观的复杂性。每一次分配层的更新都会做作废旧的状态,但所有参与者依然要存储这些旧的状态(否则无法强制执行惩罚)。

Eltoo”(也叫 “LN-Symmetry”)将极大第简化状态管理的负担。它不是基于惩罚的,而是让任意较新的状态都能替换掉较旧的状态。这就消除了存储所有旧状态的需要,并降低了意外发布旧状态的风险。不过,eltoo 需要比特币软分叉来启用 SIGHASH_ANYPREVOUT(BIP 118),到现在还未激活。

限制条款要求

多项高级的工厂设计都依赖于比特币限制条款:在脚本层面限制交易输出可以花费的方式。限制条款可以启用更加灵活的工厂构造,让参与者可以单独退出、无需强迫整个工厂都关闭。CTV(CheckTemplateVerify,BIP 119)、APO(BIP 118)和 OP_CAT 这样的提议,都能给工厂带来不同方面的优化。

没有限制条款,工厂就只能二选一:要么所有参与者都合作,要么工厂的状态必须在链上全部公开。不存在有效的部分退出的中间路径

(译者注:此说不够准确。能否部分退出,主要取决于分配层的构造方式,而不取决于有无限制条款。使用了限制条款同样有可能必须全部退出。)

鸡生蛋还是蛋生鸡:通道工厂能够从 SIGHASH_ANYPREVOUT 和 CTV 这样的软分叉提议中得到许多好处。但这些升级的紧急性,一定程度上又是由通道工厂这样的构造推动的。如果没有进入生产环境的通道工厂来证实,协议变更的共识很难形成。

SuperScalar:一条务实的路径

在 2024 年,开发者 ZmnSCPxj 提出了 “SuperScalar”,一种无需任何比特币共识变更就能工作的通道工厂设计。SuperScalar 结合了现有的三种技术:Decker-Wattenhofer 的递减 nSequence 更新机制、“超时树”,以及筑梯法。

Decker-Wattenhofer 通道

与基于惩罚的 LN-Penalty 机制不同,Decker-Wattenhofer 状态通道使用递减的 nSequence 时间锁来排序状态。每一个新状态都比上一个状态具有更短的时间锁,所以最新的那个状态能够最快在区块链上确认(如果发布的话)。这就避免了撤销和惩罚交易的复杂性,但使得更新状态的次数变成有限的,受制于最初的时间锁的数值。

超时树

SuperScalar 将工厂构造为一棵由交易组成的树。一个 LSP 位于树根并为整棵树注资,终端用户在叶子上。这棵交易树有内在的超时机制:在超时之后,这个 LSP 就能从不活跃的叶子取走资金,无需与用户合作。在超时之前,用户可以通过发布自己的叶子到树根的沿途交易来单方面退出。

(译者注:“LSP 位于树根、用户位于叶子” 的表述也有些不准确。准确地说,我们把交易的输出比拟为树的一个节点,每个节点都有两种花费方式,一是该节点所包含的用户群体的 N-of-N 多签名,另一是超时之后 LSP 独自花费;而叶子是 LSP 与某一用户的闪电节点。)

筑梯法

SuperScalar 设计认为,LSP 在同一时间可以运营多个工厂,这些工厂会有重叠的存活时间,依次到期。在一个工厂过期的时候,用户可以迁移自己的资金到更新的工厂。这就防止了全部用户需要同时在链上结算的情形。

属性初版通道工厂SuperScalar
需要软分叉?可以从 APO/eltoo 中受益
拓扑图扁平的 N-of-N 多签名交易树,LSP 位于树根
协调更新所有 N 个参与者LSP + 受到影响的用户
状态更新限制无限(如果有 eltoo)受限于最初的时间锁
信任模式免信任的(全体签名)LSP 在过期之前无法盗窃资金
部分退出需要限制条款用户通过发布交易树分支而退出
工厂寿命无限(合作条件下)固定的盗窃时间,使用筑梯法来延长

SuperScalar 作出了务实的取舍:它牺牲了无限数量链外更新的理论优雅,换来了可以在今天的比特币部署的实用性。以 LSP 为中心的设计也反映了今天的现实:绝大部分闪电网络的用户已经主要通过服务商来使用,而不是运行自己的路由节点。

通道工厂与更广泛的扩容领域

通道工厂代表了为减少闪电网络的链上踪迹的广泛设计空间中的一种方法。其他提议也从别的方面解决了相同的问题。

Ark 协议 使用 “虚拟 UTXO(vTXO)” 来启用链外的资金转移,只需周期性结算。Ark 与通道工厂一样,可以在许多用户间平摊链上开销,但它使用完全不同的架构,基于全时在线的服务供应商(ASP),而不是多方通道。

通道拼接技术让通道可以添加或减少容量而不需要关闭通道(再开启),这减少了链上确认交易的需要,但没有消除它。结合 “零确认通道” 这样的技术,可以提升通道管理的使用体验,但不能解决基本的每条通道都要付出一些链上开销的要求。

Spark 采用了完全不同的方法。它不优化通道模式,而是使用 “statechain” 在链外转移比特币所有权,完全不使用通道。没有通道工厂这样的协调签名要求,也不会在区块链上留下每一次转移的踪迹。取舍在于,它使用了另一种信任模式:Spark 依赖于其 FROST 门限签名团体中的至少一个运营者是诚实的,而不像闪电通道那样是完全免信任的。

方法每条通道在链上的开销协调要求信任模式可否立即部署
标准的闪电通道2 笔交易(开启 + 关闭)同一通道的 2 方免信任的
通道工厂摊销(2/n 笔交易)同一工厂的所有参与者免信任的可(能从 eltoo 中受益)
SuperScalar通过超时树来摊销LSP + 受影响的用户LSP 无法盗窃
Spark用户 + 运营者1-of-n 运营者诚实假设

开放问题

关于通道工厂能否进入生产环境,还有多个有待解决的问题:

  • 最优工厂规模:链上开销节约和协调故障概率的合理取舍是什么样的?模拟结果表明:5 到 10 个参与者是务实的,但缺乏来自真实世界的数据。
  • 激励设计:工厂的参与者能否从协调的负担中得到补偿?当前的闪电网络路由手续费模式不考虑工厂的维护负担
  • 感知工厂的路由:闪电网络的 gossip 协议(BOLT)是否应该拓展为可以广播工厂中的通道,从而让路由算法倾向于工厂内的转发路径?
  • 锚点输出临时粉尘 技术的相互作用:当前的闪电网络协议更新将如何影响工厂的交易结构以及手续费追加策略?

Conclusion

通道工厂解决了闪电网络结构的一种真实的局限性:每条通道都要占用一些区块空间,这就限制了比特币可以支持的通道的数量。最初的 Burchert-Decker-Wattenhofer 设计优雅地展示了这个概念,而 SuperScalar 展示了一种无需比特币协议变更就能投入生产环境的务实路径。

但挑战也是同样真实的。N-of-N 协调、状态管理复杂性,以及(比特币协议当前)缺乏限制条款,都限制了通道工厂在实际场景中的发挥。这些是工程问题,可能有解决方案,但没有一个是容易解决的。

与此同时,通道工厂尝试解决的扩容问题,也可以通过多种互补的方法来解决。通道拼接减少了不必要了通道关闭操作。Ark 完全重新设想了链外交互模式。Spark 完全抽象掉了通道。比特币扩容方案的未来可能并非一家独大,而是一种组合,各种协议服务不同的用户和应用场景。

(完)