Optout21合并两个PR - 本周Bitcoin Core #40

INSIDER 发布于 2026-04-24 阅读 66

本周Bitcoin Core合并了10个PR,其中optout21重构了CChain方法,改用引用替代指针以避免空指针解引用风险,并为Socks5Server添加了干净关闭以修复间歇性CI失败。fjahr实现了dumptxoutset的回滚机制,无需使区块失效。此外,andrewtoth的PR允许并行获取区块输入以提升性能。IRC会议讨论了网络分割、基准测试、QML GUI等工作组进展。

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

上周比特币要闻

Optout21 合并了两个 PR——本周比特币核心 #40

本周,在间隔很长一段时间后,再次举办了 PR 审查俱乐部……

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

本周,一位名为 Optout21 的用户有两个由他编写并合并的 PR。请查看已合并 PR 部分了解更多!

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

optout21 重构了 CChain 方法,不再使用指针,因为存在意外解引用 nullptr 的风险。CChain 中更新的方法有 Contains()、Next() 和 FindFork()。

这提高了 CChain 方法的安全性,因为出现 nullptr 解引用错误的可能性会更低。

Optout21 总结道,未来可能还有更多有意义的改进。

本 PR 未考虑进一步的构想:

  • InvalidateBlock()PreciousBlock() 改为使用引用。

  • CChain 内部改为存储引用而非指针。

  • 修改 CChain 使其始终至少包含一个元素(创世块),这样始终存在创世块和链尖。

  • 检查相关方法使其返回引用(保证非空)——FindForkFindEarliestAtLeastFindForkInGlobalIndexblockman.AddToBlockIndex 等。

Socks5Server 工具处理多个传入连接,这些连接在单独的后台线程中处理。其 stop() 方法会解除阻塞并干净地等待主后台线程,但不会尝试等待处理程序线程的完成。无法保证在 stop() 返回后处理程序线程已结束,这可能导致 I/O 错误。

optout21 的这个拉取请求为 Socks5Server 添加了干净关闭功能,以避免间歇性的 CI 失败。

Fabian Jahr 提交此更改是因为需要实现带有回滚功能的 dumptxoutset。同时,也需要一种不使用 invalidateblockreconsiderblock 的回滚方式,而是创建 coins 数据库的临时副本。

这种方法有几个优点。

  • 网络活动不必暂停
  • 分叉不会干扰回滚

但也有几个缺点,例如需要更多磁盘空间,且性能较慢。

始终有更改在实时更新和审查中。以下是一些仍在开放并寻求审查的值得注意的 PR。
问题

目前,在 ConnectBlock 中获取输入时,每个输入都从缓存中顺序获取。缓存未命中需要一次到磁盘数据库的往返来获取输出点并将其插入缓存。由于在 ConnectBlock 期间数据库是只读的,我们可以在连接时在多个线程上并行获取一个区块的所有输入。

解决方案

我们向 CoinsViewOverlay 添加了一个线程池,以并行获取区块输入。在进入 ConnectBlock 之前,将区块传递给 CoinsViewOverlay 视图,这会启动工作线程开始获取输入。缓存通过覆盖的 FetchCoinFromBase 方法返回获取到的 coin(一旦可用)。如果尚未可用,主线程也会在等待时获取 coin。


IRC 会议记录
每周四都会举行一次 IRC 会议。以下是该会议的一些简短记录。
abubakarsadiq: #topic 网络分裂工作组更新 (cfields)
abubakarsadiq: 我猜 cfields 没有更新,如果有我们可以回到这个话题。
cfields: 本周没有更新,一直在处理我的 multi_index 替换。
abubakarsadiq: #topic 基准测试工作组更新 (l0rinc, andrewtoth)
l0rinc: #35025 已合并,反序列化基准测试现在更加真实。
l0rinc: nanobench 的非计时设置需要后续跟进以使其使用更直观,参见 #35124。
l0rinc: #34641 根据反馈拆分为微小、聚焦的提交。
l0rinc: 推送了 #35128 以加快 `gettxoutsetinfo` 的速度——根据反馈,后续改进已经在酝酿中。
l0rinc: 我的更新就这些,感谢审查。
abubakarsadiq: #topic QML GUI 工作组更新 (johnny9dev)
johnny9dev: 为新的设置页面开启了一个 PR (bitcoin-core/gui-qml#551)。这包括钱包设置,包含详细信息、创建备份、密码添加/更新以及钱包删除。签名消息很可能也会放在这里。该 PR 还包括一个内存池设置页面,显示交易金额和内存使用情况,以及一个用于更新内存池内存量的输入字段。我目前正在处理导入 PSBT 的流程。
johnny9dev: 我们还有一位新的贡献者 pseudoramdom,他将从实现我们的 RBF 设计开始作为他的第一个功能。
johnny9dev: 随着 pseudoramdom 负责 RBF,epicleafies 负责接收和签名消息,而我负责 PSBT 导入,我认为只剩下“地址簿”页面作为最后一个需要首次实现的功能对等问题。
johnny9dev: 就这些。
abubakarsadiq: #topic Libevent 移除 (pinheadmz, fjahr)
fjahr: 我不断收到关于 #34342 的好评评论,正在尽快回复,但还没有处理昨天以来的评论 :) 等待变基/重新开启以再次开始审查 http 服务器。我的更新就这些。
pinheadmz: 我这周没有什么新消息。
abubakarsadiq: 我跳过了一些工作组,因为负责人不在。如果你有更新,请提出话题。
abubakarsadiq: 还有其他要讨论的吗?

发布版本

感谢阅读。请务必下周再次关注,获取关于 Bitcoin Core 的最新动态!

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

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

相关文章

0 条评论