我们很高兴地宣布Bitcoin Core 0.12.0版本正式发布。这次的发布花费了很多心血,并且是目前最重要的一个版本,其中包含了比先前版本更有效的改进。

如果你升级节点到0.12版本,以下是主要的改进:

  1. 签名验证将提速7倍
  2. 能够限制上传流量
  3. 通过内存池限制来进行碰撞预防
  4. 在发送交易时,可选择增加手续费来加速交易处理
  5. 当运行时,它可以自动使用Tor
  6. 通过ZeroMQ的通知,来订阅APP的能力
  7. 大幅度减少钱包占用的磁盘空间
  8. 矿工在装配区块时可以变得更快

除了这些之外, 还有其他13项改进没有列入这个列表,但它们仍然是非常有价值的。你可以在这篇文章的末尾找到它们的完整列表。

下面,就让我们来更加深入地了解每一项改进。

签名验证将提速7倍

在Bitcoin Core当中,OpenSSL在此前是被用于验证比特币交易的ECDSA签名的。OpenSSL在其功能性上讲,非常的全面(它不仅仅可以简单地验证ECDSA签名),但这个庞大的功能集,也就意味着其攻击面也是非常广的。这也威胁着比特币的安全性,将OpenSSL从Bitcoin Core中替换出去,也就成为了优先级较高的改进,并用一个更为简单、更加集中的替代品来进行更换。

为了解决这个问题,Bitcoin Core团队已开发了一种新的ECDSA签名验证库称为 libsecp256k1,以此作为OpenSSL的一个替代品。这是开发者花费近3年时间进行的复杂工程研究的结果,将此结合进Bitcoin Core中后,签名验证代码的攻击面也就大大降低了。

此外,libsecp256k1的签名验证要比OpenSSL的执行要快得多。在64位架构环境下,至多能将签名验证提速7倍,原编制索引和区块验证现在可能只需要花费不到原先一半的时间就可以完成,这对于比特币交易的验证过程而言,迈进了一大步。

功劳归于:Pieter Wuille, Greg Maxwell和 Cory Fields

能够限制上传流量

节点上传流量对于某些用户而言就是一种负担,因此能够限制流量的能力也是比特币急需的一个改进。节点用户现在可以为他们能够上传多少的流量,设置一个软限制。用户可以设置一个参数,具体某些目标节点能够传送多少的数据。它会尝试保持低于限制,而不是达到这个值,如果流量达到了这个限制,它就会只服务于最后一周内的请求数据块。

功劳归于:Jonas Schnelli

通过Memory Pool限制来进行碰撞预防

旧版本的比特币软件对于有多少交易能够允许进入节点的 memory pool中,并没有一个限制。即使节点将仅接受具有一定最低中继费的交易,有时满足这些要求的交易,仍然会是非常多的,并导致RAM相对降低的节点会崩溃。特别考虑到攻击者可以通过利用这个特性,用洪水交易来攻击比特币网络,造成部分节点的崩溃。

而在这个新版本中,节点就可以设置他们的memory pool的大小限制,操作员可以配置他们想要投入到mempool的交易数量。当这个内存限制达到上限时,新的交易仍然是可被接受的,但最低交易费的交易将从mempool中被移除。这种新的内存限制,可确保防止memory pool的意外崩溃,因为能够进行的交易数量是可控制的。

功劳归于: Matt Corallo和Suhas Daftuar

在发送交易时,可选择增加手续费来加速交易处理

如果用户在发送交易时,给出的交易费太低,这些交易往往会被卡住(矿工不考虑处理),这可能会引发问题,因为这些交易中的未花费输出(UTXOs)可能很难进行使用,可能会导致资金的冻结。适当的交易费用是很难进行计算的,因为它们高度依赖于交易的体积以及给定的时间。因此,用户通常会低估了交易费,导致很多的交易被卡住,或者高估了交易费,导致多付了大量不必要的费用。

一种称为Opt-in Replace-by-Fee新的功能 ,能够让交易发送者配置他们的交易。发送者可以先用较低的费用,看看他们的交易是否会被接受,如果没有,他们可以增加他们的费用,直到被接受。这允许发送者能够尽量地减少他们的支付费用,并最大限度的提高他们的交易被包含在一个区块的机会。

功劳归于: Peter Todd和Suhas Daftuar

当Tor在运行时,它可以自动使用

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

功劳归于:Wladimir van der Laan

通过ZeroMQ,可让APP来订阅通知

截至目前,对于外部服务对订阅新区块和新交易通知的支持是有限的,而现在因为整合了ZeroMQ,就拥有了这个能力。

功劳归于:Johnathan Corgan

大幅度减少钱包占用磁盘的空间

使用Bitcoin Core钱包的用户常常会对一个问题感到头疼,允许一个完整节点也就意味着高数据存储的负担(当前已经达到了60GB,并将持续上升)。对于那些想要运行一个完整节点,但又不想过高数据存储负担的用户而言,新版本的Bitcoin Core能够实现修剪模式的能力,这意味着,节点只需要跟踪未花费输出(unspent outputs ),并忘记先前处理块以及已花费输出。反过来,这意味着用户在运行一个完整节点时,只需要存储大约2GB 的数据,相比之前的60GB已大幅度地减少了要求。

功劳归于:Jonas Schnelli, Greg Maxwell和 Adam Weiss

矿工在装配区块时可以变得更快

此前,区块模版创建对于矿工而言一直是相当昂贵的,这需要高计算时间以及相当多的内存。所谓高计算时间,就是矿工在装配区块的同时,需要为区块的验证执行共识临界计算。而高的内存要求,则是因为在区块装配时,在某节点的memory pool中的每一笔交易需要将其输入(inputs)放入到in-memory缓存中,以此用于各种计算。

而在0.12版本当中,共识临界计算不再是区块装配过程中的一次性执行过程,而是一旦所有这些交易打入了memory pool,会预先计算这些交易,然后进行缓存。这意味着在装配过程中,大部分的计算已经被执行了,区块模版也就可以非常快速地产生。具体而言,这个装配时间将从之前的几秒缩短到几十毫秒。

这个预先计算,也就意味着某节点memory pool中所有交易的输入(input),不再是一次性进入高速缓存,从而降低了对memory的需求。

功劳归于:Alex Morcos

结束语

0.12版本的发布,将是 Bitcoin Core客户端的重大进步。然而,当前开发团队仍然有很多的工作要去做,Bitcoin Core一直在寻找更多的贡献者。欲了解更多详情,可以参阅Bitcoin Core的贡献页面,特别是CONTRIBUTING.md。下载0.12版本可访问:

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

Bitcoin Core开发团队

0.12版本资源

官方版本发布更新更新日志

社区资源

每周会议摘要

IRC 社区 在‘irc.freenode.net’加入“#bitcoin-dev”和“bitcoin-core-dev”频道

推特: 关注比特币核心更新@bitcoincoreorg义务翻译.

此日志是由Ryan Shea基于官方[release notes]写成(https://github.com/bitcoin/bitcoin/blob/v0.12.0/doc/release-notes.md)。