/ home / newsletters /
Bitcoin Optech Newsletter #410
本周的周报总结了关于钱包移除其所创建交易中的 opt-in 手续费替换信号的讨论。此外还包括我们的常规栏目:介绍服务和客户端软件的近期变化,并总结流行比特币基础设施软件的重大变更。
新闻
-
● 关于从钱包交易中移除 RBF 信号的讨论: rkrux 在 Bitcoin-Dev 邮件列表上发帖,提议钱包停止在它们创建的交易中发送 opt-in RBF 信号。根据 BIP125,当一笔交易至少有一个输入将
nSequence设为低于MAX-1(其中MAX为0xffffffff)时,该交易就会发出可替换信号。自 full RBF 成为默认行为(见周报 #315)且mempoolfullrbf退出选项被移除(见周报 #329)之后,这个信号就不再影响一笔交易是否能够被替换。使用 Bitcoin Core 默认策略的节点,无论交易的nSequence取值如何,都会替换任何交易。如今,这一信号主要用于给创建该交易的钱包做指纹识别,因此帖子主张钱包应收敛到一个统一的取值。rkrux 打开了 Bitcoin Core #35405,希望让 Bitcoin Core 钱包默认停止发信号,使用
nSequence = MAX-1,并向其他钱包作者询问可以标准化为哪个取值。Murch 和 Electrum Wallet 贡献者 SomberNight 指出,MAX-2已经是主流取值:根据 mainnet-observer,约 75% 的交易使用这一取值,而几乎所有 Electrum Wallet 交易也都如此。由于目前多数交易仍在发信号,如果 Bitcoin Core 转而使用不发信号的MAX-1,反而会使其交易更容易被识别出来,而不是融入整体,因此两人都主张应当改为收敛到MAX-2。rkrux 在收到这一反馈后关闭了该 PR。
服务和客户端软件的变化
在这个月度专题中,我们重点介绍比特币钱包和服务的有趣更新。
-
● Sparrow Wallet 2.5.0 增加静默支付接收支持: Sparrow 2.5.0 添加了静默支付接收钱包支持,包括隔离网络的硬件钱包签名器,这建立在 2.3.0 中加入的发送支持之上(见周报 #377)。
-
● Bark 在比特币主网上线: Second 宣布,其 Ark 协议实现 Bark 已开始在比特币主网上运行,同时还提供了一个公开 Ark 服务器、Bark SDK 以及面向开发者的
barkd守护进程。Bark 此前已在 signet 上推出(见周报 #346)。 -
● Arké Ark 钱包发布: Arké 是一款原生 iOS 钱包,集成了 Ark 协议、链上(BDK)支付和闪电网络支付,并将这三层的交易展示在统一的历史记录中。它目前运行在 signet 上,主网上线仍在推进中。
-
● Noah Ark 钱包发布: Noah 是一款跨平台移动钱包,基于 Ark 协议,支持闪电网络,并采用最小化信任的设计。目前处于 beta 阶段。
-
● Alby Hub v1.23.0 发布: Alby Hub v1.23.0 增加了即时通道,可自动开启以接收入站支付;还添加了实验性的 Ark 支付后端,以及其他多项改进。
-
● JoinMarket NG 0.32.0 发布: JoinMarket-NG 是该 coinjoin 实现的一个社区维护分叉版本,它发布了对 Neutrino 后端的交易池支持,使 taker 能够验证 maker 的广播,此外还包括若干 fidelity bond 和可靠性方面的改进。
重大代码和文档变更
以下是来自 Bitcoin Core、Core Lightning、Eclair、LDK、LND、libsecp256k1、Hardware Wallet Interface (HWI)、Rust Bitcoin、BTCPay Server、BDK、Bitcoin Improvement Proposals (BIPs)、Lightning BOLTs、Lightning BLIPs、Bitcoin Inquisition 和 BINANAs 的近期重大变更。
-
● Bitcoin Core #35221 增加了对 BIP434 对等节点特性协商框架的支持(见周报 #386和#390)。它增加了一条
featureP2P 消息,可在version和verack之间交换,用于广播可选的对等节点特性,并将 P2P 协议版本号提升到70017。Bitcoin Core 当前实现了协商机制,会忽略未知但合法的特性 ID;而对于发送格式错误feature消息、在verack之后发送该消息,或在未协商兼容协议版本的情况下发送该消息的对等节点,则会断开连接。它目前尚未广播任何具体的可选特性。 -
● Bitcoin Core #35254 在使用之后会从内存中抹除更多的密钥派生材料。
CHMAC_SHA256和CHMAC_SHA512现在会清理其临时rkey与内部哈希temp栈缓冲区,这些缓冲区可能包含由 BIP32 链码或 BIP324 HKDF 密钥材料派生出的数据。ChainCode的类型也已从uint256typedef 改为带有memory_cleanse()析构函数的类型,从而在扩展密钥和局部变量中的 BIP32 链码对象被销毁时,将它们从内存中抹除。 -
● Bitcoin Core #35498 修复了
FetchBlockRPC 路径中的一个竞争条件:当向一个正在断开的对等节点请求区块时,FetchBlock可能在锁定cs_main之前先获得一个有效的对等节点引用,但对等节点清理过程可能在BlockRequested()记录请求之前移除该对等节点的CNodeState,从而导致断言失败。修复方案是在查找对等节点之前先锁定cs_main,确保在区块请求被注册时,该对等节点状态不会被移除。 -
● Eclair #3318 修复了一个拼接重连边缘情形:Eclair 可能会在未发送
splice_locked的情况下,更新本地对新锁定的拼接注资交易的状态。这种情况可能发生在 Eclair 发送channel_reestablish之后、但在收到对方的channel_reestablish之前,从而使双方在“哪些注资状态需要commit_sig消息”这一点上不同步,并导致强制关闭。现在,Eclair 会在重连期间处理注资锁定事件,并在需要时发送splice_locked。 -
● LND #10789 为实现 BOLT12 要约 奠定了基础:增加了一个与守护进程无关的
bolt12codec 包,其中包含一个Offer消息类型以及配套的lnwireTLV 基础设施。这个新 codec 会在编码前验证消息,在低层解码时保持宽松,以便进行诊断和模糊测试,并保留未知的已签名范围 TLV,从而使offer_id在解码和重新编码前后保持稳定。 -
● Rust Bitcoin #6321 加强了隔离见证 witness 的解码逻辑,以防止攻击者控制的元素数量导致过度的内存分配。此前,只需少量输入字节,就可以声称存在一个很大的 witness 栈,并迫使系统为 witness 索引空间分配约 16 MB 内存。新的解码器会将收到的 witness 字节追加到其内容缓冲区中,并在
end()阶段于 witness 数据解码完成后再构建元素索引,从而移除了旧的批量分配路径。 -
● LDK #4685 将用于 BOLT12 发票验证的 nonce 重新移回到发票请求或退款的付款人 metadata 中。此前之所以移除该 nonce,是因为它也被保存在盲化回复路径的
OffersContext中,但那会导致发票验证依赖于发票请求或退款本身之外的状态,这与即将到来的 BOLT12 支付证明(见周报 #405)不兼容。现在,出站要约和退款的回复路径上下文只会保存预期的PaymentId,并将其与从收到的发票付款人 metadata 中恢复出的 payment ID 进行比对。