本周的周报描述了对 BIP 流程的拟议修改,总结了在 Bitcoin Core 中添加包中继支持的计划,并链接了关于将 LN 节点信息添加至 DNS 的讨论。此外还包括常规的客户端更新、如何为 Taproot 做准备、新版本发布以及流行比特币基础设施软件的显著变更等内容。

新闻

  • BIP 扩展提案:​​ Karl-Johan Alm 在 Bitcoin-Dev 邮件列表发布提案,建议对已达到一定稳定性的 BIP 仅允许进行小范围修改。任何对稳定 BIP 条款的变更需通过新的 BIP 来扩展原有文档。

    Anthony Towns 反对该提案,并提出对现有流程的若干调整建议,包括在 BIPs 仓库中设立 Drafts 目录,以及取消 BIPs 维护者自主分配提案编号的权限。

  • 打包内存池接受与打包 RBF(Replace-By-Fee):​​ Gloria Zhao 在 Bitcoin-Dev 邮件列表发布关于包中继的设计方案,该方案将增强 CPFP(Child-Pays-For-Parent)和 RBF 手续费追加的灵活性与可靠性。初始实现仅允许通过 Bitcoin Core 的 RPC 接口提交交易包,但最终目标是使其支持 P2P 网络。Zhao 简要总结了对比特币核心交易接受规则的拟议修改:

    • 交易包可包含已存在于内存池的交易
    • 交易包为两代结构(多父单子)
    • 手续费相关检查使用交易包整体费率。这意味着钱包可创建利用 CPFP 的交易包
    • 允许父交易根据类似 BIP125 的规则进行 RBF。这实现了 CPFP 与 RBF 的结合,即子交易的手续费可用于替换内存池中的冲突交易

    该邮件呼吁开发者对提案进行反馈,特别是预期使用该功能或可能受变更影响的开发者。

  • LN 节点的 DNS 记录:​​ Andy Schroder 在 Lightning-Dev 邮件列表提议标准化使用 DNS 记录解析域名至 LN 节点的 IP 地址和公钥。截至本文撰写时,该讨论仍在进行中。

服务和客户端软件的更改

本月重点比特币钱包和服务的有趣更新。

  • 闪电网络地址标识符发布:​​ André Neves 宣布Lightning Address协议,该协议将 LNURL-pay 流程封装为类似电子邮件的地址格式示意图

  • ZEBEDEE 发布 LN 钱包浏览器扩展:​​ ZEBEDEE 宣布推出 Chrome 和 Firefox 扩展程序,集成其游戏专用钱包

  • Specter v1.6.0 支持单密钥 Taproot:​​ Specter 的 v1.6.0 版本新增对 regtest 和 signet 上 Taproot 地址的支持。

  • Impervious 发布 LN P2P 数据 API:​​ 基于 LND 构建的 Impervious 框架允许开发者通过API在闪电网络上构建 P2P 数据流应用。

  • Fully Noded v0.2.26 发布:​​ macOS/iOS 钱包 Fully Noded 新增对 TaprootBIP86 和 signet 的支持。

准备 Taproot #14:在 signet 上测试

关于开发者和服务提供商如何为即将在区块高度 709,632 激活的 Taproot 做准备的每周系列

尽管你无法在主网区块 709,632 前安全使用 Taproot,但你现在可以通过 testnet 或 signet 使用 Taproot。与使用 Bitcoin Core 的 regtest 模式创建本地测试网络(如 Optech Taproot 工作手册 所示)相比,使用 testnet 或 signet 能更方便地测试你的钱包与其他用户钱包的交互。

本文将演示如何在 signet 上使用 Bitcoin Core 内置钱包接收和花费 Taproot 交易。你可以根据这些指令调整,以测试你的钱包与 Bitcoin Core 之间的收发功能。

虽然 Bitcoin Core 22.0 的内置钱包技术上支持收发 Taproot 交易,但我们建议你编译 Bitcoin Core 的拉取请求 #22364,该请求将 Taproot 设为描述符钱包的默认选项。编译完成后,启动 signet:

$ bitcoind -signet -daemon

如果是首次使用 signet,需同步其区块链。当前数据量不足 200 MB,可在约一分钟内完成同步。可通过 getblockchaininfo RPC 监控同步进度。同步完成后,创建描述符钱包:

$ bitcoin-cli -signet -named createwallet wallet_name=p4tr descriptors=true load_on_startup=true
{
  "name": "p4tr",
  "warning": "此钱包为实验性描述符钱包"
}

现在可生成 bech32m 地址:

$ bitcoin-cli -named -signet getnewaddress address_type=bech32m
tb1p6h5fuzmnvpdthf5shf0qqjzwy7wsqc5rhmgq2ks9xrak4ry6mtrscsqvzp

使用该地址可从 signet faucet 获取测试币。需等待交易确认,时间与主网类似(通常 30 分钟内,有时更长)。查看交易详情时,会注意到创建的 P2TR 脚本:

$ bitcoin-cli -signet getrawtransaction 688f8c792a7b3d9cb46b95bfa5b10fe458617b758fe4100c5a1b9536bedae4cd true | jq .vout[0]
{
  "value": 0.001,
  "n": 0,
  "scriptPubKey": {
    "asm": "1 d5e89e0b73605abba690ba5e00484e279d006283bed0055a0530fb6a8c9adac7",
    "hex": "5120d5e89e0b73605abba690ba5e00484e279d006283bed0055a0530fb6a8c9adac7",
    "address": "tb1p6h5fuzmnvpdthf5shf0qqjzwy7wsqc5rhmgq2ks9xrak4ry6mtrscsqvzp",
    "type": "witness_v1_taproot"
  }
}

接下来可生成第二个 bech32m 地址并发送资金以测试花费功能:

$ bitcoin-cli -named -signet getnewaddress address_type=bech32m
tb1p53qvqxja52ge4a7dlcng6qsqggdd85fydxs4f5s3s4ndd2yrn6ns0r6uhx
$ bitcoin-cli -named -signet sendtoaddress address=tb1p53qvqxja52ge4a7dlcng6qsqggdd85fydxs4f5s3s4ndd2yrn6ns0r6uhx amount=0.00099
24083fdac05edc9dbe0bb836272601c8893e705a2b046f97193550a30d880a0c

查看该花费交易的输入部分,可见其见证数据仅包含一个 64 字节的签名。这比 P2WPKH 或其他传统比特币交易所需的见证数据更精简(以虚拟字节计)。

$ bitcoin-cli -signet getrawtransaction 24083fdac05edc9dbe0bb836272601c8893e705a2b046f97193550a30d880a0c true | jq .vin[0]
{
  "txid": "bd6dbd2271a95bce8a806288a751a33fc4cf2c336e52a5b98a5ded432229b6f8",
  "vout": 0,
  "scriptSig": {
    "asm": "",
    "hex": ""
  },
  "txinwitness": [
    "2a926abbc29fba46e0ba9bca45e1e747486dec748df1e07ee8d887e2532eb48e0b0bff511005eeccfe770c0c1bf880d0d06cb42861212832c5f01f7e6c40c3ce"
  ],
  "sequence": 4294967294
}

通过实践上述指令,你将能轻松在任何支持 signet 的钱包中测试 Taproot 的收发功能。

发布与候选发布

热门比特币基础设施项目的新版本与候选版本。建议升级至新版本或协助测试候选版本。

显著代码和文档变更

本周 Bitcoin CoreC-LightningEclairLNDRust-Lightninglibsecp256k1硬件钱包接口 (HWI)Rust BitcoinBTCPay Server比特币改进提案 (BIPs)闪电网络规范 (BOLTs)的显著变更。

  • Eclair #1932 实现了 BOLTs #824 中修订的锚定输出协议,所有预签名的 HTLC 花费均使用零手续费,从而避免手续费被窃取。详见 Newsletter #165

  • LND #5405 扩展了 updatechanpolicy RPC 功能,使其能够报告因当前策略(或因其他问题如通道注资交易未确认)而无法使用的通道。

  • LND #5304 使 LND 能够创建和验证包含 LND 自身未知权限的 macaroon。该变更允许 Lightning Terminal 等工具使用单一 macaroon 在多个与同一 LND 节点通信的守护进程中进行身份验证。

  • Rust Bitcoin #628 新增对 Taproot 支付 sighash 构造的支持,并优化了传统、隔离见证和 Taproot 输入的 sighash 缓存存储。

  • Rust Bitcoin #580 添加了对 BIP37 规范中定义的交易布隆过滤器 P2P 网络消息的支持。

  • Rust Bitcoin #626 新增获取区块剥离大小(移除所有隔离见证数据的区块)和交易虚拟字节大小的函数。

  • Rust-Lightning #1034 新增可检索完整通道余额列表的功能,包括正在关闭过程中的通道。这使得终端软件即使在部分资金仍需确认时也能显示一致的余额信息。