我们非常高兴地宣布比特币核心 v0.12.0 正式发布。这个版本倾注了许多人的努力,它可能是迄今为止最大的版本,比以往任何版本都有更多的重大改进。

如果您将节点升级到 0.12 版本,以下列出了您将从中受益的主要改进

  1. 签名验证速度提高 7 倍
  2. 限制上传流量的能力
  3. 通过内存池限制防止崩溃
  4. 发送可以提高费用的交易的选项
  5. 在运行时自动使用 Tor
  6. 应用程序使用 ZeroMQ 订阅通知的能力
  7. 钱包磁盘使用量大幅减少
  8. 矿工的区块组装速度快得多

除了这些之外,还有 13 个没有进入前十名的改进,但仍然非常有价值。您可以在本文末尾找到它们的完整列表。

现在,让我们深入探讨每个改进。

签名验证速度提高 7 倍

在比特币核心,OpenSSL 传统上用于验证比特币交易中的 ECDSA 签名。OpenSSL 的功能非常全面(远远不止简单地验证 ECDSA 签名),但这种庞大的功能集意味着它的攻击面相当大。由于这对比特币安全构成威胁,因此将 OpenSSL 从比特币核心分离并用更简单、更专注的替代方案替换它成为了一个优先事项。

为了解决这个问题,比特币核心团队成员开发了一个名为 libsecp256k1 的全新 ECDSA 签名验证库,并将其作为 OpenSSL 的替代品。它是近 3 年复杂工程的成果,通过此次集成,签名验证代码的攻击面已大大减少。

此外,libsecp256k1 的签名验证速度远快于 OpenSSL。在 64 位架构上,它快了 7 倍,原始重新索引和区块验证现在所花费的时间不到以前的一半——这是验证比特币交易的一项重大进步。

致谢:Pieter Wuille、Greg Maxwell 和 Cory Fields

限制上传流量的能力

节点上传流量对于某些用户来说可能很繁重,因此限制此类流量的能力是一个非常必要的改进。节点用户现在可以设置对他们上传和提供给同行的流量进行软限制。用户可以设置一个参数,指定节点应该每天提供多少数据。它将尝试保持在限制之下,而不是达到限制,如果达到限制,它将只提供过去一周内请求的区块。

致谢:Jonas Schnelli

通过内存池限制防止崩溃

旧版本的比特币软件对允许进入其内存池的交易数量没有限制。即使节点只会接受具有特定最低中继费用的交易,但有时满足这些要求的交易数量会任意变大,并导致内存相对较低的节点崩溃。特别令人担忧的是,攻击者可以通过向网络发送大量交易来利用该系统,从而使部分节点崩溃。

通过此更新,节点现在对其内存池大小有默认限制,运营商可以将其配置为他们想要分配给内存池的内存量。当达到内存限制时,仍然可以接受新的交易,而费用最低的交易将从内存池中删除。这种新的内存限制可确保不会因为缓存的交易数量失控而导致意外崩溃。

致谢:Matt Corallo 和 Suhas Daftuar

发送可以提高费用的交易的选项

如果交易的费用太低,它们通常会卡住。这会导致问题,因为那些交易中使用的未花费交易输出 (UTXO) 很难花费,可能会冻结资金。适当的交易费用很难计算,因为它们高度依赖于任何给定时间的交易量及其费用。因此,人们要么低估了费用,导致许多交易卡住,要么高估了费用,导致大量超额支付和持续的资金损失。

一项名为“可选替换费用”的新功能使交易发送者可以选择配置其交易,以便以后可以被指定更高费用的其他交易替换。发送者可以先使用较低的费用,看看他们的交易是否被接受,如果未被接受,他们可以增加费用,直到被接受为止。这使发送者既可以最大程度地减少他们支付的费用,又可以最大程度地提高他们的交易被包含在区块中的可能性。

致谢:Peter Todd 和 Suhas Daftuar

在运行时自动使用 Tor

节点现在将检测 Tor 是否在运行,如果在运行,它们将自动创建 Tor 隐藏服务,并通过 Tor 网络连接到其他节点。无需手动配置。

致谢:Wladimir van der Laan

应用程序使用 ZeroMQ 订阅通知的能力

到目前为止,外部服务订阅有关新区块和传入交易到达的通知的支持有限。现在,由于与 ZeroMQ 的集成,服务具有这种能力。

致谢:Johnathan Corgan

钱包磁盘使用量大幅减少

比特币核心钱包的用户经常会感到运行完整节点带来的高数据存储要求的负担(目前已高达 60GB,并且还在不断增加)。对于存储容量有限但仍想使用完整节点钱包的用户来说,他们现在可以选择以修剪模式运行他们的钱包。这意味着节点将只专注于跟踪未花费的输出,并将忘记以前处理的区块以及已花费的输出。这反过来意味着用户将能够运行完整节点,同时只存储大约 2GB 的数据,与以前需要的 60GB 相比,这是一个巨大的减少。

致谢:Jonas Schnelli、Greg Maxwell 和 Adam Weiss

矿工的区块组装速度快得多

传统上,区块模板创建对于矿工来说相当昂贵,需要很高的计算时间和相当多的内存。较高的计算时间是由于历史上矿工在组装区块时必须同时执行与共识相关的区块验证计算。较高的内存需求是由于历史上在区块组装过程中,需要将内存池中每个交易的输入拉入内存缓存中进行各种计算。

随着 0.12 版本的发布,与单个交易相关的与共识相关的计算不再在区块组装过程中一次性执行,而是在所有交易命中内存池时立即预先计算,然后缓存。这意味着在区块组装过程中,大多数计算已经完成,区块模板可以非常快地创建。具体来说,这代表着时间减少从以秒为单位的间隔到以毫秒为单位的间隔。

执行的预先计算还意味着不再需要将内存池中所有交易的输入一次性拉入缓存,从而导致内存需求大幅减少。

致谢:Alex Morcos

结语

0.12 版本的发布将是比特币核心客户端的一项重大进步。但是,还有很多事情要做,我们一直在寻找更多贡献者。有关更多详细信息,请参见我们的 贡献 页面,特别是 CONTRIBUTING.md。还有很多其他方法可以贡献,只需询问其他人你如何提供帮助(见下面社区资源)。

https://bitcoin.org/bin/bitcoin-core-0.12.0/ 下载。

比特币核心开发团队

v0.12 资源

社区资源

每周会议摘要

IRC 社区:加入 #bitcoin-dev#bitcoin-core-dev 频道,位于 irc.freenode.net

Twitter:在 @bitcoincoreorg 关注比特币核心更新。

这篇博文由 Ryan Shea 根据官方 发布说明 撰写。