比特币核心本周动态

INSIDER 发布于 2026-01-16 阅读 93

本周比特币核心(Bitcoin Core)开发进展:13个PR被合并,包括通过Tor/I2P短连接广播交易以提升隐私(29415)、钱包迁移失败清理测试(34226)、挖矿接口改进(33819)。待审查PR为HTTP操作准备字符串和网络工具(34242)。IRC会议讨论了模糊测试、静默支付扫描优化、ChaCha20 SIMD优化等。Bitcoin Core v30.2已发布。

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

上周比特币动态

本周 Bitcoin Core 动态

Bitcoin Core 贡献者 kevkevin 带来本周最新动态...

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

已合并的 PR
每周都会有若干变更正式加入 Bitcoin Core。本周有 13 项变更被合并。以下是我认为其中有趣的几个。

这是一个自 2024 年 2 月就开放至今的大改动。该 PR 的目标很直接:当从你的节点发送交易时,打开一个 Tor 或 I2P 连接,发送后立即关闭。

这一变更为节点带来了巨大的隐私提升,并且可以轻松与其他节点互操作。对于任何想要额外隐私的用户来说,启用此功能是值得的。因为目前的交易传播方式,如果有多个节点与你的节点相连,它们很容易知道交易的来源。而通过此功能,你的对等节点只会在通过 Tor 或 I2P 短暂连接期间知道你的存在。

这是针对上周出现的一个问题的功能测试:如果使用相对路径名的旧版钱包迁移失败,那么该钱包对应的相对路径会被删除。

该测试表明 Bitcoin Core 能够正确处理迁移失败后的清理和失败场景。有了这个测试覆盖,可以进一步确保该问题不会再次发生。

这是对挖矿 IPC 接口的更改,当前接口返回的是原始 Coinbase 交易。这并不理想,因为客户端需要解析和操作 Bitcoin Core 的虚拟交易。在此 PR 中,Sjors 将 getCoinbasetx() 重命名为 getCoinbaseRawTx() 以更准确地反映其功能。

然后他提供了一个替代函数 getCoinbase(),该函数返回一个结构体,其中包含客户端构建 coinbase 所需的所有内容,从而使客户端无需进行不必要的解析和操作。

旧函数现已弃用。

变更一直在实时更新和审阅中。以下是一些仍在开放并寻求审阅的值得关注的 PR。

这是移除项目中 libevent 依赖的一部分。它包含了 #32061 的前六个提交,并提供了一个字符串解析工具类 (LineReader),该工具也被 #34158 所使用。

以下是针对 HTTP 和 Torcontrol 添加/更新的函数:

  • GetBindAddress():给定一个套接字,返回绑定的地址(CService 类型)。目前用于 P2P,但从 net 移至 netbase,以便其他模块调用。

  • ToIntegral():已用于从字符串解析数字,新增参数 base = 10,使其也能用于解析十六进制整数。HTTP 分块传输编码使用十六进制编码的整数来指定负载大小:https://datatracker.ietf.org/doc/html/rfc7230.html#section-4.1

  • AsciiCaseInsensitive 比较器:用于在 unordered_map 中存储 HTTP 头部。头部是键值对,解析时键不区分大小写:https://httpwg.org/specs/rfc9110.html#rfc.section.5.1

  • FormatRFC1123DateTime():HTTP 头部所需的日期时间格式(例如 Fri, 31 May 2024 19:18:04 GMT

  • LineReader:HTTP 请求中的字段以换行符终止。该结构体接收一个输入缓冲区,并提供按行读取字符串的方法。


IRC 会议纪要
每周四都会举行 IRC 会议。以下是该会议的一些简短记录。
  • Fuzzing 工作组更新 (dergoegge)

    • dergoegge:Eugene 一直在为 fuzzamoto 提供增量快照支持(https://github.com/dergoegge/fuzzamoto/pull/103)。从长远看,这有望让模糊测试器能够更深入地探索状态空间。

      我已经将我过去几年运行的持续模糊测试基础设施开源了:https://github.com/dergoegge/fuzzor (没有文档,但如果你也想运行,请随时联系 marcofleon 或我)

      我们使用 antithesis 发现了一批漏洞(https://github.com/bitcoin/bitcoin/issues?q=is%3Aissue%20author%3Adergoegge%20antithesis)(才运行一周,稍后或下次 coredev 会有更多信息,但有疑问欢迎提出)。

  • 内核工作组更新 (sedited)

    • sedited:我在手机上,也许 stickies-v 有补充?

    • stickies-v:我们留到下周吧。

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

    • l0rinc:我这边没有更新。
  • 静默支付工作组更新 (Novo)

    • Novo:我进行了一些实验来改进最坏情况下的扫描。

      通过对输出进行随机化和移除,我们可以将扫描时间减半。

      这里说的移除,是指从列表中移除已找到的输出。

      当然,扫描时间仍然显著,在我机器上需要 4 分钟。

      我还在对带区块的 LabelSet 扫描进行基准测试。

    • 对此还有更多讨论和问题。

  • 网络分裂工作组更新 (cfields)

    • cfields:本周没有网络分裂更新。但我确实找到了 l0rinc 上周提到的导致 chacha20 实现变慢的 gcc 错误,并进行了规避:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107563#c13

    • cfields:如果有人想知道我为什么花 这么多 时间在 chacha20 上,那是因为我希望证明编写这种通用向量化代码对我们解决底层瓶颈来说是一种合理的前进方向。如果是这样,我们就能更自由地添加 SIMD 代码,因为它比裸汇编更容易审查。

  • 自引入 Valgrind fuzz CI 任务以来,fork 仓库持续构建失败 (l0rinc)

    • l0rinc:Valgrind fuzz 任务在 e4b04630bcf59ea03c1373777a0167af699f92a4 中引入。此后,ci/test/00_setup_env_native_fuzz_with_valgrind.sh 在 fork 仓库(会回退到 GitHub 托管的运行器)中经常超时,达到 240 分钟的作业超时限制,参见:l0rinc/bitcoin/actions/runs/21003573850/job/60381011678

    • l0rinc:我首先尝试将超时时间提高到 GitHub Actions 的最大值,因为运行耗时 4 小时 36 分 50 秒。

    • l0rinc:maflcko 建议将其从 CI 矩阵中移除,因为它没有发现任何问题(类似于 valgrind no-fuzz 任务的处理方式)——但被其他人否决了,参见:#34304

    • 对此还有更多讨论。

请务必阅读会议记录以了解完整对话。


版本发布

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

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


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

相关文章

0 条评论