Bitcoin Core 0.12.0

Bitcoin Core installation binaries can be downloaded from bitcoincore.org and the source-code is available from the Bitcoin Core source repository.

Bitcoin Core 0.12.0 版本现已发行:

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

这是一个添加了新功能和一些其他改进的主要版本更新。

请使用github的事件跟踪来反馈bug:

https://github.com/bitcoin/bitcoin/issues

升级及降级

如何升级

如果你正在运行一个旧版本,先停止程序。等待程序完全停止后(较旧的版本可能需要几分钟),然后运行安装程序(Windows系统),或直接覆盖 /Applications/Bitcoin-Qt (Mac系统)或 bitcoind/bitcoin-qt(Linux系统)。

降级警告

###降级至低于0.10.0的版本

因为0.10.0和后续版本使用了块头部优先同步,同时并行下载块(见下文), 块文件和数据库将不再与低于0.10版本的比特币核心程序及其他软件兼容。

  • 块文件在磁盘上的储存是乱序的(但是遵循他们真正被接受的顺序),这使得它不与一些工具或其他程序兼容。早期的版本在重建索引时也因此无法使用。

  • 新的块索引数据库将只保存块的头,而块的内容将不被储存在磁盘上,早期版本并不支持这种方式。

如果您希望能够顺利的降级,请先将您的整个数据目录进行备份。若您没有备份,之后您的节点将要重新开始同步(或者从bootstrap.dat重新引导)。完全同步的0.10版本的节点中的数据可能可以在更早的版本中使用,但这是不被支持的行为,并且可能在旧版本试图重建索引时导致崩溃。

这并不影响钱包向前或向后的兼容。

降级至低于0.12.0的版本

因为0.12.0及之后的版本会在每一次新的同步和重建索引的时候混淆区块链状态,因此区块链状态将不再与低于0.12版本的比特币核心程序和其他软件兼容。

如果您希望从已经重建过索引的0.12.0或更新的版本降级,你需要在你第一次打开0.11或更低的版本的时候再次重建索引。

主要变更

使用libsecp256k1库进行签名验证

比特币交易中的ECDSA签名将使用libsecp256k1(https://github.com/bitcoin/secp256k1)库替代OpenSSL库。

根据平台不同,这意味着对原始签名验证速度的重大提升。特别是在x86_64平台,验证速度将会提高5倍。这意味着在实践中初始索引重建和新区块验证的时间将至少会比之前减少一半。

Libsecp256k1库经过了非常广泛的测试和验证。

这种变化的一个副作用是libconsensus不再基于OpenSSL。

减少上传流量

主要的对外流量是为其他节点在初始化区块下载时提供历史区块数据。

而现在可以通过’-maxuploadtarget’参数来减少上传的总流量。这并是一个死板的限制,而是一个将出站流量减到最小的阈值。当流量接近阈值时,将会停止上传历史块(超过一周的块)以控制流量。 此外,任何一个SPV节点在请求一个过滤的块时,将被切断链接。

这个选项是默认关闭的(-maxuploadtarget=0),用户可以每天在MiB中设置。 推荐最低设置为每天144*MAX_BLOCK_SIZE(目前是144mb).

白名单中的节点将不会被断开,虽然他们的流量将用来计算结果。

您可以在/doc/reduce-traffic.md中找到有关保持流量在较低水平的更详细的文档。

直接头部声明

在兼容的节点中,[BIP300]将被作为直接头部声明(https://github.com/bitcoin/bips/blob/master/bip-0130.mediawiki)。这意味着块可以通过公布他们的头而不是公布它的哈希值来进行广播。在重组中,所有新的头部将全部被发送而不仅仅是提示。这样通常可以避免重复下载已经存在的块。

通过这个变化,修枝节点(pruning nodes)现在可以广播新的块到兼容的节点中。

内存池限制

之前的比特币核心版本中,内存池的大小将因为节点比对实际交易费和最小交易费而被限制。因为内存池没有受到限制,攻击者可以发送大量的、只支付比默认费用稍高的交易来导致内存较低的节点崩溃。而之前的比特币核心只是通过提高最低交易费用来暂时解决这个问题。

0.12.0版本的比特币核心有一个严格控制大小的内存池。其默认大小是300MB,可以通过配置’-maxmempool’这个参数来控制。无论什么时候,当一个交易将导致内存池超出限制时,交付最低交易费(作为一个包)的那笔交易(包括内存池中的子节点)将被抛弃,而该该节点的交易费将会增加一个默认的费用。这个默认的初始最低费用为1000萨图西/kB。

0.12版的比特币核心还引入了新的默认策略来限制可存入内存池中的未确认交易链的长度及大小(通常未确认的链的长度为25个交易,最大101KB)。这些限制可以通过命令行来修改;请参照拓展帮助(‘–help-help-debug’)来获得更多信息。

对Replace-by-fee交易的可选择

现在可以在0.12版本比特币核心节点的交易内存池里替换交易。比特币核心将仅仅在他们设置nSequence小于0xffffffff - 1时,准许交易替换。而且,一个替换交易可能只在支付足够费用时才会被接受,这在[BIP 125](https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki)中描述过

交易替代可以用一个新的命令行选项被禁用:-mempoolreplacement=0。BIP125下的被标记为可替换的交易仍可在这个配置的内存池中被接受,但替换将被拒绝。此选项适用于想保持先前版本的选择行为的矿工。

-mempoolreplacement选项对想避免收到未经证实的opt-in交易的钱包用户来说是不被推荐的,因为这个选项不会防止在BIP 125下可被替换的交易被接受(只有后续替换,也就是其他在此网络上的实现BIP 125的节点可能转播或挖矿)。 钱包用户希望检测到一个交易是否需要在BIP 125下替换,那么应该使用更新后的RPC指令:gettransactionlisttransactions。现在,如果一个交易时可替换的,那么会有一个额外的字段在输出中将指示出来(”bip125-replaceable”)。

注意,钱包在Bitcoin Core 0.12中还不支持创建在BIP 125下可被替换的交易。

当没有指定-rpcpassword,后台程序会使用一个特别的’cookie’文件来进行身份验证。这个文件在后台程序启动时生成随机内容,并在退出时删除。它的内容被作为身份验证令牌。读取这个文件的权限控制着谁可以通过RPC接入。默认情况下,它被储存在数据目录,但它的位置可以用参数-rpccookiefile覆盖。

这和Tor’s CookieAuthentication相似:详见https://www.torproject.org/docs/tor-manual.html.en

这允许运行bitcoind而无需任何手动配置。

转播:现在在OP_RETURN输出中允许任意数量的数据推送。

先前OP_RETURN输出仅在只有一个推送数据时被广播和挖取。这个限制已取消以允许OP_RETURN之后任意推送数据和常数操作码(OP_1到OP_16)的组合。OP_RETURN输出大小的限制现在适用于整个序列化的scriptPubKey脚本,默认为83字节。(先前的80字节默认值加上头部之前的3字节)

转播和挖矿:交易优先级

比特币核心有一个基于币值和时间的启发式“优先级”系统。 这项计算是用来广播不支付最低手续费的交易,可以用作另一种为已挖出的区块排序交易的方式。 比特币核心将会根据-limitfreerelay=<r>(默认r=15 kB/min)和’-blockprioritysize='来广播费用足够的交易。

在比特币核心0.12版本中,当更高的最小手续费生效时,内存池大小将被限制。,即使根据启发式优先级排名,交易不符合这个更高的有效最低手续费时,将不会被广播或挖取。

对交易基于优先级的挖矿现在也默认禁用了。要重新启用,只需简单地在为这些交易储备区块字节大小的地方设置-blockprioritysize=<n> 。 旧的默认值是50k,所以保留大约相同的规则,您可以设置-blockprioritysize=50000

此外,由于计算的简化,避免重复计算已确认输入的交易,含有未确认输入的交易的优先级将比之前版本更低。

外部矿工规则可以通过设置prioritisetransaction RPC调用来排名已经在的内存池中的交易来像之前一样工作。 注意,如果矿工的对于交易的优先选择被禁止,那优先权就会被忽略,只有费用的本身才是真正有效的。

这项内部的自动化的优先级的处理正被考虑在比特币核心0.13版本中完全剔除,现在还未决定到底要不要恢复对链上未确认的交易进行更准确的优先级计算。 社区对于这项话题的讨论被特别的要求以确定项目的优先级。

自动使用Tor隐藏服务

从Tor的0.2.7.1版本开始,能够通过Tor的control socket API,自动地创建和销毁“短暂的”隐藏服务。 比特币核心已经升级来应用该项技术。

这意味着如果Tor正在运行(并且正常授权可用),比特币核心可以自动创建一个隐藏服务用于监听,而无需手动配置。 如果能成功地打开接入控制,比特币核心还将自动使用Tor以连接至其他的洋葱网络节点。 这将直接影响到可用的洋葱节点的数量以及它们的用法。

如果比特币核心正在监听并且Tor的连接可用,这个新功能可以默认开启。它可在-listenonion-torcontrol-torpassword 设置中进行配置。要显示详细的调试信息,可通过-debug=tor

通过ZMQ通知

比特币客户端现在可以(可选)异步地通过一个ZMQ为基础的PUB接入,通知客户新的交易和区块。 这个特性需要安装ZMQ C API library 4.x并通过指令栏或配置文件进行配置使用。 操作的具体信息请参照docs/zmq.md

钱包:交易费

对于钱包如何计算交易费已做出很多改进。

通过设置-paytxfee=<n> (或是在运行时通过RPC调用 settxfee <n>),用户可以决定支付一笔预先计算好的费率,n=0代表让比特币核心使用浮动费率。默认状况下,比特币核心会使用浮动汇率。

基于历史交易数据,现在的浮动汇率大概是需要进入到第m块的费用,这个可通过-txconfirmtarget=<m> (默认: 2)进行配置。

有时候,给出恰好的估计很难,或者给出估计本身就很难。因此,可以利用-fallbackfee=<f>设置后退值(默认值为0.0002 BTC/kB)。

比特币核心总是利用参数-maxtxfee=<x>将封顶费用设置在x(默认值:0.10)BTC。 并且,比特币核心不会创建小于当前最小交易费的交易。 最后,用户可以通过参数-mintxfee=<i>为所有的交易设置最小交易费,默认值是1000satoshis/kB。

钱包:拒绝的确认和冲突检测

钱包现在将提交一个负数来确认在多深的区块链中检测到冲突。例如,一个交易A有5个确认并且与钱包交易B有着相同的输入,B将报告有-5个确认数。如果另一个钱包交易C使用B的输出,它也将报告有-5个确认数。 您也许需要’-rescan’以在区块链的历史交易中检测冲突。

与早期版本不同,未确认但没有冲突的交易永远不会得到一个负的确认。然而这些交易是不可花费的,除非它们来自我们自己(找零)并且被本地的内存池所接受。RPC调用’listtransactions’中新增的字段”trusted”的输出将标明一个未确认的交易是否会被认为是可交易的。

钱包:Merkle分支移除

在之前,所有的钱包交易都储存了一个Merkle分支来证明其自身存在于区块中。但这仅用于检测一个不需要的验证。从0.12版本开始,它们将不再被储存。当加载一个0.12版钱包到旧的版本,它将自动重新扫描以避免失败的检测。

钱包:剪枝

在0.12版本中,钱包的功能在删减模式中依然可以使用。 这可以将磁盘使用量从现在60GM减少到2GB。

但是,重新扫描及部分RPC如’importwallet’、’importaddress’、 ‘importprivkey’是被禁用的。

开启区块删减可以通过在命令行或’bitcoin.conf’ 文件内的prune=<N>来设置。其中的’N’为用来分配初始块和撤销数据的MiB的数量。

值为0会禁用删减,0之上的最小值为550。 您的钱包对高值或低值的安全性是一致的。 高值仅仅是为了确保您的节点不会因为区块链的确认时间超过两天而被关闭——这在实际情况中几乎不会发生。 在未来的版本中,高值可以帮助整个网络成为一个整体。也就是说,被贮存的区块会被提供给其他节点。

关于更多的剪枝资料,你可以查看[release notes of v0.11.0]https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning).

‘NODE_BLOOM’服务位

‘NODE_BLOOM’服务位的支持,见BIP111描述(https://github.com/bitcoin/bips/blob/master/bip-0111.mediawiki), 已经被添加进P2P协议代码中。

BIP111明确定义了一个服务点允许用户做广告,支持bloom过滤器(就像被SPV客户端使用的那样)。尽管缺乏新的连接bloom滤波器服务位,它还冲击允许识别旧节点的协议版本。

在这个版本中,它只对于发送的’>=70011版本协议的节点执行。下一个主要版本,将计划将这一限制删除。对于70011之后版本的节点,将建议其更新SPV客户端已检查NODE_BLOOM`的节点服务位。

可选句法分析行为

命令行选项现在将严格按照其被指定的顺序解析。之前的情况是选项-X -noX,不那么直观的,在X设置后,-X将优先于-noX。现在已不再是这种情况,像其他软件,最后一个选项会被保留。

PRC:低级API变化

  • 货币金额可以作为字符串提供。这意味着,例如参数sendtoaddress可以使用“0.0001”代替0.0001。这对于一个坚持使用有损浮点数类型的JSON库来说可能是一个优势,因为有损浮点类型对货币金额是不安全的。

*对每个提供有效哈希类型定义的签名,每个scriptSig的’asm’属性现在包含了解码签名哈希值类型。

  • OP_NOP2已经通过[BIP 65]被更名为OP_CHECKLOCKTIMEVERIFY(https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki)

这个改变将影响下列包含scriptSig签名涉及的项目:

  • RPC getrawtransaction
  • RPC decoderawtransaction
  • RPC decodescript
  • REST /rest/tx/ (JSON格式)
  • REST /rest/block/ (JSON格式当包含加长的交易细节)
  • bitcoin-tx -json

例: scriptSig.asm 交易属性输入之前显示的一个组合代表:

304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c509001 400000 OP_NOP2

现在显示为:

304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c5090[ALL] 400000 OP_CHECKLOCKTIMEVERIFY

注意RPC调用 decodescript的输出不会改变,因为这是用来专门配置scriptPubKe脚本而不是scriptSig脚本。

RPC: 放弃SSL支持

在之前RPC的SSL支持选项rpcssl已经从客户端和服务端除去。这样做是准备完全移除依赖OpenSSL的守护进程。

尝试用rpcssl会导致错误:

Error: SSL mode for RPC (-rpcssl) is no longer supported.

如果你是为数不多的依赖于这个功能的用户,通过使用stunnel命令可以灵活的进行迁移。这是一个可以在SSL里任意连接TCP的实用程序。例:Ubuntu可以使用以下命令安装:

sudo apt-get install stunnel4

然后,在28332端口将一个SSL连接至RPC服务器的本地18332端口:

stunnel -d 28332 -r 127.0.0.1:18332 -p stunnel.pem -P ''

它可以在inetd模式下设置为全局的。

另一个方式重新实现SSL为安装httpd反向代理。这个解决方法允许使用不同身份验证、负载均衡,即时压缩和缓存。一个apache2的示例配置看起来是:

Listen 443

NameVirtualHost *:443
<VirtualHost *:443>

SSLEngine On
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

<Location /bitcoinrpc>
    ProxyPass http://127.0.0.1:8332/
    ProxyPassReverse http://127.0.0.1:8332/
    # optional enable digest auth
    # AuthType Digest
    # ...

    # optional bypass bitcoind rpc basic auth
    # RequestHeader set Authorization "Basic <hash>"
    # get the <hash> from the shell with: base64 <<< bitcoinrpc:<password>
</Location>

# Or, balance the load:
# ProxyPass / balancer://balancer_cluster_name

</VirtualHost>

挖矿代码的变更

挖矿的代码在0.12中被优化,其性能及内存占用得到了明显的改善。作为这次变更的一部分,一些关键的算法将在接收交易的过程中缓存入内存池,挖矿的代码现在依赖于内存池的一致性以构造成新的块。然而,所有的块都仍然需要在构造之后验证其正确性。

其他P2P的变更

现在被禁止的节点将被记录在磁盘上而不是内存中。重启bitcoind将不再会清除在黑名单中的节点;一个新的RPC调用(‘clearbanned’)将替代重启,以手动清除该名单。新的RPC调用可以用 ‘setban’ 来手动禁止或解禁一个节点。

0.12.0 变更日志

详尽的版本说明。这份说明仅包括影响行为的变化,并不包括代码、重构和字符串的更新。为了更加方便的定位变更的代码及附带的讨论,pull和request、git上的代码合并与提交都将被提及。

RPC和REST

Changelog

  • #6121 466f0ea Convert entire source tree from json_spirit to UniValue (Jonas Schnelli)
  • #6234 d38cd47 fix rpcmining/getblocktemplate univalue transition logic error (Jonas Schnelli)
  • #6239 643114f Don’t go through double in AmountFromValue and ValueFromAmount (Wladimir J. van der Laan)
  • #6266 ebab5d3 Fix univalue handling of \u0000 characters. (Daniel Kraft)
  • #6276 f3d4dbb Fix getbalance * 0 (Tom Harding)
  • #6257 5ebe7db Add paytxfee and errors JSON fields where appropriate (Stephen)
  • #6271 754aae5 New RPC command disconnectnode (Alex van der Peet)
  • #6158 0abfa8a Add setban/listbanned RPC commands (Jonas Schnelli)
  • #6307 7ecdcd9 rpcban fixes (Jonas Schnelli)
  • #6290 5753988 rpc: make gettxoutsettinfo run lock-free (Wladimir J. van der Laan)
  • #6262 247b914 Return all available information via RPC call “validateaddress” (dexX7)
  • #6339 c3f0490 UniValue: don’t escape solidus, keep espacing of reverse solidus (Jonas Schnelli)
  • #6353 6bcb0a2 Show softfork status in getblockchaininfo (Wladimir J. van der Laan)
  • #6247 726e286 Add getblockheader RPC call (Peter Todd)
  • #6362 d6db115 Fix null id in RPC response during startup (Forrest Voight)
  • #5486 943b322 [REST] JSON support for /rest/headers (Jonas Schnelli)
  • #6379 c52e8b3 rpc: Accept scientific notation for monetary amounts in JSON (Wladimir J. van der Laan)
  • #6388 fd5dfda rpc: Implement random-cookie based authentication (Wladimir J. van der Laan)
  • #6457 3c923e8 Include pruned state in chaininfo.json (Simon Males)
  • #6456 bfd807f rpc: Avoid unnecessary parsing roundtrip in number formatting, fix locale issue (Wladimir J. van der Laan)
  • #6380 240b30e rpc: Accept strings in AmountFromValue (Wladimir J. van der Laan)
  • #6346 6bb2805 Add OP_RETURN support in createrawtransaction RPC call, add tests. (paveljanik)
  • #6013 6feeec1 [REST] Add memory pool API (paveljanik)
  • #6576 da9beb2 Stop parsing JSON after first finished construct. (Daniel Kraft)
  • #5677 9aa9099 libevent-based http server (Wladimir J. van der Laan)
  • #6633 bbc2b39 Report minimum ping time in getpeerinfo (Matt Corallo)
  • #6648 cd381d7 Simplify logic of REST request suffix parsing. (Daniel Kraft)
  • #6695 5e21388 libevent http fixes (Wladimir J. van der Laan)
  • #5264 48efbdb show scriptSig signature hash types in transaction decodes. fixes #3166 (mruddy)
  • #6719 1a9f19a Make HTTP server shutdown more graceful (Wladimir J. van der Laan)
  • #6859 0fbfc51 http: Restrict maximum size of http + headers (Wladimir J. van der Laan)
  • #5936 bf7c195 [RPC] Add optional locktime to createrawtransaction (Tom Harding)
  • #6877 26f5b34 rpc: Add maxmempool and effective min fee to getmempoolinfo (Wladimir J. van der Laan)
  • #6970 92701b3 Fix crash in validateaddress with -disablewallet (Wladimir J. van der Laan)
  • #5574 755b4ba Expose GUI labels in RPC as comments (Luke-Jr)
  • #6990 dbd2c13 http: speed up shutdown (Wladimir J. van der Laan)
  • #7013 36baa9f Remove LOCK(cs_main) from decodescript (Peter Todd)
  • #6999 972bf9c add (max)uploadtarget infos to getnettotals RPC help (Jonas Schnelli)
  • #7011 31de241 Add mediantime to getblockchaininfo (Peter Todd)
  • #7065 f91e29f http: add Boost 1.49 compatibility (Wladimir J. van der Laan)
  • #7087 be281d8 [Net]Add -enforcenodebloom option (Patrick Strateman)
  • #7044 438ee59 RPC: Added additional config option for multiple RPC users. (Gregory Sanders)
  • #7072 c143c49 [RPC] Add transaction size to JSON output (Nikita Zhavoronkov)
  • #7022 9afbd96 Change default block priority size to 0 (Alex Morcos)
  • #7141 c0c08c7 rpc: Don’t translate warning messages (Wladimir J. van der Laan)
  • #7312 fd4bd50 Add RPC call abandontransaction (Alex Morcos)
  • #7222 e25b158 RPC: indicate which transactions are replaceable (Suhas Daftuar)
  • #7472 b2f2b85 rpc: Add WWW-Authenticate header to 401 response (Wladimir J. van der Laan)
  • #7469 9cb31e6 net.h fix spelling: misbeha{b,v}ing (Matt)

配置及命令行选项

  • #6164 8d05ec7 Allow user to use -debug=1 to enable all debugging (lpescher)
  • #5288 4452205 Added -whiteconnections=<n> option (Josh Lehan)
  • #6284 10ac38e Fix argument parsing oddity with -noX (Wladimir J. van der Laan)
  • #6489 c9c017a Give a better error message if system clock is bad (Casey Rodarmor)
  • #6462 c384800 implement uacomment config parameter which can add comments to user agent as per BIP-0014 (Pavol Rusnak)
  • #6647 a3babc8 Sanitize uacomment (MarcoFalke)
  • #6742 3b2d37c Changed logging to make -logtimestamps to work also for -printtoconsole (arnuschky)
  • #6846 2cd020d alias -h for -help (Daniel Cousens)
  • #6622 7939164 Introduce -maxuploadtarget (Jonas Schnelli)
  • #6881 2b62551 Debug: Add option for microsecond precision in debug.log (Suhas Daftuar)
  • #6776 e06c14f Support -checkmempool=N, which runs checks once every N transactions (Pieter Wuille)
  • #6896 d482c0a Make -checkmempool=1 not fail through int32 overflow (Pieter Wuille)
  • #6993 b632145 Add -blocksonly option (Patrick Strateman)
  • #7323 a344880 0.12: Backport -bytespersigop option (Luke-Jr)
  • #7386 da83ecd Add option -permitrbf to set transaction replacement policy (Wladimir J. van der Laan)
  • #7290 b16b5bc Add missing options help (MarcoFalke)
  • #7440 c76bfff Rename permitrbf to mempoolreplacement and provide minimal string-list forward compatibility (Luke-Jr)

区块和交易的处理

  • #6203 f00b623 Remove P2SH coinbase flag, no longer interesting (Luke-Jr)
  • #6222 9c93ee5 Explicitly set tx.nVersion for the genesis block and mining tests (Mark Friedenbach)
  • #5985 3a1d3e8 Fix removing of orphan transactions (Alex Morcos)
  • #6221 dd8fe82 Prune: Support noncontiguous block files (Adam Weiss)
  • #6124 41076aa Mempool only CHECKLOCKTIMEVERIFY (BIP65) verification, unparameterized version (Peter Todd)
  • #6329 d0a10c1 acceptnonstdtxn option to skip (most) “non-standard transaction” checks, for testnet/regtest only (Luke-Jr)
  • #6410 7cdefb9 Implement accurate memory accounting for mempool (Pieter Wuille)
  • #6444 24ce77d Exempt unspendable transaction outputs from dust checks (dexX7)
  • #5913 a0625b8 Add absurdly high fee message to validation state (Shaul Kfir)
  • #6177 2f746c6 Prevent block.nTime from decreasing (Mark Friedenbach)
  • #6377 e545371 Handle no chain tip available in InvalidChainFound() (Ross Nicoll)
  • #6551 39ddaeb Handle leveldb::DestroyDB() errors on wipe failure (Adam Weiss)
  • #6654 b0ce450 Mempool package tracking (Suhas Daftuar)
  • #6715 82d2aef Fix mempool packages (Suhas Daftuar)
  • #6680 4f44530 use CBlockIndex instead of uint256 for UpdatedBlockTip signal (Jonas Schnelli)
  • #6650 4fac576 Obfuscate chainstate (James O’Beirne)
  • #6777 9caaf6e Unobfuscate chainstate data in CCoinsViewDB::GetStats (James O’Beirne)
  • #6722 3b20e23 Limit mempool by throwing away the cheapest txn and setting min relay fee to it (Matt Corallo)
  • #6889 38369dd fix locking issue with new mempool limiting (Jonas Schnelli)
  • #6464 8f3b3cd Always clean up manual transaction prioritization (Casey Rodarmor)
  • #6865 d0badb9 Fix chainstate serialized_size computation (Pieter Wuille)
  • #6566 ff057f4 BIP-113: Mempool-only median time-past as endpoint for lock-time calculations (Mark Friedenbach)
  • #6934 3038eb6 Restores mempool only BIP113 enforcement (Gregory Maxwell)
  • #6965 de7d459 Benchmark sanity checks and fork checks in ConnectBlock (Matt Corallo)
  • #6918 eb6172a Make sigcache faster, more efficient, larger (Pieter Wuille)
  • #6771 38ed190 Policy: Lower default limits for tx chains (Alex Morcos)
  • #6932 73fa5e6 ModifyNewCoins saves database lookups (Alex Morcos)
  • #5967 05d5918 Alter assumptions in CCoinsViewCache::BatchWrite (Alex Morcos)
  • #6871 0e93586 nSequence-based Full-RBF opt-in (Peter Todd)
  • #7008 eb77416 Lower bound priority (Alex Morcos)
  • #6915 2ef5ffa [Mempool] Improve removal of invalid transactions after reorgs (Suhas Daftuar)
  • #6898 4077ad2 Rewrite CreateNewBlock (Alex Morcos)
  • #6872 bdda4d5 Remove UTXO cache entries when the tx they were added for is removed/does not enter mempool (Matt Corallo)
  • #7062 12c469b [Mempool] Fix mempool limiting and replace-by-fee for PrioritiseTransaction (Suhas Daftuar)
  • #7276 76de36f Report non-mandatory script failures correctly (Pieter Wuille)
  • #7217 e08b7cb Mark blocks with too many sigops as failed (Suhas Daftuar)
  • #7387 f4b2ce8 Get rid of inaccurate ScriptSigArgsExpected (Pieter Wuille)

P2P协议及网络编码

  • #6172 88a7ead Ignore getheaders requests when not synced (Suhas Daftuar)
  • #5875 9d60602 Be stricter in processing unrequested blocks (Suhas Daftuar)
  • #6256 8ccc07c Use best header chain timestamps to detect partitioning (Gavin Andresen)
  • #6283 a903ad7 make CAddrMan::size() return the correct type of size_t (Diapolo)
  • #6272 40400d5 Improve proxy initialization (continues #4871) (Wladimir J. van der Laan, Diapolo)
  • #6310 66e5465 banlist.dat: store banlist on disk (Jonas Schnelli)
  • #6412 1a2de32 Test whether created sockets are select()able (Pieter Wuille)
  • #6498 219b916 Keep track of recently rejected transactions with a rolling bloom filter (cont’d) (Peter Todd)
  • #6556 70ec975 Fix masking of irrelevant bits in address groups. (Alex Morcos)
  • #6530 ea19c2b Improve addrman Select() performance when buckets are nearly empty (Pieter Wuille)
  • #6583 af9305a add support for miniupnpc api version 14 (Pavel Vasin)
  • #6374 69dc5b5 Connection slot exhaustion DoS mitigation (Patrick Strateman)
  • #6636 536207f net: correctly initialize nMinPingUsecTime (Wladimir J. van der Laan)
  • #6579 0c27795 Add NODE_BLOOM service bit and bump protocol version (Matt Corallo)
  • #6148 999c8be Relay blocks when pruning (Suhas Daftuar)
  • #6588 cf9bb11 In (strCommand == “tx”), return if AlreadyHave() (Tom Harding)
  • #6974 2f71b07 Always allow getheaders from whitelisted peers (Wladimir J. van der Laan)
  • #6639 bd629d7 net: Automatically create hidden service, listen on Tor (Wladimir J. van der Laan)
  • #6984 9ffc687 don’t enforce maxuploadtarget’s disconnect for whitelisted peers (Jonas Schnelli)
  • #7046 c322652 Net: Improve blocks only mode. (Patrick Strateman)
  • #7090 d6454f6 Connect to Tor hidden services by default (when listening on Tor) (Peter Todd)
  • #7106 c894fbb Fix and improve relay from whitelisted peers (Pieter Wuille)
  • #7129 5d5ef3a Direct headers announcement (rebase of #6494) (Pieter Wuille)
  • #7079 1b5118b Prevent peer flooding inv request queue (redux) (redux) (Gregory Maxwell)
  • #7166 6ba25d2 Disconnect on mempool requests from peers when over the upload limit. (Gregory Maxwell)
  • #7133 f31955d Replace setInventoryKnown with a rolling bloom filter (rebase of #7100) (Pieter Wuille)
  • #7174 82aff88 Don’t do mempool lookups for “mempool” command without a filter (Matt Corallo)
  • #7179 44fef99 net: Fix sent reject messages for blocks and transactions (Wladimir J. van der Laan)
  • #7181 8fc174a net: Add and document network messages in protocol.h (Wladimir J. van der Laan)
  • #7125 10b88be Replace global trickle node with random delays (Pieter Wuille)
  • #7415 cb83beb net: Hardcoded seeds update January 2016 (Wladimir J. van der Laan)
  • #7438 e2d9a58 Do not absolutely protect local peers; decide group ties based on time (Gregory Maxwell)
  • #7439 86755bc Add whitelistforcerelay to control forced relaying. [#7099 redux] (Gregory Maxwell)
  • #7482 e16f5b4 Ensure headers count is correct (Suhas Daftuar)

确认

  • #5927 8d9f0a6 Reduce checkpoints’ effect on consensus. (Pieter Wuille)
  • #6299 24f2489 Bugfix: Don’t check the genesis block header before accepting it (Jorge Timón)
  • #6361 d7ada03 Use real number of cores for default -par, ignore virtual cores (Wladimir J. van der Laan)
  • #6519 87f37e2 Make logging for validation optional (Wladimir J. van der Laan)
  • #6351 2a1090d CHECKLOCKTIMEVERIFY (BIP65) IsSuperMajority() soft-fork (Peter Todd)
  • #6931 54e8bfe Skip BIP 30 verification where not necessary (Alex Morcos)
  • #6954 e54ebbf Switch to libsecp256k1-based ECDSA validation (Pieter Wuille)
  • #6508 61457c2 Switch to a constant-space Merkle root/branch algorithm. (Pieter Wuille)
  • #6914 327291a Add pre-allocated vector type and use it for CScript (Pieter Wuille)
  • #7500 889e5b3 Correctly report high-S violations (Pieter Wuille)

系统构建

  • #6210 0e4f2a0 build: disable optional use of gmp in internal secp256k1 build (Wladimir J. van der Laan)
  • #6214 87406aa [OSX] revert renaming of Bitcoin-Qt.app and use CFBundleDisplayName (partial revert of #6116) (Jonas Schnelli)
  • #6218 9d67b10 build/gitian misc updates (Cory Fields)
  • #6269 d4565b6 gitian: Use the new bitcoin-detached-sigs git repo for OSX signatures (Cory Fields)
  • #6418 d4a910c Add autogen.sh to source tarball. (randy-waterhouse)
  • #6373 1ae3196 depends: non-qt bumps for 0.12 (Cory Fields)
  • #6434 059b352 Preserve user-passed CXXFLAGS with –enable-debug (Gavin Andresen)
  • #6501 fee6554 Misc build fixes (Cory Fields)
  • #6600 ef4945f Include bitcoin-tx binary on Debian/Ubuntu (Zak Wilcox)
  • #6619 4862708 depends: bump miniupnpc and ccache (Michael Ford)
  • #6801 ae69a75 [depends] Latest config.guess and config.sub (Michael Ford)
  • #6938 193f7b5 build: If both Qt4 and Qt5 are installed, use Qt5 (Wladimir J. van der Laan)
  • #7092 348b281 build: Set osx permissions in the dmg to make Gatekeeper happy (Cory Fields)
  • #6980 eccd671 [Depends] Bump Boost, miniupnpc, ccache & zeromq (Michael Ford)
  • #7424 aa26ee0 Add security/export checks to gitian and fix current failures (Cory Fields)

钱包

  • #6183 87550ee Fix off-by-one error w/ nLockTime in the wallet (Peter Todd)
  • #6057 ac5476e re-enable wallet in autoprune (Jonas Schnelli)
  • #6356 9e6c33b Delay initial pruning until after wallet init (Adam Weiss)
  • #6088 91389e5 fundrawtransaction (Matt Corallo)
  • #6415 ddd8d80 Implement watchonly support in fundrawtransaction (Matt Corallo)
  • #6567 0f0f323 Fix crash when mining with empty keypool. (Daniel Kraft)
  • #6688 4939eab Fix locking in GetTransaction. (Alex Morcos)
  • #6645 4dbd43e Enable wallet key imports without rescan in pruned mode. (Gregory Maxwell)
  • #6550 5b77244 Do not store Merkle branches in the wallet. (Pieter Wuille)
  • #5924 12a7712 Clean up change computation in CreateTransaction. (Daniel Kraft)
  • #6906 48b5b84 Reject invalid pubkeys when reading ckey items from the wallet. (Gregory Maxwell)
  • #7010 e0a5ef8 Fix fundrawtransaction handling of includeWatching (Peter Todd)
  • #6851 616d61b Optimisation: Store transaction list order in memory rather than compute it every need (Luke-Jr)
  • #6134 e92377f Improve usage of fee estimation code (Alex Morcos)
  • #7103 a775182 [wallet, rpc tests] Fix settxfee, paytxfee (MarcoFalke)
  • #7105 30c2d8c Keep track of explicit wallet conflicts instead of using mempool (Pieter Wuille)
  • #7096 9490bd7 [Wallet] Improve minimum absolute fee GUI options (Jonas Schnelli)
  • #6216 83f06ca Take the training wheels off anti-fee-sniping (Peter Todd)
  • #4906 96e8d12 Issue#1643: Coinselection prunes extraneous inputs from ApproximateBestSubset (Murch)
  • #7200 06c6a58 Checks for null data transaction before issuing error to debug.log (Andy Craze)
  • #7296 a36d79b Add sane fallback for fee estimation (Alex Morcos)
  • #7293 ff9b610 Add regression test for vValue sort order (MarcoFalke)
  • #7306 4707797 Make sure conflicted wallet tx’s update balances (Alex Morcos)
  • #7381 621bbd8 [walletdb] Fix syntax error in key parser (MarcoFalke)
  • #7491 00ec73e wallet: Ignore MarkConflict if block hash is not known (Wladimir J. van der Laan)
  • #7502 1329963 Update the wallet best block marker before pruning (Pieter Wuille)

图形用户界面(GUI)

  • #6217 c57e12a disconnect peers from peers tab via context menu (Diapolo)
  • #6209 ab0ec67 extend rpc console peers tab (Diapolo)
  • #6484 1369d69 use CHashWriter also in SignVerifyMessageDialog (Pavel Vasin)
  • #6487 9848d42 Introduce PlatformStyle (Wladimir J. van der Laan)
  • #6505 100c9d3 cleanup icons (MarcoFalke)
  • #4587 0c465f5 allow users to set -onion via GUI (Diapolo)
  • #6529 c0f66ce show client user agent in debug window (Diapolo)
  • #6594 878ea69 Disallow duplicate windows. (Casey Rodarmor)
  • #5665 6f55cdd add verifySize() function to PaymentServer (Diapolo)
  • #6317 ca5e2a1 minor optimisations in peertablemodel (Diapolo)
  • #6315 e59d2a8 allow banning and unbanning over UI->peers table (Jonas Schnelli)
  • #6653 e04b2fa Pop debug window in foreground when opened twice (MarcoFalke)
  • #6864 c702521 Use monospace font (MarcoFalke)
  • #6887 3694b74 Update coin control and smartfee labels (MarcoFalke)
  • #7000 814697c add shortcurts for debug-/console-window (Jonas Schnelli)
  • #6951 03403d8 Use maxTxFee instead of 10000000 (MarcoFalke)
  • #7051 a190777 ui: Add “Copy raw transaction data” to transaction list context menu (Wladimir J. van der Laan)
  • #6979 776848a simple mempool info in debug window (Jonas Schnelli)
  • #7006 26af1ac add startup option to reset Qt settings (Jonas Schnelli)
  • #6780 2a94cd6 Call init’s parameter interaction before we create the UI options model (Jonas Schnelli)
  • #7112 96b8025 reduce cs_main locks during tip update, more fluently update UI (Jonas Schnelli)
  • #7206 f43c2f9 Add “NODE_BLOOM” to guiutil so that peers don’t get UNKNOWN[4] (Matt Corallo)
  • #7282 5cadf3e fix coincontrol update issue when deleting a send coins entry (Jonas Schnelli)
  • #7319 1320300 Intro: Display required space (MarcoFalke)
  • #7318 9265e89 quickfix for RPC timer interface problem (Jonas Schnelli)
  • #7327 b16b5bc [Wallet] Transaction View: LastMonth calculation fixed (crowning-)
  • #7364 7726c48 [qt] Windows: Make rpcconsole monospace font larger (MarcoFalke)
  • #7384 294f432 [qt] Peertable: Increase SUBVERSION_COLUMN_WIDTH (MarcoFalke)

测试与 QA

  • #6305 9005c91 build: comparison tool swap (Cory Fields)
  • #6318 e307e13 build: comparison tool NPE fix (Cory Fields)
  • #6337 0564c5b Testing infrastructure: mocktime fixes (Gavin Andresen)
  • #6350 60abba1 add unit tests for the decodescript rpc (mruddy)
  • #5881 3203a08 Fix and improve txn_doublespend.py test (Tom Harding)
  • #6390 6a73d66 tests: Fix bitcoin-tx signing test case (Wladimir J. van der Laan)
  • #6368 7fc25c2 CLTV: Add more tests to improve coverage (Esteban Ordano)
  • #6414 5121c68 Fix intermittent test failure, reduce test time (Tom Harding)
  • #6417 44fa82d [QA] fix possible reorg issue in (fund)rawtransaction(s).py RPC test (Jonas Schnelli)
  • #6398 3d9362d rpc: Remove chain-specific RequireRPCPassword (Wladimir J. van der Laan)
  • #6428 bb59e78 tests: Remove old sh-based test framework (Wladimir J. van der Laan)
  • #5515 d946e9a RFC: Assert on probable deadlocks if the second lock isnt try_lock (Matt Corallo)
  • #6287 d2464df Clang lock debug (Cory Fields)
  • #6465 410fd74 Don’t share objects between TestInstances (Casey Rodarmor)
  • #6534 6c1c7fd Fix test locking issues and un-revert the probable-deadlines assertions commit (Cory Fields)
  • #6509 bb4faee Fix race condition on test node shutdown (Casey Rodarmor)
  • #6523 561f8af Add p2p-fullblocktest.py (Casey Rodarmor)
  • #6590 981fd92 Fix stale socket rebinding and re-enable python tests for Windows (Cory Fields)
  • #6730 cb4d6d0 build: Remove dependency of bitcoin-cli on secp256k1 (Wladimir J. van der Laan)
  • #6616 5ab5dca Regression Tests: Migrated rpc-tests.sh to all Python rpc-tests.py (Peter Tschipper)
  • #6720 d479311 Creates unittests for addrman, makes addrman more testable. (Ethan Heilman)
  • #6853 c834f56 Added fPowNoRetargeting field to Consensus::Params (Eric Lombrozo)
  • #6827 87e5539 [rpc-tests] Check return code (MarcoFalke)
  • #6848 f2c869a Add DERSIG transaction test cases (Ross Nicoll)
  • #6813 5242bb3 Support gathering code coverage data for RPC tests with lcov (dexX7)
  • #6888 c8322ff Clear strMiscWarning before running PartitionAlert (Eric Lombrozo)
  • #6894 2675276 [Tests] Fix BIP65 p2p test (Suhas Daftuar)
  • #6863 725539e [Test Suite] Fix test for null tx input (Daniel Kraft)
  • #6926 a6d0d62 tests: Initialize networking on windows (Wladimir J. van der Laan)
  • #6822 9fa54a1 [tests] Be more strict checking dust (MarcoFalke)
  • #6804 5fcc14e [tests] Add basic coverage reporting for RPC tests (James O’Beirne)
  • #7045 72dccfc Bugfix: Use unique autostart filenames on Linux for testnet/regtest (Luke-Jr)
  • #7095 d8368a0 Replace scriptnum_test’s normative ScriptNum implementation (Wladimir J. van der Laan)
  • #7063 6abf6eb [Tests] Add prioritisetransaction RPC test (Suhas Daftuar)
  • #7137 16f4a6e Tests: Explicitly set chain limits in replace-by-fee test (Suhas Daftuar)
  • #7216 9572e49 Removed offline testnet DNSSeed ‘alexykot.me’. (tnull)
  • #7209 f3ad812 test: don’t override BITCOIND and BITCOINCLI if they’re set (Wladimir J. van der Laan)
  • #7226 301f16a Tests: Add more tests to p2p-fullblocktest (Suhas Daftuar)
  • #7153 9ef7c54 [Tests] Add mempool_limit.py test (Jonas Schnelli)
  • #7170 453c567 tests: Disable Tor interaction (Wladimir J. van der Laan)
  • #7229 1ed938b [qa] wallet: Check if maintenance changes the balance (MarcoFalke)
  • #7308 d513405 [Tests] Eliminate intermittent failures in sendheaders.py (Suhas Daftuar)
  • #7468 947c4ff [rpc-tests] Change solve() to use rehash (Brad Andrews)

其他

  • #6213 e54ff2f [init] add -blockversion help and extend -upnp help (Diapolo)
  • #5975 1fea667 Consensus: Decouple ContextualCheckBlockHeader from checkpoints (Jorge Timón)
  • #6061 eba2f06 Separate Consensus::CheckTxInputs and GetSpendHeight in CheckInputs (Jorge Timón)
  • #5994 786ed11 detach wallet from miner (Jonas Schnelli)
  • #6387 11576a5 [bitcoin-cli] improve error output (Jonas Schnelli)
  • #6401 6db53b4 Add BITCOIND_SIGTERM_TIMEOUT to OpenRC init scripts (Florian Schmaus)
  • #6430 b01981e doc: add documentation for shared library libbitcoinconsensus (Braydon Fuller)
  • #6372 dcc495e Update Linearize tool to support Windows paths; fix variable scope; update README and example configuration (Paul Georgiou)
  • #6453 8fe5cce Separate core memory usage computation in core_memusage.h (Pieter Wuille)
  • #6149 633fe10 Buffer log messages and explicitly open logs (Adam Weiss)
  • #6488 7cbed7f Avoid leaking file descriptors in RegisterLoad (Casey Rodarmor)
  • #6497 a2bf40d Make sure LogPrintf strings are line-terminated (Wladimir J. van der Laan)
  • #6504 b6fee6b Rationalize currency unit to “BTC” (Ross Nicoll)
  • #6507 9bb4dd8 Removed contrib/bitrpc (Casey Rodarmor)
  • #6527 41d650f Use unique name for AlertNotify tempfile (Casey Rodarmor)
  • #6561 e08a7d9 limitedmap fixes and tests (Casey Rodarmor)
  • #6565 a6f2aff Make sure we re-acquire lock if a task throws (Casey Rodarmor)
  • #6599 f4d88c4 Make sure LogPrint strings are line-terminated (Ross Nicoll)
  • #6630 195942d Replace boost::reverse_lock with our own (Casey Rodarmor)
  • #6103 13b8282 Add ZeroMQ notifications (João Barbosa)
  • #6692 d5d1d2e devtools: don’t push if signing fails in github-merge (Wladimir J. van der Laan)
  • #6728 2b0567b timedata: Prevent warning overkill (Wladimir J. van der Laan)
  • #6713 f6ce59c SanitizeString: Allow hypen char (MarcoFalke)
  • #5987 4899a04 Bugfix: Fix testnet-in-a-box use case (Luke-Jr)
  • #6733 b7d78fd Simple benchmarking framework (Gavin Andresen)
  • #6854 a092970 devtools: Add security-check.py (Wladimir J. van der Laan)
  • #6790 fa1d252 devtools: add clang-format.py (MarcoFalke)
  • #7114 f3d0fdd util: Don’t set strMiscWarning on every exception (Wladimir J. van der Laan)
  • #7078 93e0514 uint256::GetCheapHash bigendian compatibility (arowser)
  • #7094 34e02e0 Assert now > 0 in GetTime GetTimeMillis GetTimeMicros (Patrick Strateman)

鸣谢

非常感谢以下人员对该发布版本做出的直接贡献:

  • accraze
  • Adam Weiss
  • Alex Morcos
  • Alex van der Peet
  • AlSzacrel
  • Altoidnerd
  • Andriy Voskoboinyk
  • antonio-fr
  • Arne Brutschy
  • Ashley Holman
  • Bob McElrath
  • Braydon Fuller
  • BtcDrak
  • Casey Rodarmor
  • centaur1
  • Chris Kleeschulte
  • Christian Decker
  • Cory Fields
  • daniel
  • Daniel Cousens
  • Daniel Kraft
  • David Hill
  • dexX7
  • Diego Viola
  • Elias Rohrer
  • Eric Lombrozo
  • Erik Mossberg
  • Esteban Ordano
  • EthanHeilman
  • Florian Schmaus
  • Forrest Voight
  • Gavin Andresen
  • Gregory Maxwell
  • Gregory Sanders / instagibbs
  • Ian T
  • Irving Ruan
  • Jacob Welsh
  • James O’Beirne
  • Jeff Garzik
  • Johnathan Corgan
  • Jonas Schnelli
  • Jonathan Cross
  • João Barbosa
  • Jorge Timón
  • Josh Lehan
  • J Ross Nicoll
  • kazcw
  • Kevin Cooper
  • lpescher
  • Luke Dashjr
  • MarcoFalke
  • Mark Friedenbach
  • Matt
  • Matt Bogosian
  • Matt Corallo
  • Matt Quinn
  • Micha
  • Michael
  • Michael Ford / fanquake
  • Midnight Magic
  • Mitchell Cash
  • mrbandrews
  • mruddy
  • Nick
  • Patrick Strateman
  • Paul Georgiou
  • Paul Rabahy
  • Pavel Janík / paveljanik
  • Pavel Vasin
  • Pavol Rusnak
  • Peter Josling
  • Peter Todd
  • Philip Kaufmann
  • Pieter Wuille
  • ptschip
  • randy-waterhouse
  • rion
  • Ross Nicoll
  • Ryan Havar
  • Shaul Kfir
  • Simon Males
  • Stephen
  • Suhas Daftuar
  • tailsjoin
  • Thomas Kerin
  • Tom Harding
  • tulip
  • unsystemizer
  • Veres Lajos
  • Wladimir J. van der Laan
  • xor-freenet
  • Zak Wilcox
  • zathras-crypto

同时也向所有在Transifex上协助进行翻译的人员致以真诚的感谢。义务翻译.