Bitcoin Core 0.13.1
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.13.1
翻译:Kang Xie
比特币核心安装二进制文件可从 bitcoincore.org 下载。源代码在比特币核心代码储存库里。
比特币核心 0.13.1 版本现可被下载:
https://bitcoincore.org/bin/bitcoin-core-0.13.1/
这是一个新的非主要版本公开发布,包括了隔离见证软分叉的激活参数,一些漏洞的修补 和性能的提高等等。
请使用 github 上的问题追踪器来报告你发现的任何 Bugs。
https://github.com/bitcoin/bitcoin/issues
请加入以下发布通知名单来接收关于安全和更新方面的通告:
https://bitcoincore.org/en/list/announcements/join/
兼容性
微软在 2014 年 4 月 8 号停止了对 Windows XP 的技术支持 April 8th, 2014, XP 是 2001 年发布的一个操作系统。这意味者即使是重要的系统安全性更新也不会被发布了。没有安全方面的更新, 在 XP 的电脑上运行比特币钱包至少是不负责任的。
除此之外,随着 0.12.x 的发布,我们收到不同的报告,比特币核心在 Windows XP not clear 上会莫名其妙地崩溃。现在还不清楚这些崩溃的原因所在,但可能是因为上源程序库比如像 Qt 现在已经不在 XP 上被测试了。
我们没有时间也没有资源来支持一个已经过时的操作系统。从 0.13.0 版本开始 ,Windows XP 将不被支持。建议用户升级到一个新的 Windows 版本, 或是安装一个被支持的其他操作系统。
我们不会阻止你在 Windows XP 上安装和运行我们的软件,但你要承担这方面的风险,不要期望它会正常工作,也不要把关于 Windows XP 的问题上报给我们。
从 0.13.1 开始,OSX10.7 将不被支持。0.13.0 本来是应该在 10.7+之上运行的,但是由于 在 10.7.x 上的 libc++版本有严重问题, 使得它不能可靠地运行。0.13.1 现在要求 10.8+, 然后会把这个要求告诉 10.7 的用户,而不是莫名其妙地崩溃。
值得注意的一些改进
隔离见证软分叉
隔离见证(Segwit)是一个软分叉,如果被激活的话,它可以允许制造交易的软件把交易的签名(见证)从交易数据里被隔离出来。 这提供了以下几个益处:
-
消除不良的交易序列号可塑性: 把见证隔离了之后,现有和升级过的软件将不需要参考见证来计算交易序列号,这些序列号有时可以被第三方(比如一个矿工) 或是一个多个签名消费的共同签署者所改变。这样一来,就解决了所有已知的不良的交易序列号可塑性的情況。这个问题不仅让比特币钱包编程更加困难,也让比特币的 智能合约设计更加复杂。
-
扩容: Segwit 的交易包含了新的域值,它们不属于现在那些用来计算区块大小的数据,这样一来包含 Segwit 交易的区块可以容纳比现在最大区块上限所允许的更多的数据。基于现今区块里交易数据分析显示,如果所有的钱包软件使用 Segwit 的话, 整个网络可以支持 70%更多的交易。此外,网络还可以比现在支持更多高级的支付方式(比如像多个签名),这是因为当 Segwit 被激活后,一个交易数据的不同部分被给予不同的“重量”的原因。(请看下段来了解细节)。
-
根据对节点性能的影响来加重数据: 每个节点需要贮存每个比特币区块的一部分来验证未来的区块;然后一个区块的其他部分可以很快被丢弃(被裁剪)或是用来 帮助其他节点来同步它们的区块链拷贝。一大部分可以很快被裁剪掉的数据就是交易签名(见证),Segwit 可以通过根据这些数据在节点资源分布上较低的需要来给 予一个不同的“加重”来使上述“裁剪”变得可能。具体地说,每个 Segwit 字节 给予 1 的加重,其他区块里的字节则给予 4 的加重,然后一个区块最大的“载重” 是 4 百万。重量轻的见证数据就这样被“排挤”出去了。这样加重数据可以让制造区块最盈利的策略更好地与证实区块的长期成本保持一致性。
-
签名包含所花費的价值: 从 Segwit 里产生签名的一个简单改进简化了安全签名产生器的设计(比如像硬件钱包),减少了签名产生器所要下载的数据,然后让签名产生器运作地更加快捷。 原理是在钱包签署时需要包括所花费的价值对于非 Segwit 交易来说,钱包必须下载所有交易历史,这对于硬钱包或是网络速度较慢的区域会是个瓶颈。
-
Sighash 计算的线性增长: 在 2015 年,曾经有一个区块大约需要 25 秒在当今的硬件上被验证,这是由于交易签名散列函数被计算的方法的缺陷。其他类似的区块,或是那些需要更长时间被验证的区块,在今天依然不断产生。造成这个问题的情况不可能被简单解决而不会产生不良的副作用,但是那些选择 Segwit 的交易会使用一个不同的签名方法而不会有任何不良的副作用。
-
加固多签名交易的安全性: 比特币的地址(P2PKH 地址从 1 开始,P2SH 地址从 3 开 始)使用一个散列函数叫做 RIPEMD-160。对于 P2PKH 地址来说,这可以提供 160 位的安全性 – 已经超越了密码学家认为可以被攻破的程度。但是因为 P2SH 更 加灵活,只有 80 位的安全系数提供给每个地址。虽然 80 位也是一个很强的安全系数,但它已经处于被一个可以被超级算力攻破的范围之内。 Segwit 允许高级交易使 用 SHA256 函数,它可以提供 128 位的安全系数(比 80 位要强 281 万亿倍,然后 等同于比特币签名所用的 ECDSA 算法所提供的最大限度的安全性)。
-
更加有效的几乎是全点的安全性: 中本聪的比特币白皮书里描述了一个方法:让 新加入的全点跳过下载和验证被大量工作证明所保护的历史区块里的一些数据。可 惜的是,中本聪的方法难以保证新加入的节点使用这个方法可以产生一个正确的比 特币最新的总账(叫做 UTXO 集),这使得这个节点有可能与其他节点无法达成 共识。虽然中本聪的这个方法里的问题不能被一个软分叉所解决,Segwit 达到了类 似于他原先的提议:它可以让一个节点有选择性地跳过下载一些区块数据(此处特 指隔离见证)然后同时可以保证这个节点可以在有最多工作量证明的区块链上建立 一个准确的 UTXO 集。Segwit 在共识层里让这个功能变为可能, 但是请注意比特 币核心在 0.13.1 版本里还不支持这一功能。
-
脚本版本: Segwit 可以让加入新版本脚本语言变得更加容易。 比特币核心开发者现在所研究的课题之一就是用这个功能来支持薛尔签名,薛尔签名可以增进多个签名交易(或是有多个输入的交易)的隐私和效率,还有默克尔化抽 象语法树(MAST),它可以提高有多个条件的脚本的隐私和效率。其他比特币社区里的成员也在研究其他通过使用脚本版本的改进。
Segwit 软分叉的激活是用 BIP9 的 versionbits 来实施的。Segwit 的 versionbit 是 bit 1, 当 Segwit 在 2016 年 11 月 15 日启动之后,节点们就会在 2016 个区块算力重新调整期的开始的时候追踪区块支持 Segwit 的信号。当这两个礼拜的重新调整期内,有 95%的区块发出信号支持 Segwit,这个软分叉就会被锁定。然后过了另外 2016 个区块后,Segwit 就会被激活。
如果你想获得关于 Segwit 的更多信息,请参阅 隔离见证的好处,和 Segwit 钱包开发者指导手 册 或是 141, 143, 144 和 145。 如果你是个矿工或是矿池管理员,请看 versionbits FAQ 来了解如何发布支持一个软分叉的信号。
空的虚拟值软分叉
与 Segwit 软分叉一起发布的是一个把一个长期存在的网络传递政策变为一个共识规则的改变。OP_CHECKMULTISIG 和 OP_CHECKMULTISIGVERIFY 这两个 opcodes 在验证了签名后会占有一个多余的堆集元素(虚拟元素)。这个虚拟元素从不会被审查,也可以被任何值所取代而不会让脚本无效。
因为任何值都可以被当成这个虚拟元素,所以一个第三方可以把数据加入其他人的交易数据里,从而改变交易序列号(称之为交易号的可塑性),还可能引起其他问题。
从比特币核心 0.10.0 版本起,节点就默认只传递和挖那些虚拟元素是一个空值(0x00,也 叫做 OP_0)的交易。 这个空的虚拟值软分叉把这个传递规则变成了一个既适合非隔离见证交易也适合隔离见证交易的共识规则,这样一来可以让交易变异的方法被永远地摒除于网络之外。
信号支持这个软分叉是由 Segwit 软分叉的信号支持所完成的。这个软分叉与 Segwit 同时激活。
请看 BIP147。BIP147.
低层次的 RPC 改进
- `Importprunedfunds 只接受两个必要的自变量。一些版本接受一个可选择的第三个自 变量,通常被忽略。所以不要传递多于两个的自变量。
Linux ARM builds
随着 0.13.0 的发布,预先建立的 Linux ARM 二进制文件被加入一个被上载的可执行文件 集里。每个可执行文件所针对的 ARM 架构点的技术细节陈列如下:
以下额外的文件可以在下载的文档或是 torrent 里找到:
-
`bitcoin-${VERSION}-arm-linux-gnueabihf.tar.gz: Linux binaries targeting the 32- bit ARMv7-A architecture. Linux 二进制文件针对于 32 点位 ARMv7-A 架构。
-
`bitcoin-${VERSION}-aarch64-linux-gnu.tar.gz: Linux binaries targeting the 64-bit Linux 二进制文件针对于 64 点位 ARMv7-A 架构。
ARM 的建造依然是实验性的。如果你在某种硬件上或是一个特定的 Linux 发布(指 Ubuntu,Fedora etc)或是一个综合环境上遭遇到问题,请上报给问题追踪器, 我们可能 有办法解决它们。请注意你使用的硬件必须和你所使用的二进制文件所针对的架构点相
(反向)兼容。比如说,一个 Raspberry Pi 2 Model B or Raspberry Pi 3 Model B(处于 32- 点位执行模式)硬件,可以运行 32-点位的 ARMv7-A 针对性二进制文件。但是,没有一 个 Raspberry Pi 1 模型的硬件可以运行这个文件因为它们都是使用 ARMv6 架构的硬件, 无法与 ARMv7-A or ARMv8-A 架构相兼容。
0.13.1 的改进记录
详细的发布记录如下。这个汇总包括了那些影响系统行为的改进,而不包括代码移动,重 构,和字符串更新。为了方便你找到代码改动和相关的讨论, 我们在这里提供了 PR 和 git 合并提交。
Consensus(共识)
- #8636
9dfa0c8
Implement NULLDUMMY softfork (BIP147) (jl2012) - #8848
7a34a46
Add NULLDUMMY verify flag in bitcoinconsensus.h (jl2012) - #8937
8b66659
Define start and end time for segwit deployment (sipa)
RPC and other APIs
- #8581
526d2b0
Drop misleading option in importprunedfunds (MarcoFalke) - #8699
a5ec248
Remove createwitnessaddress RPC command (jl2012) - #8780
794b007
Deprecate getinfo (MarcoFalke) - #8832
83ad563
Throw JSONRPCError when utxo set can not be read (MarcoFalke) - #8884
b987348
getblockchaininfo help: pruneheight is the lowest, not highest, block (luke-jr) - #8858
3f508ed
rpc: Generate auth cookie in hex instead of base64 (laanwj) - #8951
7c2bf4b
RPC/Mining: getblocktemplate: Update and fix formatting of help (luke-jr)
Block and transaction handling(区块和交易处理)
- #8611
a9429ca
Reduce default number of blocks to check at startup (sipa) - #8634
3e80ab7
Add policy: null signature for failed CHECK(MULTI)SIG (jl2012) - #8525
1672225
Do not store witness txn in rejection cache (sipa) - #8499
9777fe1
Add several policy limits and disable uncompressed keys for segwit scripts (jl2012) - #8526
0027672
Make non-minimal OP_IF/NOTIF argument non-standard for P2WSH (jl2012) - #8524
b8c79a0
Precompute sighashes (sipa) - #8651
b8c79a0
Predeclare PrecomputedTransactionData as struct (sipa)
P2P protocol and network code(点对点协议和网络代码)
- #8740
42ea51a
No longer send local address in addrMe (laanwj) - #8427
69d1cd2
Ignorenotfound
P2P messages (laanwj) - #8573
4f84082
Set jonasschnellis dns-seeder filter flag (jonasschnelli) - #8712
23feab1
Remove maxuploadtargets recommended minimum (jonasschnelli) - #8862
7ae6242
Fix a few cases where messages were sent after requested disconnect (theuni) - #8393
fe1975a
Support for compact blocks together with segwit (sipa) - #8282
2611ad7
Feeler connections to increase online addrs in the tried table (EthanHeilman) - #8612
2215c22
Check for compatibility with download in FindNextBlocksToDownload (sipa) - #8606
bbf379b
Fix some locks (sipa) - #8594
ab295bb
Do not add random inbound peers to addrman (gmaxwell) - #8940
5b4192b
Add x9 service bit support to dnsseed.bluematt.me, seed.bitcoinstats.com (TheBlueMatt, cdecker) - #8944
685e4c7
Remove bogus assert on number of oubound connections. (TheBlueMatt) - #8949
0dbc48a
Be more agressive in getting connections to peers with relevant services (gmaxwell)
Build system(建造)
- #8293
fa5b249
Allow building libbitcoinconsensus without any univalue (luke-jr) - #8492
8b0bdd3
Allow building bench_bitcoin by itself (luke-jr) - #8563
147003c
Add configure check for -latomic (ajtowns) - #8626
ea51b0f
Berkeley DB v6 compatibility fix (netsafe) - #8520
75f2065
Remove check foropenssl/ec.h
(laanwj)
GUI
- #8481
d9f0d4e
Fix minimize and close bugs (adlawren) - #8487
a37cec5
Persist the datadir after option reset (achow101) - #8697
41fd852
Fix op order to append first alert (rodasmith) - #8678
8e03382
Fix UI bug that could result in paying unexpected fee (jonasschnelli) - #8911
7634d8e
Translate all files, even if wallet disabled (laanwj) - #8540
1db3352
Fix random segfault when closing “Choose data directory” dialog (laanwj) - #7579
f1c0d78
Show network/chain errors in the GUI (jonasschnelli)
Wallet(钱包)
- #8443
464dedd
Trivial cleanup of HD wallet changes (jonasschnelli) - #8539
cb07f19
CDB: fix debug output (crowning-) - #8664
091cdeb
Fix segwit-related wallet bug (sdaftuar) - #8693
c6a6291
Add witness address to address book (instagibbs) - #8765
6288659
Remove “unused” ThreadFlushWalletDB from removeprunedfunds (jonasschnelli)
Tests and QA(测试和质量检验)
- #8713
ae8c7df
create_cache: Delete temp dir when done (MarcoFalke) - #8716
e34374e
Check legacy wallet as well (MarcoFalke) - #8750
d6ebe13
Refactor RPCTestHandler to prevent TimeoutExpired (MarcoFalke) - #8652
63462c2
remove root test directory for RPC tests (yurizhykin) - #8724
da94272
walletbackup: Sync blocks inside the loop (MarcoFalke) - #8400
bea02dc
enable rpcbind_test (yurizhykin) - #8417
f70be14
Add walletdump RPC test (including HD- & encryption-tests) (jonasschnelli) - #8419
a7aa3cc
Enable size accounting in mining unit tests (sdaftuar) - #8442
8bb1efd
Rework hd wallet dump test (MarcoFalke) - #8528
3606b6b
Update p2p-segwit.py to reflect correct behavior (instagibbs) - #8531
a27cdd8
abandonconflict: Use assert_equal (MarcoFalke) - #8667
6b07362
Fix SIGHASH_SINGLE bug in test_framework SignatureHash (jl2012) - #8673
03b0196
Fix obvious assignment/equality error in test (JeremyRubin) - #8739
cef633c
Fix broken sendcmpct test in p2p-compactblocks.py (sdaftuar) - #8418
ff893aa
Add tests for compact blocks (sdaftuar) - #8803
375437c
Ping regularly in p2p-segwit.py to keep connection alive (jl2012) - #8827
9bbe66e
Split up slow RPC calls to avoid pruning test timeouts (sdaftuar) - #8829
2a8bca4
Add bitcoin-tx JSON tests (jnewbery) - #8834
1dd1783
blockstore: Switch to dumb dbm (MarcoFalke) - #8835
d87227d
nulldummy.py: Don’t run unused code (MarcoFalke) - #8836
eb18cc1
bitcoin-util-test.py should fail if the output file is empty (jnewbery) - #8839
31ab2f8
Avoid ConnectionResetErrors during RPC tests (laanwj) - #8840
cbc3fe5
Explicitly set encoding to utf8 when opening text files (laanwj) - #8841
3e4abb5
Fix nulldummy test (jl2012) - #8854
624a007
Fix race condition in p2p-compactblocks test (sdaftuar) - #8857
1f60d45
mininode: Only allow named args in wait_until (MarcoFalke) - #8860
0bee740
util: Move wait_bitcoinds() into stop_nodes() (MarcoFalke) - #8882
b73f065
Fix race conditions in p2p-compactblocks.py and sendheaders.py (sdaftuar) - #8904
cc6f551
Fix compact block shortids for a test case (dagurval)
Documentation(文档)
- #8754
0e2c6bd
Target protobuf 2.6 in OS X build notes. (fanquake) - #8461
b17a3f9
Document return value of networkhashps for getmininginfo RPC endpoint (jlopp) - #8512
156e305
Corrected JSON typo on setban of net.cpp (sevastos) - #8683
8a7d7ff
Fix incorrect file name bitcoin.qrc (bitcoinsSG) - #8891
5e0dd9e
Update bips.md for Segregated Witness (fanquake) - #8545
863ae74
Update git-subtree-check.sh README (MarcoFalke) - #8607
486650a
Fix doxygen off-by-one comments, fix typos (MarcoFalke) - #8560
c493f43
Fix two VarInt examples in serialize.h (cbarcenas) - #8737
084cae9
UndoReadFromDisk works on undo files (rev), not on block files (paveljanik) - #8625
0a35573
Clarify statement about parallel jobs in rpc-tests.py (isle2983) - #8624
0e6d753
build: Mention curl (MarcoFalke) - #8604
b09e13c
build,doc: Update for 0.13.0+ and OpenBSD 5.9 (laanwj) - #8939
06d15fb
Update implemented bips for 0.13.1 (sipa)
Miscellaneous (其他)
- #8742
d31ac72
Specify Protobuf version 2 in paymentrequest.proto (fanquake) - #8414,#8558,#8676,#8700,#8701,#8702 Add missing copyright headers (isle2983, kazcw)
- #8899
4ed2627
Fix wake from sleep issue with Boost 1.59.0 (fanquake) - #8817
bcf3806
update bitcoin-tx to output witness data (jnewbery) - #8513
4e5fc31
Fix a type error that would not compile on OSX. (JeremyRubin) - #8392
30eac2d
Fix several node initialization issues (sipa) - #8548
305d8ac
Use__func__
to get function name for output printing (MarcoFalke) - #8291
a987431
[util] CopyrightHolders: Check for untranslated substitution (MarcoFalke)
Credits(感谢)
我们要感谢以下贡献者为这次发布提供了他们的时间与精力:
- adlawren
- Alexey Vesnin
- Anders Øyvind Urke-Sætre
- Andrew Chow
- Anthony Towns
- BtcDrak
- Chris Stewart
- Christian Barcenas
- Christian Decker
- Cory Fields
- crowning-
- Dagur Valberg Johannsson
- David A. Harding
- Eric Lombrozo
- Ethan Heilman
- fanquake
- Gaurav Rana
- Gregory Maxwell
- instagibbs
- isle2983
- Jameson Lopp
- Jeremy Rubin
- jnewbery
- Johnson Lau
- Jonas Schnelli
- jonnynewbs
- Justin Camarena
- Kaz Wesley
- leijurv
- Luke Dashjr
- MarcoFalke
- Marty Jones
- Matt Corallo
- Micha
- Michael Ford
- mruddy
- Pavel Janík
- Pieter Wuille
- rodasmith
- Sev
- Suhas Daftuar
- whythat
- Wladimir J. van der Laan
As well as everyone that helped translating on Transifex.