本周的新闻部分介绍了一项允许闪电通道基于可燃烧的输出支持预付和驻留手续费的提议,还总结了关于 testnet3 和 testnet4 的讨论(包括一项硬分叉提议),还宣布了一项开始转发包含 taproot 附言 的特定交易的计划。此外是我们的常规部分:来自 Bitcoin Stack Exchange 的精选问题和回答、软件的新版本和候选版本的发行公告,还有热门比特币基础设施软件的重大变更介绍。

新闻

  • 使用可燃烧的输出实现闪电通道的预付手续费和驻留手续费:John Law 在 Delving Bitcoin 论坛中公开了他所撰写的一份协议论文的总结;凭借这份协议,节点可以向转发的支付收取另外两种类型的手续费。一种称作 “预付手续费(upfront fee)”,由源头支付者支付,用于补偿临时占用一个 HTLC 卡槽(HTLC slot)而给转发节点造成的负担(HTLC 卡槽是为强制执行 HTLCs 而对并发数量设置的限制之一)。另一种称作 “驻留手续费(hold fee)”,由任何会推迟 HTLC 的结算的节点支付;这种手续费的数量会随着时延的增加而增加,在 HTLC 过期的时间点会达到最大数值。他的帖子和论文引用了以往多项关于预付手续费和驻留手续费的讨论,例如 Optech 在各期新闻部分总结的:#86#119#120#122#136#263

    这份协议建立在 Law 的 “链下支付解决(offchain payment resolution,OPR)” 协议(详见 周报 #329)基础上。OPR 协议要求通道的双方都分配 100% 数量的资金(总计是 200%)到一个可燃烧的输出(burnable output)中,任何一方都可以单方面摧毁这些资金。而在新协议中,这些风险资金就是预付手续费加上最大的驻留手续费。如果双方都满意于对方正确地遵守了协议,例如所有的手续费都正确支付了,那就从他们链下支付的未来版本中移除相关的可燃烧的输出。如果任何 一方不满意,那就可以关闭通道、销毁那个可燃烧的输出。虽然这时候不满意的一方也会损失资金,但对方也是如此,这就阻止了任何一方从违反协议中受益。

    Law 表示,这也是 “通道阻塞攻击” 的一种解决方案。通道阻塞攻击是闪电网络协议的一个弱点,已被发现近十年了,这个弱点让攻击者可以几乎不必付出任何代价,就阻止一个受害者节点使用自己部分甚至全部资金。在一个回复中,有人指出,驻留手续费的加入可能也会让 “驻留型发票(hold invoices)” 对整个网络变得更加可持续。

  • 关于 testnet 3 和 testnet 4:Sjors Provoost 在 Bitcoin-Dev 邮件组中发帖询问是否有人还在使用 testnet 3,毕竟 testnet 4 已经运行了大约 6 个月了(详见周报 #315)。Andres Schildbach 回复 称希望在他的热门的钱包的测试网版本中继续使用 testnet 3 至少 1 年。Olaoluwa Osuntokun 指出,testnet 3 最近已经变得比 testnet 4 可靠得多。他附上来自 Fork.Observer 网站的关于两个测试网的区块树截图来证明自己的观点。下面是我们自己的截图,显示了撰文之时 testnet 4 的状态:

    Fork Monitor showing the tree of blocks on testnet4 on 2025-03-25

    在 Osuntokun 的帖子之后,Aotoine Poinsot 开设了一个独立的帖子来关注 testnet 4 的问题。他声称 tesenet 4 的问题是难度重设规则的结果。这个规则只存在于测试网上,允许一个区块亿最低难度成为有效区块,如果其区块头时间比父区块的时间晚 20 分钟以上的话。Provoost 给出了关于这个问题的更多细节。Poinsot 提议在 testnet 4 上执行一次硬分叉来移除这个规则。Mark Erhardt 建议了执行日期:2026 年 1 月 8 日。

  • 转发特定 taproot 附言的计划:Peter Todd 在 Bitcoin-Dev 邮件组中宣布了他升级自己的基于 Bitcoin Core 的节点 Libre Relay 的计划:开始转发包含 taproot 附言(annexes)的交易,只要这些附言遵循下列规则:

    • 以 0x00 为前缀:“所有非空的附言都必须以字节 0x00 开始,以区分自身与【未来的】共识相关的附言。”
    • 全有或全无:“所有输入都必须有一段附言。这保证了使用附言是选择性加入的,可以阻止多方协议中的交易钉死攻击。”

    这一计划基于 2023 年由 Joost Jager 提出的 PR,该 PR 又基于 Jager 在更早的时候开启的一项讨论(详见 周报 #255)。用 Jager 的话来说,这份 PR 也 “限制了无结构的附言数据不能超过 256 字节【…】一定程度上也保护了在多方交易中使用附言的参与者,避免附言的膨胀。”Todd 的版本并不包含这条规则,他认为 “选择性加入使用附言的规则就足够了”。如果还不够,他提出了一项额外的转发规则变更,可以防止对手方钉死攻击。

    截至本刊撰写之时,在当前的邮件组帖子中,还没有人说明自己准备如何使用附言。

Bitcoin Stack Exchange 的精选问答

新版本和候选版本

热门比特币基础设施项目的新版本和候选版本。请考虑升级到新版本或帮助测试候选版本。

  • Bitcoin Core 29.0rc2 是这种网络主流全节点实现的下一个主要版本的候选发行。请阅读《29 版本测试指南》。

  • LND 0.19.0-beta.rc1 是这个流行的闪电节点实现的候选发行。可能需要测试的主要提升之一是新的基于 RBF 的手续费追加法,用在合作式关闭场景中,详情见下文的重大代码变更章节。

重大的代码和文档变更

本周出现重大变更的有:Bitcoin CoreCore LightningEclairLDKLNDlibsecp256k1Hardware Wallet Interface (HWI)Rust BitcoinBTCPay ServerBDKBitcoin Improvement Proposals (BIPs)Lightning BOLTsLightning BLIPsBitcoin InquisitionBINANAs

  • Bitcoin Core #31603 更新了 ParsePubkeyInner 解析器,以拒绝开头或结尾有空格的公钥,从而让解析动作与 rust-miniscript 项目一致。由于描述符校验和的保护,以往应该也无法意外加入空格。现在,getdescriptorinfoimportdescriptors RPC 命令会传出错误,如果一个descriptor中的公钥包含这样的空格的话。

  • Eclair #3044 出于抵御链重组的通道安全性考虑,将默认的最小确认数要求从 6 提高到 8 。该 PR 也取消了该数值基于通道注资数量的缩放,因为通道容量可能在 “通道拼接” 期间剧烈改变,所以说服节点接收一个更小的确认数量会让大量资金处在风险之中。

  • Eclair #3026 为使用 Pay-to-Taproot (P2TR) 地址的 Bitcoin Core 钱包添加支持(包括由 Eclair 管理的观察钱包),作为实现 “简单 taproot 通道” 的基础。一些手动关闭交易依然要求使用 P2WPKH 脚本,即使正在使用 P2TR 钱包。

  • LDK #3649 通过加入必要的字段,增加了使用 BOLT12 offers 给闪电网络服务商(LSPs)支付的功能。以往,只能使用 BOLT11 和链上支付选项。这也是 BLIPs #59 的提议。

  • LDK #3665BOLT11 发票的体积限制从 1023 字节提高到 7089 字节,以跟 LND 的限制保持一致;这个数值基于可以放进一个 QR 码中的最大字节数。该 PR 的作者说,跟 BOLT 11 发票的编码兼容的 QR 码实际上最多只能承载 4296 个字符,但 LDK 还是选择了 7089 这个数值,因为 “系统层面的一致性可能是更重要的。”

  • LND #8453#9559#9575#9568LND #9610 引入了一种基于 BOLTs #1205RBF 合作关闭流程(详见周报 #342) ,这种流程让任何一方都能使用自己的通道资金来提高手续费率。以往,一方有时候必须说服对手方追加手续费,这常常会失败。若要启用这一特性,需要设置 protocol.rbf-coop-close 的配置标签。

  • BIPs #1792 更新了 OP_CHECKTEMPLATEVERIFY 的规范 BIP119。具体来说,修改了措辞从而使之更加清晰、移除了激活逻辑、将 “Eltoo” 重命名为 “LN-Symmetry”,还增加了新的限制条款提议和使用 OP_CTV 的项目(比如Ark)的引用。

  • BIPs #1782 修订了 BIP94 的规范部分的格式,变得更加清晰易读;该 BIP 列举了 testnet4 的共识规则。