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指令:gettransaction
和listtransactions
。现在,如果一个交易时可替换的,那么会有一个额外的字段在输出中将指示出来(”bip125-replaceable”)。
注意,钱包在Bitcoin Core 0.12中还不支持创建在BIP 125下可被替换的交易。
RPC:Random-cookie RPC身份验证
当没有指定-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
Addpaytxfee
anderrors
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: makegettxoutsettinfo
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上协助进行翻译的人员致以真诚的感谢。义务翻译.