加速SipHash — 本周比特币核心 #52

INSIDER 发布于 2026-07-25 阅读 28

本文是Bitcoin Core每周开发进展的第52期。本周合并了两个重要PR:一是为p2p_private_broadcast连接类型添加了专用的模糊测试工具,覆盖了之前未充分测试的隐私交易中继路径;二是将COutPoint键的哈希算法从SipHash-2-4改为SipHash-1-3-UJ,使UTXO缓存哈希速度提升约2倍,完整重索引速度提升约5%。此外,文中介绍了仍在审查中的PR(如扩展util::Result以支持更丰富的错误信息),以及IRC会议中关于QML GUI预览版发布、性能基准测试等讨论。最后,Bitcoin Core v30.3正式发布。

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

上周比特币动态

加速 SipHash - 本周比特币核心 #52

本周 Siphash 哈希速度更快...

大家好 👋,我是 Kevkevin。我是一名开源开发者,也是 Insider Edition 的记者。上周,我审查了 Bitcoin Core 仓库中的几个PR。

已合并的 PR
每周都有多个更改被正式添加到 Bitcoin Core。这周,合并了多项更改。以下是我本周觉得有趣的一些更改。

本周增加了更多的 fuzz 覆盖。Frank Ochieng 的 PR 被合并,该 PR 为 ConnectionType::PRIVATE_BROADCAST(一种隐私保护的交易中继路径,此前几乎未被执行)添加了专门的测试框架。

现有的 process_message fuzz 目标可以创建私有广播节点,但它从未种子化 m_tx_for_private_broadcast,因此有趣的中继发送路径基本上从未运行。这个测试框架特意构建了这些节点,首先种子化交易,然后仅提供私有广播实际允许的消息类型。

一如既往,欢迎更多 fuzz 测试,谁知道呢,也许这次能发现一些有趣的东西。

本周 L0rinc 的一个性能 PR 被合并,加速了内存 UTXO 缓存的哈希计算。coins 映射之前对 COutPoint 键使用 SipHash-2-4,对于固定 32 字节的 txid 加上一个小输出索引来说,这条路径做了不必要的工作。

修复方案将哈希器切换为 SipHash-1-3-UJ,这是一种减少轮数的变体,带有 Pieter 帮助设计的巨型块处理。它仅用于 coins 缓存及相关临时集合,因此不会持久化或通过网络发送。基准测试显示 outpoint 哈希路径速度提升约 2 倍,完整重索引运行速度提升约 5%。

总有一些更改在实时更新和审查中。以下是一些仍在等待审查的值得关注的 PR。

refactor: 添加 util::Result 失败类型及合并结果值的能力ryanofsky

为 `util::Result` 添加返回更多错误信息的能力,并在 [LoadChainstate 方法](https://github.com/bitcoin/bitcoin/pull/25665/commits/753b8678ac98c8753f9db17cc92d56d4d58d9e7e) 中作为初始应用加以利用。后续 PR [#25722](https://github.com/bitcoin/bitcoin/pull/25722) 和 [#29700](https://github.com/bitcoin/bitcoin/pull/29700) 将更广泛地使用它来返回钱包和内核函数的错误和警告。

此更改向结果类添加了两个主要特性:

- 为了更好的错误处理,增加了在失败时返回值的能力,而不仅仅在成功时返回值。这是一个关键缺失的特性,使得结果类对于像 `LoadChainstate()` 这样的函数(会产生不同错误需要不同处理)毫无用处 [^1]。

- 为了更好的错误报告,增加了返回警告消息和多个错误的能力,而不仅仅是单个错误字符串。这为函数提供了一种以标准方式报告错误和警告的方法,并简化了接口。

IRC 会议记录
每周四都有 IRC 会议。以下是该会议的一些简短记录。
--- 主题 1 ---
stickies-v: #topic Fuzzing 工作组更新 (dergoegge, marcofleon)
marcofleon: 你好
marcofleon: 没有更新
hodlinator: 你好

--- 主题 2 ---
stickies-v: #topic 内核工作组更新 (sedited)
sedited: 我这周没什么可说的。也许其他人有?
yancy: 你好
stickies-v: purpleKarrot 在无状态验证工作上取得了更多进展
stickies-v: 但我想稍后分享更多细节

--- 主题 3 ---
stickies-v: #topic 基准测试工作组更新 (l0rinc, andrewtoth)
l0rinc: #35215 已合并 - 又是一个 5% 的验证速度提升 \:D/
l0rinc: 现在我们可以将它用于 #35531
l0rinc: 我正在运行 reindex-chainstate 基准测试,比较 master 与 29/30/31 版本,看看它们的表现如何。
stickies-v: 是说 IBD/重新索引快了 5%?
l0rinc: 是的
stickies-v: 很不错
l0rinc: 除了并行 prevout 获取器之外
l0rinc: 谢谢,这就是我想说的
dergoegge: lfg
Murch[m]: v32 应该会有相当大的速度提升
l0rinc: 特别是如果我们能完成交易索引的更改
l0rinc: Andrew 正在参加一个会议

--- 主题 4 ---
stickies-v: #topic QML GUI 工作组更新 (johnny9dev)
johnny9dev: 我们的预览版已发布到 bitcoincore.app。已经收到了很多很好的反馈需要处理。
johnny9dev: 我降低了预览版构建所针对的 glibc 版本,以增加兼容性
johnny9dev: 我在测试中还意识到一点,linux depends 构建没有 opengl,macos depends 使用 metal api,因此不同平台之间存在性能差异,且这很明显。因此,我一直在优化所有渲染,使任何不可见的页面不再继续绘制。我想我已经处理了大部分主要页面,一旦 PR 合并,linux 上的运行效果会好得多。
johnny9dev: 最后,我从代码库中移除了 gMock,并确保它不会包含在我们的暂存分支中。
johnny9dev: 就这些
stickies-v: 你提到降低 glibc 是什么意思?
johnny9dev: 使用 Ubuntu 22.04 工具链构建,而不是 24.04
stickies-v: 哦,你是说版本降级
johnny9dev: 至少有一位测试者无法在他们的 Debian 版本上运行构建的二进制文件
johnny9dev: 是的

--- 主题 5 ---
stickies-v: #topic QA 工作组更新 (brunoerg)
brunoerg: 你好,本周没有更新
stickies-v: 还有其他要讨论的吗?
stickies-v: 好的,让我们继续开发,感谢各位的更新。

完整会议请阅读 此处


发布

感谢阅读。请务必下周继续收听,获取关于 Bitcoin Core 的最新动态!

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

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

相关文章

0 条评论