/ home / newsletters /
Bitcoin Optech Newsletter #286
本周的周报介绍了旧版 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 Authority(BINANA)。截至本刊撰写之时,仓库内已有 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。未来的更新可能会出现在 “重大代码和文档变更” 栏目中。
-
服务和客户端软件的变更
在这个月度栏目中,我们列出比特币钱包和服务的有趣更新。
-
● Envoy 1.5 推出:Envoy 1.5增加了对 taproot 花费和接收的支持,并改变了处理不经济的输出的方法;此外还有一些 bug 修复和其它更新。
-
● Liana v4.0 推出:Liana v4.0 已经 released,包含了对 RBF 手续费追加法、使用 RBF 取消交易、自动化选币以及硬件签名设备地址验证的支持。
-
● Mercury Layer 推出:Mercury Layer 是一种 statechain 实现,它使用了 MuSig2 的一个变种以实现 statechain 运营者的盲签名。
-
● AQUA 钱包推出:AQUA wallet是一款开源的移动端钱包,支持比特币、闪电网络以及 Liquid 侧链。
-
● Samourai Wallet 推出原子化互换特性:这种跨链原子化互换特性,基于以前的研究,允许在比特币和 Monero 链之间一对一交换资金。
新版本和候选版本
热门比特币基础设施项目的新版本和候选版本。请考虑升级到新版本或帮助测试候选版本。
-
● LDK 0.0.120 是这个用于开发闪电网络嵌入应用的库的安全更新。它 “修复了一个拒绝服务式攻击攻击漏洞;在本地启用
UserConfig::manually_accept_inbound_channels
选项时,该漏洞可被对等节点的不可信任的输入触及”。多项其它 bug 修复和少量提升也包含在其中。 -
● HWI 2.4.0-rc1 是这个为多种硬件签名器提供通用接口的包的下一个版本的候选。
重大的代码和文档变更
本周出现重大变更的有:Bitcoin Core、Core Lightning、Eclair、LDK、LND、libsecp256k1、Hardware Wallet Interface (HWI)、Rust Bitcoin、BTCPay Server、BDK、Bitcoin Improvement Proposals (BIPs) 和 Bitcoin Inquisition。
-
● Bitcoin Core #29239 更新了
addnode
RPC,以在启用-v2transport
配置选项时连接使用 v2 传输协议 的节点。 -
● Eclair #2810 允许在 “蹦床路由” 中使用的洋葱加密消息超过 400 字节,当前使用的上限是 BOLT4 指定的 1300 字节。小于 400 字节的蹦床路由信息会被填充到 400 字节。
-
● Rust Bitcoin #2230 加入了一种计算一个输入的 实质价值 的函数,就是用它的面额减去花费它所需付出的代价。