Splicing 是双方共同调整闪电网络通道资金的过程:一笔新的链上交易花费原来的资金输出,并创建新的资金输出。双方同时准备相应的 commitment transactions,即必要时可用于关闭通道的已签名交易。这里延续的是同一个通道,而不是常规关闭后另开一个独立通道。
Splice-in 为出资方增加余额,splice-out 则把该方的部分余额转入通道之外的输出。双方的出资变动也会影响总容量;如果一增一减恰好抵消,容量可以保持不变。不过,通道资金在比特币上锁定的位置始终会换成另一个资金输出。这项变更不需要先按常规协作关闭,再重新打开通道。 [1]
通道首先进入 quiescence,短暂停止与本次操作不兼容的状态更新。发起方发送 splice_init,对方用 splice_ack 回复。共同构建的交易必须恰好包含一个花费原资金输出的输入,以及一个为本通道提供资金的新输出;其他输入和输出可以用来增加或取出资金。随后双方通过 commitment_signed 和 tx_signatures 交换相应签名。 [1]
交换交易签名后,即使尚未达到双方接受的确认数,也可以恢复支付。因此,节点要同时维护原资金、新 splice 以及可能的 RBF 替代交易所对应的承诺状态。一笔支付必须在所有仍有效的版本中都成立。如果连接中断,必须正确恢复尚未完成的操作状态;只保存最后一笔交易是不够的。 [1] [2]
两个节点必须协商启用 option_splice,并就交易、费率和双方出资达成一致。对方可以用 tx_abort 拒绝提议。在双方通过 splice_locked 确认同一笔 splice 之前,新的状态更新必须覆盖所有仍有效的 commitment transactions。一方不能擅自改写另一方的余额。 [1] [3]
Core Lightning 在 26.04 版默认启用了 Splicing,增加了 splicein、spliceout 命令,以及在两个通道之间转移资金的 cross-splice 功能。不过,仍需考虑对方节点的版本和支持的通道类型。不同钱包中名称相同的功能,并不一定具有相同能力,也不一定彼此兼容。 [4]
Splicing 仍会产生一笔比特币交易,所以仍需支付链上手续费,并处理确认和潜在的链重组。比如,Eclair 提供 rbfsplice,用于提高尚未确认的 splice 的费率。还要遵守通道储备、已确认输入要求、出资范围和多次 RBF 尝试的限制,并妥善维护备份。特殊模式 option_zeroconf 会改变信任假设,协议在该模式下禁止 RBF。 [1] [5]
选定的 splice 达到可接受的确认深度,且双方为同一个 txid 交换 splice_locked 后,就可以不再维护旧版本和未成功的候选版本。此时 funding outpoint,即指向某个具体交易输出的引用,会发生变化;容量则按双方出资变化的总和调整。对于公开通道,由已确认交易位置决定的 short_channel_id 也会改变,双方可以准备新的 announcement_signatures。 [1]
检查两个节点是否支持该功能、channel_id、funding_contribution_satoshis 的正负号和数值,以及费率、输入、输出、储备和签名。跟踪所有 RBF 版本的 txid。完成后,核对 splice_locked、新的 funding outpoint,以及公开通道的 short_channel_id。还要确认 HTLC 已恢复运行,并确保取款输出确实属于预期的钱包。 [2] [1]
要获得更完整的理解,请将本词条与以下词条结合阅读: Payment Channel, Lightning Network, UTXO, Lightning流动性, Replace-by-Fee (RBF), Price Channel. 反向关联还来自: Lightning流动性.
01Splicing 等同于关闭通道再打开吗?+
不等同。Splicing 也会产生一笔比特币交易,但双方是共同把现有通道转移到新的资金输出上。常规关闭会终止旧通道,之后重新打开的是另一个独立通道。
02既能增加资金,也能取出资金吗?+
可以。正出资对应 splice-in,负出资对应 splice-out。双方必须同意变更,交易也必须符合余额、储备和手续费规则。最终容量由双方出资变化的总和决定。