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, 144145。 如果你是个矿工或是矿池管理员,请看 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 Ignore notfound 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 for openssl/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.