Taproot的BIP 9部署代码被移除——本周Bitcoin Core #36

INSIDER 发布于 2026-03-27 阅读 72

本周Bitcoin Core合并了多个PR,其中最关键的是移除了Taproot的BIP 9部署代码,因为自v24.0起所有区块已强制启用Taproot。其他更新包括:在getblockchaininfo RPC中添加后台验证信息;当交易输入非标准时报告调试错误消息;修复私有广播交易过早标记为过时的bug。此外,IRC会议讨论了网络分拆、QML GUI进展和libevent移除等工作。

bitcoin++ 是一个国际比特币开发者会议系列。“Insider Edition”是我们的新闻编辑室,报道 bitcoin++ 世界内外正在发生的事情。

上周比特币动态

Taproot BIP 9 部署已被删除 - 本周 Bitcoin Core #36

本周 Bitcoin Core 移除了 Taproot 部署代码...

大家好 👋,我是 kevkevin。我是 Insider Edition 的开源开发者兼记者。上周,我审查了 Bitcoin Core 仓库中的几个拉取请求。

本周,Sjors Provoost 的 PR 被合并,该 PR 从 consensus.vDeployments 中删除了 DEPLOYMENT_TAPROOT。这听起来可能有点吓人,但这只是一些清理工作,因为从 v24.0 开始,Taproot 已被所有区块强制启用。

详情如下!

已合并的 PR
每周,都会有若干更改被正式添加到 Bitcoin Core 中。本周合并了 42 项更改。以下是我认为本周比较有趣的一些。

Pol Espinasa 去年八月开启了此 PR,以更新 getblockchaininfo RPC。因为在这次更改之前,即使进行了后台验证,它也会返回 verificationprogress=1initialblockdownload=false

Espinasa 所做的更改是向 getblockchaininfo RPC 添加关于后台验证的信息,类似于 validationprogress RPC 的做法。

  • 策略:报告输入为何不符合标准的调试消息ismaelsadeeq 此 PR 是使该功能生效的第二次尝试。Abubakar Sadiq Ismail 对一个在 2018 年关闭的 PR 进行了第二次尝试:当一笔交易通过验证检查但因不符合标准而未能通过 PreChecks 时,现在会返回一个无效的验证状态和一个调试错误消息。

在此之前,调试错误消息不会指明为何输入被视为不符合标准。这意味着开发者或用户很难理解他们的交易为何被标记为不符合标准而失败。

  • 移除 Taproot BIP 9 部署Sjors 如前所述,我们已经将 Taproot 升级包含在 Bitcoin Core 中有一段时间了。确切地说,从 v24.0 开始,所有区块都强制启用 Taproot。Sjors Provoost 认为,删除任何可能与 Taproot 部署相关的代码是合理的,因为我们可以安全地假设它已经成功部署,不再需要了。

此更改从 consensus.vDeployments 中移除了 DEPLOYMENT_TAPROOT。删除它而不是将其标记为已埋葬的原因是激活高度已从代码库中移除,而 DEPLOYMENT_SEGWIT 的高度仍然被依赖。

更改总是在不断更新和实时审查中。以下是一些仍在进行中并需要审查的值得关注的 PR。

动机

目前,private_broadcast 中新添加的交易几乎立即被 resend-stale 任务标记并记录为陈旧。

Bug

m_transactions 将交易映射到 std::vector<SendStatus>。当 try_emplace 添加新交易时,该向量为空。当 GetStale() 运行时,DerivePriority() 评估空向量并返回一个默认的 Priority 结构体,其中 last_confirmed 评估为 Unix 纪元(1970年1月1日)。陈旧检查器看到一个 50 年前的时间戳,并在下一个重发陈旧周期中将其标记。

修复

与其修改瞬态 Priority 结构体或通过忽略具有 0 次选取的交易来创建“僵尸交易”边缘情况,此 PR 修改了状态容器:

  • private_broadcast.h 中将 SendStatus 向量封装在一个新的 TxSendStatus 结构体中。

  • TxSendStatus 在 emplaced 时自动捕获 time_added

  • GetStale() 现在检查 p.num_confirmed == 0,以使用新的 5 分钟 INITIAL_STALE_DURATION 宽限期根据 time_added 测量年龄。一旦开始网络交互,则回退到 last_confirmed 和标准的 1 分钟 STALE_DURATION


IRC 会议记录
每周四都会举行 IRC 会议。以下是该会议的一些简短记录。
<fjahr> #topic 内核工作组更新 (sedited)
<sedited> 这周我这边没有更新,接下来三周我将离线。
<fjahr> #topic 基准测试工作组更新 (l0rinc, andrewtoth)
<andrewtoth_> 我这周没有什么要说的。
<fjahr> #topic 网络分裂工作组更新 (cfields)
<cfields> 终于有进展了!我有一个分支,清理了所有本地地址处理,目前这只是一堆到处使用的全局函数(GetLocal()、AddLocal() 等)。最终它们都用于 GetLocalAddrForPeer()。
<cfields> 我的第一步只是移除对 CNode 的依赖,并将所有函数移到一个新的 LocalAddressManager 中。目前,它被实例化为一个静态全局变量。功能上没有变化,但现在理解其工作原理和测试要容易 10 倍。下一步将是实际实例化它并将其存储在 node 中。
<cfields> 在操作过程中,我发现了一些可能应该修复的讨厌的泄漏。我正在编写测试和文档,以便提出一些修复和行为更改。
<cfields> 两个流(重构和修复)有可能并行进行,但我认为在重构为一个合理的管理器类之后,更容易理解正在发生的事情并进行测试。所以我可能会先提交那个工作的 PR。
<fjahr> 酷,关于网络分裂还有其他要说的吗?
<cfields> 没有了,暂时就这些。
<fjahr> #topic QML GUI 工作组更新 (johnny9dev)
<johnny9dev> qml 与 qt widgets gui 的解耦已经完成。其中一部分还包括项目的最后一部分自动化测试工具。具体来说是用于模拟钱包和节点接口的 gmock。
<johnny9dev> 所以项目现在有了全面的测试:单元测试、qml 测试以及端到端的 gui 测试。
<johnny9dev> 功能方面,钱包导入/恢复已被合并,钱包迁移的 PR 也已提交。本周我完成了所有费用设置功能的实现。这些将在未来几天内提交 PR。
<johnny9dev> epicleafies 有很多已完成的特性的 PR 等待处理,所以我的首要任务是在测试框架稳定下来且它们不再有冲突后,完成对所有这些 PR 的审查。
<johnny9dev> epicleafies:能分享一下你的状态吗?
<fanquake> gmock 是指 Google Test / Mock 吗?
<epicleafies> 是的,过去一周我提交了添加桌面托盘图标/功能和 rpc 控制台页面的 PR。
<johnny9dev> 是的,这就是我所知道的模拟工具。未来可以替换,但我一直很喜欢它。
<johnny9dev> 只用了 gmock,没有用 gtest 的东西。
<fjahr> 似乎 GUI 部分就这些了?
<johnny9dev> 是的,就这些。我们还会提交一些更多的功能 PR,之后我可能会做一次评估,看看还有哪些差距,然后分享出来。
<fjahr> #topic 移除 Libevent (pinheadmz, fjahr)
<pinheadmz> #32061 已经过 rebase,并且对代码风格和更深入的 http 协议收到了很好的审查意见。这周我将在该分支上运行模糊测试,并重新运行与 lnd、electrs 等的集成测试。前 7 个提交添加了测试和工具,并已拆分为两个小 PR 正在审查中,我今天会推送更新: #34772 和 #34905
<fjahr> 从我这边来看,我仍在 torcontrol PR (#34158) 上收到一些好的审查意见,并尽快做出回应。我认为目前它的状态已经很好了。
<fjahr> *好的审查意见
<fjahr> 工作组更新到此结束,除非我漏掉了谁。
<fjahr> #topic asmap 文件格式和工具 (sipa)

关于这个话题有相当多的讨论,请阅读完整的会议记录以了解全部详情。

发布版本

感谢阅读。请务必在下周继续关注 Bitcoin Core 的更新!

如有任何评论、建议或错误,请随时联系或评论

  • 原文链接: insider.btcpp.dev/p/tapr...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论