本周的周报介绍了旧版 btcd 软件中的一个已经修复的共识故障、为闪电网络使用 “v3 交易转发” 和 “一次性锚点” 而提出的变更,以及比特币相关规范的一个新仓库。此外是我们的常规栏目:服务和客户端软件的升级介绍、软件新版本和候选版本的介绍,以及热门比特币基础设施软件的重大变更总结。

新闻

  • 已修复的 btcd 共识故障披露:Niklas Gögge 在 Delving Bitcoin 论坛公开了他已经尽责披露的旧版 btcd 软件中的一个共识故障。相对时间锁是通过向交易输入的 sequence 字段添加共识强制的含义的软分叉而添加到比特币中的。为了保证在分叉之前创建的任何预签名交易都不会因此而作废,相对时间锁仅对交易版本号为 2 乃至更高数字的数字,以允许原本默认版本号为 1 的交易可以容许任意输入。然而,在最初的比特币软件中,版本号是有符号的整数,即也可能是负数。而 BIP68 的 “参考实现” 部分指出,“版本号为 2 以及更高” 意味着将版本号从有符号的整数转变为无符号的整数,从而保证这个规则适用于任何交易版本号不为 0 和 1 的交易。

    Gögge 发现,btcd 并没有实现这种从有符号到无符号整数的转变,所以有可能构造处一笔采用负版本号的交易,Bitcoin Core 将要求它遵循 BIP68 规则,但 btcd 不会。这时候,前者会拒绝这笔交易(以及任何包含了这笔交易的区块),而后者则会接受它(并且不会拒绝包含它的区块),从而导致链分裂。攻击者可以利用这一点来欺骗一个 btcd 节点的运营者(或者连接到 btcd 节点的软件)接受无效的比特币。

    这个 bug 早已被私下披露给 btcd 的维护人员,他们在最近的 v0.24.0 版本中修复了这个故障。强烈推荐任何使用 btcd 来确保共识的人都升级软件。此外,Chris Stewart 还在 Delving Bitcoin 帖子中回复了一个在 bitcoin-s 库中的相同故障的补丁。任何可能用于验证 BIP68 相对时间锁的代码的作者都应立即检查代码中有无相同的错误。

  • 为闪电网络使用 v3 交易转发和一次性锚点而提出的变更:Bastien Teinturier 在 Delving Bitcoin 论坛中提出了他认为闪电网络规范应该采取、以实质上利用 “v3 交易转发” 和 “一次性锚点” 的变更。这些变更似乎是简单的:

    • 锚点切换:当前为了在 “CPFP carve out” 规则下保证 CPFP 手续费追加 能力而放置在承诺交易中的两个锚点输出需要移除,代之以一个一次性锚点输出。

    • 减少延迟:承诺交易输出的额外 1 个区块的时延需要移除。使用它们是为了保证 CPFP carve out 总是能工作,但在 v3 交易转发规则下已不再必要。

    • 隐式 HTLC 重定向 :不再将所有 “隐式 HTLC” 的价值放到承诺交易的手续费中,而将它们的总价值加到锚点输出的价值中,以保证额外的手续费会被用来保证承诺交易以及一次性锚点的确认(见上周的周报的讨论)。

    • 其它变更:其它一些较小的变更以及简化。

    后续的讨论检查了这些变更的一些有趣的后果,包括:

    • 减少 UTXO 需求:得益于额外 1 区块时延的移除,保证正确的通道状态上链变得更加简单。如果欺诈的一方广播了一笔已经撤销的承诺交易,另一方可以立即使用该承诺交易中属于自己的主要输出、以 CPFP 法增加该承诺交易的手续费。他们不再需要保留一个单独的、已经确认的 UTXO 以备 CPFP 使用。为了确保安全,通道的参与者应该保留足够的储备余额,因为 BOLT2 中指定的 1% 下限可能不足以覆盖手续费。对于保留了足够多储备的非转发节点,出于安全理由而需要额外 UTXO 的唯一场景只剩他们要接收一笔进入的支付的时候。

    • 渗透 v3 逻辑:在回应闪电网络规范会议中出现的担忧(闪电网络可能需要很长时间来设计、实现和部署这些变更)时,Gregory Snders 提议采用一个过渡阶段,对看起来像当前锚点风格的闪电网络承诺交易进行临时的特殊处理,以允许 Bitcoin Core 部署族群交易池而不会被闪电网络的开发阻碍。当软件已经得到广泛部署、所有的闪电客户端实现都升级到使用 v3 时,可以抛弃过渡的特殊规则。

    • 请求为子交易体积设置上限:v3 交易转发的提议草案将待确认交易的子交易的体积上限设为 1000 vbyte。这个体积越大,诚实用户需要为克服 “交易钉死” 而支付的手续费就越多(见周报 #283)。这个体积越小,诚实用户可以用来贡献手续费的输入位置就越少。

  • 新的文档仓库:Anthony Towns 在 Bitcoin-Dev 邮件组中公布了一个用于存放协议规范的新仓库:Bitcoin Inquisition Numbers And Names AuthorityBINANA)。截至本刊撰写之时,仓库内已有 4 个规范:

    • BIN24-1 OP_CAT,由 Ethan Heilman 和 Armin Sabouri 撰写。周报 #274 有他们的软分叉提议的介绍。

    • BIN24-2 Heretical Deployments,由 Anthony Towns 撰写,介绍了 Bitcoin Inquisition 软件在默认的 signet 上测试软分叉提议和其它变更的用法。详细介绍见周报 #232

    • BIN24-3 OP_CHECKSIGFROMSTACK,由 Brandon Black 撰写,说明了这个提出了很长时间的想法上周的周报介绍了 Black 将该操作码放进 LNHANCE 软分叉组合的的提议。

    • BIN24-4 OP_INTERNALKEY,由 Brandon Black 撰写,说明了一个从脚本解释器中检索 taproot 内部公钥的操作码。它也是上周介绍的 LNHANCE 软分叉组合的一部分。

    Bitcoin Optech 已经将 BINANA 仓库加入我们观察更新的文档资源清单,该清单也包括 BIP、BOLT 和 BLIP。未来的更新可能会出现在 “重大代码和文档变更” 栏目中。

服务和客户端软件的变更

在这个月度栏目中,我们列出比特币钱包和服务的有趣更新。

新版本和候选版本

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

  • LDK 0.0.120 是这个用于开发闪电网络嵌入应用的库的安全更新。它 “修复了一个拒绝服务式攻击攻击漏洞;在本地启用 UserConfig::manually_accept_inbound_channels 选项时,该漏洞可被对等节点的不可信任的输入触及”。多项其它 bug 修复和少量提升也包含在其中。

  • HWI 2.4.0-rc1 是这个为多种硬件签名器提供通用接口的包的下一个版本的候选。

重大的代码和文档变更

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