比特币Optech周报第406期

本周比特币Optech周报涵盖BIP322通用签名格式的重大更新,包括人类可读前缀、UTXO信息纳入和PSBT签名支持;提出利用TCP打洞技术帮助NAT后的比特币节点接受入站连接,讨论了中继服务器和Tor/I2P方案;还介绍了Ibis Wallet、LDK Server、Mempool.space v3.3.0等服务更新,以及Bitcoin Core、Eclair、LDK、LND等代码变更,涉及RBF、拼接通道、Erlay、BOLT12联系人等主题。

新闻

  • BIP322:通用签名消息格式的重大更新:Oliver Gugger 在 Bitcoin-Dev 邮件列表中发帖,分享了他关于如何完善 BIP322 的构想。Gugger 在 btcd 中实现支持时,注意到该提案中存在多个开放性问题与空白。他提出了三项主要修订:

    • 使用人类可读的前缀来区分三种签名变体。
    • 在“资金证明”变体中包含 UTXO 信息。
    • 支持基于 PSBT 的消息签名。

    经过一些讨论并吸纳关于 PSBT 构造的反馈后,BIP322 的更新已发布(参见 第 405 期新闻通讯)。Gugger 将 BIP322 推进至完成状态,表明该规范现已稳定并可供实现。自更新以来,有消息重新浮现:Coldcard 在三月已提供了对 BIP322 的支持。

    之前已实现对早期版本 BIP322 支持的项目,应检查其与新规范的兼容性,因为该更新引入了破坏性变更,包括新的可读前缀和修订后的资金证明签名格式。

  • 针对 NAT 后比特币节点的 TCP 打洞技术:0xB10C 在 Delving Bitcoin 上发帖,讨论了一种使家庭路由器 NAT 后的更多节点能够接受入站连接的想法。最初的概念源于观察到:自 Bitcoin Core v30.0 起默认设置 -natpmp=1 并未如预期那样增加住宅 ISP 中可达节点的数量。

    该想法借助打洞技术,这种技术允许位于某些类型 NAT 后的两台主机直接连接,无需通过服务器中继流量。过程如下:两个不可达的主机 Alice 和 Bob 通过第三方交换其公共端点(即 IP 地址和端口),并同时互相发起连接。这会在 NAT 中创建一个映射,从而允许主机完成握手并建立连接。由于该技术基于 TCP 工作,而 TCP 要求节点间精确同步,因此与使用 UDP 的类似技术相比,失败率更高。

    0xB10C 提到了多种使用比特币 P2P 协议进行实现的方案。第一组方案需要一个桥接节点(称为会合服务器)来让 Alice 和 Bob 交换端点信息。该服务器可以提供匹配服务,让不可达主机提供其连接槽位,或者它可以决定将某个现有连接转交给其他对等节点,而不是因缺少空闲入站槽位而驱逐该连接。他还描述了一种直接在 Tor/I2P 下执行打洞的方法,绕过了建立连接所需的第三方服务器。在这种方法中,Alice 会在一个专用的 Tor/I2P 端点上开始监听,Bob 连接到该端点并启动打洞过程。

    该提案尚未正式确定,许多问题仍未解答。0xB10C 征求社区反馈,并邀请讨论以解决许多开放性问题,例如如何分类打洞连接、TCP 打洞的可靠性、可能的攻击以及实现工作量。

服务与客户端软件变更

在本月度专题中,我们重点介绍比特币钱包和服务的有趣更新。

  • Ibis Wallet 宣布发布: Ibis Wallet 是一款基于 BDK 构建的 Android 钱包,支持 UTXO 控制、RBFCPFP 费用管理、多重签名、使用二维码的硬件签名设备集成、静默支付以及 Tor 集成。它还支持可选的第二层,包括 Spark、Liquid,以及未来将支持的 Ark

  • LDK Server 宣布发布: Spiral 宣布了 LDK Server,这是一个面向支付处理商和钱包提供商的 API 优先闪电节点守护进程,基于 LDK Node 构建。它提供 gRPC 接口、嵌入式基于 BDK 的钱包,以及用于 AI 代理与节点交互的模型上下文协议(MCP)服务器。

  • Mempool.space v3.3.0 发布: Mempool v3.3.0 增加了 taproot 脚本树可视化、更新的 PSBT 预览、改进的 费用估算临时粉尘支持、过时区块比较、sighash 图标以及默克尔证明 API 等功能。

  • peer-observer P2P 监控工具: 0xB10C 概述了他的 peer-observer 平台使用的一些开源组件,包括用于从 Bitcoin Core 节点通过 IPC、日志、P2P 和 RPC 源提取事件的基础设施。他还描述了正在进行的关于归档、异常检测和警报工具的开发。

值得注意的代码和文档变更

近期在 Bitcoin CoreCore LightningEclairLDKLNDlibsecp256k1硬件钱包接口 (HWI)Rust BitcoinBTCPay ServerBDK比特币改进提案 (BIPs)Lightning BOLTsLightning BLIPsBitcoin InquisitionBINANAs 中的值得注意的变更。

  • Bitcoin Core #29136 新增一个 addhdkey RPC,该 RPC 导入指定的 BIP32 扩展私钥,若未指定则生成一个,但不使用它来产生任何输出脚本。这使得钱包可以存储一个签名密钥供将来使用(例如用于多重签名脚本),而无需立即从中生成地址。该 PR 还新增了一个 unused(KEY) 描述符类型,由 listdescriptors 返回,这样存储的密钥就可以包含在钱包备份中。

  • Bitcoin Core #34893 更新了 combinepsbt RPC,使其在合并 PSBT 时保留 BIP174 专有字段(参见新闻通讯 #72#181)。此前,combinepsbt 会静默地丢弃专有字段,导致应用特定的 PSBT 元数据丢失。decodepsbt RPC 已能正确解析、序列化和显示这些字段。

  • Bitcoin Core #34860CreateNewBlock() 方法中移除了 include_dummy_extranonce 选项(参见新闻通讯 #392)。Bitcoin Core 现在在创建区块高度 0 到 16 时,始终将虚拟填充追加到内部 coinbase scriptSig 中,因为这些高度下 BIP34 的高度编码本身太短,无法满足共识的最小 scriptSig 长度要求。但是,填充不会包含在通过挖矿 IPC 接口暴露给 Stratum V2 客户端的 CoinbaseTx 结构体的 scriptSigPrefix 字段中(参见新闻通讯 #310#388)。

  • Bitcoin Core #31298 更新了 combinerawtransaction RPC,使其拒绝不相关的交易,而不是静默地返回第一个交易且不报告无法合并。Bitcoin Core 现在会剥离每个交易的输入 scriptSig 和见证数据,比较得到的未签名交易哈希,若它们不匹配则返回错误。

  • Bitcoin Core #28802ArgsManager(Bitcoin Core 的 CLI 参数解析器)增加了对命令特定选项的支持。命令现在可以声明哪些选项适用于它们,使 ArgsManager 能够在相关命令的帮助输出下列出这些选项,并自动拒绝无效的命令-选项组合。该 PR 将此应用于 bitcoin-wallet-dumpfile 选项(参见 新闻通讯 #32),该选项现在仅注册给 dumpcreatefromdump 命令。

  • Eclair #3298 更新了其内部 RBF 逻辑,以遵循新的 BOLT2 费率提升规则,该规则旨在确保在低费率下符合 BIP125 的替换规则。Eclair 现在不再仅应用之前的 25/24 费率倍增器,而是使用两者中较大的值:该倍增器或额外的 25 sat/kw。这与新闻通讯 #400 中介绍的 LDK 行为以及新闻通讯 #404 中介绍的 BOLT 规范更新相匹配。

  • LDK #4575 新增了一个 splice_in_inputs API,允许用户在将资金拼接到通道时手动选择 UTXO。所选 UTXO 将被完全消耗,其价值减去费用后加入通道,不会创建找零输出。这补充了现有的基于金额的拼接输入流程,在该流程中,调用者指定要添加的金额,钱包选择输入。但是,这两种输入选择流程不能在同一资金贡献中混合使用。

  • LND #10814 移除了已弃用的 SendPaymentSendPaymentSyncSendToRouteSendToRouteSyncTrackPayment 端点,这些端点原定在版本 0.21 中移除(参见新闻通讯 #340)。调用者应使用 V2 替代品:SendPaymentV2SendToRouteV2TrackPaymentV2。该 PR 还移除了已弃用的单通道 outgoing_chan_id 字段,要求调用者使用多通道 outgoing_chan_ids 字段(参见 新闻通讯 #33)。

  • Rust Bitcoin #6191 增加了对用于 Erlay 交易协调的 sendtxrcncl P2P 消息进行编码和解码的支持。Bitcoin Core 已作为 Erlay 支持的早期部分添加了对该消息的支持(参见新闻通讯 #223)。然而,完整的 Erlay 交易协调尚未实现。

  • BLIPs #42 增加了 BLIP42,这是一份关于 BOLT12 联系人的规范。由于 BOLT12 报价可以重复使用作为静态闪电支付指令,钱包可以将报价存储为联系人。BLIP 定义了可选的 invoice_request 字段,付款人在向联系人进行出站支付时可以包含这些字段,例如联系人秘钥、付款人自己的报价或 BIP353 名称。这使得收款人能识别来自已知联系人的支付、添加新联系人,以及在无需额外交互的情况下将资金退回给付款人。

  • 原文链接: bitcoinops.org/en/newsle...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Bitcoin Optech
Bitcoin Optech
江湖只有他的大名,没有他的介绍。