跳转到正文
buybitcoinsmart

术语表 /闪电网络与 Layer 2

Splicing

Splicing 是什么?
Splicing 通过将开放中的闪电网络通道的资金输出花费到一个更大或更小的新输出中,来调整该通道的大小,因此通道保留其历史记录,并在整个过程中保持可用。

在出现 Splicing 之前,调整通道大小意味着先关闭该通道,再开设另一个通道:两笔链上交易、两次手续费,以及通道不存在的一段空档期。一次 splice 只需一笔交易即可完成。splice_init、splice_ack 和 splice_locked 这几条消息是闪电网络规范的一部分,Core Lightning 已于2023年8月在 v23.08中发布了实验性实现。

运作方式

Splicing 在同一笔交易中花费旧的资金输出并创建新的资金输出,由双方节点共同签名。

双方节点首先就变更内容达成一致。其中一方发送 splice_init,指明要增加或移除的金额;另一方以 splice_ack 回复。随后,双方使用交互式构建协议共同构建 splice 交易,各自添加自己所贡献的输入和输出:增加资金的 splice 会纳入追加资金一方的链上币,移除资金的 splice 则会创建一个找零输出,直接支付给该节点。

Splicing 的价值在于交易未确认期间所发生的事情。通道不会停止。双方节点同时持有针对旧资金输出和新资金输出的承诺交易,支付继续在仍然有效的状态下流转。一旦 splice 获得足够的确认数,splice_locked 就会让旧输出退役,通道以新的大小继续运行,其原有的通道标识和累积的路由历史保持不变。

成本是一笔链上交易,而不是两笔,其节省的幅度比听起来更大。关闭后重新开设通道还会破坏通道的公开声誉,迫使节点重建路由关系,并让资金在两笔交易确认期间无法使用。Splicing 避免了这三点。这也意味着同一钱包中的链上余额和闪电网络余额可以显示为一个数字,因为资金可以在两者之间移动,而通道始终不会终止。

在哪里会遇到它

Splicing 在那些不再向您显示两个余额的钱包中最为明显。

Core Lightning 在 v23.08中将其置于 experimental-splicing 标志之后,并以 splice_init、splice_update 和 splice_signed 作为底层命令开放。ACINQ 于2023年8月在 Phoenix Android v2.0.0中将其提供给普通用户,同时推出了双方出资功能,该钱包由此在界面上不再区分链上资金和闪电网络资金:向钱包链上存入资金时,会通过 splice 并入您现有的通道,而不是开设第二个通道。

对节点运营者而言,实际用途是在不频繁换通道的情况下重新平衡资金。对于相对其承载流量而言已经过小的通道,可以就地补充资金。持有资金超出所需的通道,可以在保持开放的同时将一部分提到冷存储。这两种操作以前都需要先关闭、等待、再重新开设,要付两次链上手续费,路由历史也会被重置。

支持并不普遍。某个实现及其对端节点都必须支持 splicing 消息,因此能否对某个通道进行 splice,取决于通道另一端是谁。如果您的钱包仍要求您关闭通道才能转出资金,说明对端或软件尚未采用该功能。

Splicing vs 强制关闭

Splicing 在保持通道存续的同时改变其大小;强制关闭则是单方面终止通道。当对端无法联系或行为不当时,您会选择强制关闭:您广播自己最新的承诺交易,您自己的余额被锁定约一天的延迟,通道随之消失。Splice 需要双方节点配合并签名,产生的通道仍可继续使用,也不会让任何一方的资金受到延迟。Splicing 是您可以提前计划的维护操作;强制关闭则是备用方案,会让您耗费时间,并承担不利的费率。

请勿混淆

常见问题

splice 确认期间我还能使用我的通道吗?

可以。双方节点同时保留针对旧资金输出和新资金输出的承诺交易,因此在 splice 交易等待确认期间,支付仍可继续。只有在双方确认新输出已锁定之后,旧的资金输出才会退役。

我的钱包支持 Splicing 吗?

这取决于软件和您的通道对端,因为双方都必须支持 splicing 消息。Core Lightning 在 v23.08中加入了该功能,ACINQ 在 Phoenix for Android v2.0.0中提供了该功能,两者均在2023年8月。

相关术语

闪电网络与 Layer 2中的更多术语

阅读本页英文版