本周 Bitcoin Core 动态

INSIDER 发布于 2025-12-19 阅读 52

本文是bitcoin++会议的Insider Edition,由Bitcoin Core贡献者kevkevin撰写,总结了本周Bitcoin Core的更新。

本周 Bitcoin Core 动态

Bitcoin Core 贡献者 kevkevin 带来一些最新进展...

大家好 👋 我是 kevkevin,一名开源开发者,也是 Insider Edition 的记者。上周,我审阅了 Bitcoin Core 仓库中的几个拉取请求。以下是我觉得值得关注的。

已合并的 PR

每周都有若干变更正式纳入 Bitcoin Core。本周有 17 个变更被合并。以下是我觉得其中一些有意思的。

  • 重构:改进 AssumeUTXO 状态表示 by ryanofsky

    还记得 AssumeUTXO 吗?这个改动是为了让 AssumeUTXO 更容易维护。Ofsky 通过避免在连接快照区块时长时间锁定 cs_main 来实现这一点。cs_main 是一个互斥锁,它锁定应用其余部分的资源,尽可能减少持有它的次数是一个改进。

    Ofsky 的变更只是重构,没有修改实际逻辑。在这次变更中,他修改了围绕 AssumeUTXO 的表述,使其不再那么令人困惑。总体而言,这个改动让开发者更容易维护 AssumeUTXO。

  • 重构:统一容器存在性检查 by l0rinc

    又是一个重构。这次 L0rinc 注意到 C++20 中有 contains 这个函数,它可以让我们以比当前更简洁的方式在数组或列表中查找某个值。

    使用内置库比使用一堆其他变体更合理。这个改动让 Bitcoin Core 代码库中的代码更具可读性和一致性。

  • 日志:移除脆弱且令人困惑的 LogPrintLevel by maflcko

    请务必阅读前几期内容,你就会明白为什么这个改动合情合理。在前几期中,日志已改用 LogInfoLogWarningLogError。因此现在 LogPrintLevel 基本上没有了用武之地,因为它容易出错,理解起来也比较让人困惑。

变更一直在实时更新和审阅中。以下是一些仍在等待审阅的值得关注的 PR。

  • 添加初始向量化 chacha20 实现,实现 2-3 倍加速 by theuni

    利用现代 simd,根据输入大小同时计算 2/4/6/8/16 个状态。

    这展示了在 x86-64 上 2 倍加速,在 arm+neon 上 3 倍加速。需要运行时检测的平台(avx2/avx512)性能提升甚至更大,后续会推出。

    这不是手写汇编或使用特定架构的内部函数,而是使用 gcc 和 clang 都能理解的编译器内建函数编写。


IRC 会议记录

每周四都有 IRC 会议。以下是会议的一些简要记录。

Fuzzing 工作组更新 (dergoegge)

  • dergoegge: 关于 fuzzamoto 有一些更新,我在这里做了记录:

view raw fuzzamoto-2025w50.md hosted with ❤ by GitHub

  • 可能对大家最相关的是,希望很快你们就能用功能测试框架编写 fuzzamoto 测试。大概就这些了,除非其他人还有关于模糊测试的更新。

Kernel 工作组更新 (sedited)

  • sedited: stickies-v 一直在研究 kernel logger 的规范:https://github.com/bitcoin/bitcoin/issues/34062。他最近的做法是将现有的 logger 拆分为一个新的 util::log,负责字符串格式化,以及现有的更高级的用于缓冲、写入文件等函数。我们还在讨论一种新的非锁定链数据结构,作为 CChain 的替代/扩展,它采用写时复制。

    最终目标是实现一个读取时无需锁定的链。区块树映射也可以采用类似的方法。

    此外,我们还尝试引入更多基于 kernel 头文件 API 的工具,以便更好地“自用自测”。

  • l0rinc_: 是分段对数 COW 吗?(我从没想过会写出这句话)

  • sedited: l0rinc_ 大致就是这个目标。

基准测试工作组更新 (l0rinc, andrewtoth)

  • l0rinc_: 我提几个与基准测试和 IBD 性能间接相关的 PR,以帮助它们获得更多关注(不一定是因为我参与了)。

    Raimo 提交了 #34044,本来想稍微加快 -reindex 的速度,但根据使用情况来看,这条路走不通。

    Cory 打开了 #34083 —— 一个向量化的 ChaCha 实现,实现了 2-3 倍的加速 —— 尚未进行 IBD 基准测试。

    Rob 尝试了不同的方式来存储 #34004 的提示,并处理了若干审查意见。

    #32414 最近已合并,因此 reindex-chainstate 的基准测试现在会有一些不同 —— 尤其是在较大的 dbcache 情况下。

    我们大多数低端基准测试服务器本周因维护而离线,但在剩下的服务器上,我们进行了以下实验:在云端环境使用网络连接存储对 #31132 进行基准测试;由于 #31132 之后,在相同性能下我们所需内存大幅减少,我们尝试了使用排序映射而不是 SipHashed std::unordered_map 的表现 —— 结果慢了 26% 到 60%;我们尝试在 IBD 刷新期间关闭缓存重分配 —— 似乎带来了约 4% 的加速;想看看池分配带来的加速是否仍然有效 —— 移除它会使验证速度降低 8-12%;下一步是看看能否对其进行微调;目前正在测量使用 SipHash-1-3 与当前 SipHash-2-4 相比会有多大差异;我终于租了一台 Windows 基准测试服务器,所以可能很快就能看到它在 Windows 上的表现。

    几个需要审查帮助的相关 PR:#33018#33680#33866#33512

Silent Payments 工作组更新 (Novo)

集群内存池工作组更新 (sdaftuar, sipa)

  • instagibbs: (#32545 是需要审查的那个)

Net Split 工作组更新 (cfields)

  • cfields: 我一直在忙其他事情,所以本周没有更新。我打算在新的一年重新全身心投入这项工作。

libevent 组织成员团队需要更新 (https://github.com/libevent/libevent/issues/1812) (pinheadmz)

  • pinheadmz: 这个 libevent 的问题是由 darosior 引起我注意的。
  • fjahr: 对我来说,这并没有太大改变。我原本没指望在我们移除它之前会看到 2.2 版本,无论这个过程需要多久。现在我们可能会看到 2.2,但无论如何我们也不想升级到它 :p
  • pinheadmz: 他们正在寻找新的维护者,这很合理,因为这个库这个十年都没发布过新版本。
  • fjahr: 不确定即使现在发布 2.2,考虑到 httpserver 已经投入的工作,即使没有新的担忧,是否也值得尝试利用它。
  • pinheadmz: fjahr 同意,只是提醒大家注意——这个依赖的风险正在略微增加。提醒大家有一个跟踪问题 https://github.com/bitcoin/bitcoin/issues/31194,下一个待审查的 PR 是 #32061,我最近对其进行了重构,以解决 cfields 在 coredev 上提出的问题。现在,没有所谓的 sockman “轻量版”或其他版本了,httpserver 自己处理 sockets。我今天再次 rebase 以修复与 master 的冲突,然后会运行更多基准测试,以及使用各种调用 RPC 的库(如 electrs)进行集成测试。

完整日志请查看会议记录


版本发布

  • 本周没有发布

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

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

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

相关文章

0 条评论