总览

摘录:第一个支持隔离验证激活的比特币核心版本现已可用。

我们很高兴地[发布]比特币核心 0.13.1的版本发布说明,该版本允许矿工们发布支持隔离见证(segwit)软分叉的信号并指明如果软叉被激活, 哪些节点可以用来验证segwit交易。

segwit软分叉完全向后兼容所有比特币钱包,所以无论segwit是否激活,您都能继续安全地发送和接收比特币。如果您是一位矿工,且segwit看起来将激活, 那您可能需要采取行动;对于所有其他比特币用户,无论现在或是将来您无需针对segwit采取任何行动。 然而,如果您想支持segwit或想了解segwit激活所导致的变化的更多细节,请参阅我们的segwit升级指南

Segwit时间轴:

  • #矿工将能够示意他们愿意并能够在2016年11月15日(UTC)或之后开始的第一个2,016块难度调整期开始时执行segwit。

  • # 如果在任何难度调整期内95%的块释放支持segwit的信号,它将被锁定。

  • # 经过另一个2,016块(大约两周)的难度调整期后,segwit将激活,允许矿工在比特币的主网上生成包含segwit交易的块。

  • # 如果segwit在2017年11月15日之后的一个难度调整期结束时没有激活,segwit将不再有资格被激活。

如果segwit被激活,交易生成软件将能够从被txid覆盖的交易数据中分离(隔离)交易签名(见证)。这会带来几个直接的好处:

  1. 对使用隔离见证的交易来说,** 消除了不必要的交易可延展性 **,使得编写比特币钱包软件更容易并简化比特币智能合约的设计。

  2. ** 容量增加 **允许区块保存比以前更多的交易。

  3. ** 基于对节点性能的影响衡量数据 **以便允许矿工在区块中长期内不会降低节点性能的部分放置更多的数据。

  4. ** 签名包括所花費的值 **以减少安全签名生成器(例如硬件钱包)为创建安全签名所需要执行的步骤数。这使得开发硬件钱包更加容易, 并能显著地提高现有硬件钱包的速度。

  5. ** sighash的线性缩放操作 **确保使用segwit的交易不会触发在2015年导致区块需要25秒来验证的问题。

  6. ** 增加多签名交易的安全性 **使安全性从P2SH的大约80位提高到segwit的大约128位—对某些攻击来说安全了大约281万亿倍。

  7. ** 更高效的“类全节点”安全 **允许那些愿意放弃一些安全保证的新开始节点无需下载每个区块的所有的数据即可构建一个准确的比特币分类帐副本。 (这是一个由segwit实现的功能;Bitcoin Core 0.13.1中不包括。)

  8. ** 脚本版本化 **允许用户分别选择今后在比特币脚本语言上所做的软分叉变更。

有关上述每个优点的更多信息,请参阅下面的segwit好处详解章节或本网站上篇幅更长、更加详细的segwit好处常见问题页面。

有关升级到segwit的更多信息,请参阅segwit升级指南

segwit好处详解

以下章节更详细地描述了上文所概述的特性。

1.消除不必要的交易可扩展性

隔离见证允许现有和升级的软件无需引用见证(签名)便可计算交易的交易标识符(txid);交易标识符有时可由第三方(例如矿工)或共同签名人在多签名交易中更改。 这解决了所有已知的不必要的交易可延展性的问题,这个问题令比特币钱包软件开发更困难,并使智能合约比特币的设计严重地复杂化。

2. 容量增加

交易包含一部分不属于当前被用来计算区块大小的数据的新字段,这些新字段使包含segwit交易的区块能够保存超过当前最大块所允许保存的更多的数据。

基于当前区块中交易的估计显示,如果所有钱包都切换到使用segwit,则网络将能够多支持大约70%的交易。 由于segwit激活之后对交易的不同部分给出不同的权重(参见后述章节),网络还将能够支持比现在更多的高级式支付方式(例如多签名交易)。

3. 基于数据对节点性能的影响为其加权

每个比特币区块的某些部分都要由节点存储,以便验证未来的区块;区块的其他部分可以立即被忘记(修剪)或仅用来帮助其他节点同步其区块链的副本。 可立即被修剪的数据的大部分是交易签名(见证),并且segwit让给分离的签名提供不同的“权重”变成可能,以与它们对节点资源的较低要求相对应。具体来讲, 分离的见证的每个字节被赋予权重1,区块中的每个其他字节被赋予权重4,并且每个区块的最大允许权重是400万。 以这种方式加权数据能更好地将最有利可图的区块创建策略与区块验证的长期成本对齐。

4. 签名包括所花費的值

在segwit中生成签名的一个简单改进简化了安全签名生成器(例如硬件钱包)的设计,减少了签名生成器需要下载的数据量,并允许签名生成器更加快捷地操作。 让钱包标记它认为自己消耗的比特币的数量,除非所耗费的比特币的数量与标记的数量完全相同,否则全节点将拒绝接受签名。

对于非segwit交易,钱包必须下载用于其每次付款的完整的先前交易,这在硬件钱包上或在带宽或计算速度受限制的情况下会是一个缓慢的操作。

5. sighash操作的线性缩放

在2015年由于交易sighash执行方式的原因,在现代硬件上验证区块需要大约25秒。其他类似的区块或那些可能需要更长时间来验证的区块,在今天仍然可能被生成。 导致这种情况的问题无法在不产生不必要副作用的情况下简单修复,但现在选择使用segwit的交易将使用不受此问题影响的sighash方法, 并且没有任何副作用。

6. 增强多签名交易的安全性

比特币地址(以“1”开头的P2PKH地址和以“3”开头的P2SH地址)使用被称为RIPEMD-160的哈希函数。对于P2PKH地址,它提供了大约160位的安全性 - 密码学家认为迄今为止这是无法被破译的。但因为P2SH更加灵活,因此每个地址只提供大约80位的安全性。

虽然80位提供非常强大的安全性,但它有可能被强大的对手破解。Segwit允许高级交易使用SHA256哈希函数,它提供了大约128位的安全性(比80位安全了281万亿倍, 相当于比特币椭圆曲线数字安全算法 [ECDSA] 可选参数能提供的最大位数的安全性。)

7. 更加有效的“类全节点”安全性

Satoshi Nakamoto的原始比特币文件描述了一种允许新启动的全节点跳过下载和验证来自受大量工作证明保护的历史块的一些数据的方法。 不幸的是,Nakamoto的方法不能保证使用这种方法新启动的节点将会生成比特币当前分类帐(称为UTXO集合)的精准副本,使得节点容易与其他节点不一致。

虽然Nakamoto方法的问题不能在软分叉中解决,segwit实现了一个类似他原来建议的方法:节点在选择性地跳过下载一些区块链数据(特别是隔离的见证) 的同时仍能确保该节点可以为具有最多工作证明的块链建立UTXO集的精确副本。Segwit在协商层启用此功能,但请注意,在0.13.1版本的比特币核心不提供使用此功能的选项。

8. 脚本版本化

Segwit让今后的软分叉变得容易并允许比特币用户在收到新交易时,逐个选择接受几乎任何比特币脚本语言的变化。 比特币核心贡献者正在研究的可以使用此功能的特性包括支持Schnorr签名,该签名能够提高多重签名交易(或具有多个输入的交易)的隐私和效率, 以及可以改善具有两个或多个条件的脚本的隐私和效率的Merkelized抽象语法树(MAST)。其他比特币社区成员正在研究脚本版本化带来的其他一些改进。

对segwit进行测试

比特币核心的开发人员以及许多其他比特币项目自2015年6月以来一直在测试并使用segwit的不同版本 - 并且自2016年4月以来一直在测试segwit的最终版本。 如下为开发和测试的几个里程碑:

  • ** 2015年6月**发布Elements Project sidechain,其中包括一个可以被称为“从头开始”的segwit版本,因为在那时并不知道如何与之前的比特币软件兼容,因此也没打算使其兼容。segwit的这个版本一直被Elements侧链使用,直到Elements Project切换到使用比特币核心 0.13.1所提供的版本,因为该版本进行了全面的测试并且与现有的比特币软件兼容。

  • ** 2015年10月**一个开发人员描述了如何将sigwit在比特币中作为软分叉实现。具有开发“从头开始”版本经验的开发人员立即开始设计一个软分叉实现向后兼容所有现有的比特币软件 (尽管程序也需要升级才能完全理解segwit)。

  • ** 2015年12月**推出了一个特殊的segwit测试网络(称为segnet),允许开发人员和测试人员在多用户环境中运行segwit, 并允许钱包作者测试其生成segwit交易的代码。由于发现问题并修复以及发现改进并实现的原因,Segnet经历了几次迭代。

  • ** 2016年4月**为比特币核心发起了一个pull请求,鼓励来自所有项目的所有比特币开发人员提供反馈(许多人给予了反馈)。

  • ** 2016年5月**在比特币测试网上激活了segwit。这为比特币核心提供了一个与网络上大量其他软件之间的实时集成测试, 观察它与已升级到segwit的其他软件之间是否有任何互操作问题,或在尚未升级到segwit的程序中是否会出现任何问题。这项测试的成功有助于证明, segwit不会对任何在segwit激活时不升级的人(除矿工以外)造成问题。截至比特币核心 0.13.1版本发布时,segwit已经在testnet上激活了六个多月, 没有发现一致性失误。

    也是在2016年5月,二十位比特币核心开发者相聚在瑞士亲自对segwit代码进行了(包括其他活动在内的)评审并确保有足够的测试覆盖面。

  • ** 2016年6月**完成segwit代码评审;几个经验丰富的比特币开发人员完成了他们的评审并表示支持segwit的代码更改。

    6月还进行了压缩块的合并,这是基于过去几年里在快速块中继网络上的开发所做的对等协议增强。压缩块允许在对等协作体之间更有效地通知新块, 这预计将使对segwit所允许的较大块的带宽和延迟的影响降到最小。

  • ** 2016年9月**开始在生产环境中采用比特币核心 0.13.0版本(包含压缩块),超过1300个比特币核心 0.13.0节点在这个月底接受传入连接。 此外,在月底,除比特币核心以外的许多程序 – 包括btcd全节点和许多常用的挖掘程序 – 都有代码准备升级到segwit,并被积极地用于在testnet上生成区块。

“哑元素”软分叉

此外,在比特币核心 0.13.1版本中结合segwit软分叉出现了一个额外的变化,将一个长期存在的网络中继政策变成一个共识规则。 在签名验证之后 ,OP_CHECKMULTISIG和OP_CHECKMULTISIGVERIFY 操作码消耗额外的堆栈元素(“哑元素”)。哑元素不以任何方式被检查,并且可以由任何值替换而不会使脚本无效。

因为任何值都可以用于这个哑元素,第三方可能会将数据插入到其他人的交易中,更改交易的txid(称为交易可扩展性)并可能导致其他问题。

从比特币核心 0.10.0版本开始,节点就被默认只用来中继和挖掘哑元素为空值(0x00,也称为OP_0)的交易。 空的哑软分叉将该中继规则变成非分隔见证交易和分隔见证交易的共同规则,因此这种将交易变种的方法被永久地从网络中消除了。

空的哑软分叉的信令通过对segwit的信令支持来完成,并且空的哑软分叉将与segwit一起激活。

欲了解更多信息,请参阅BIP147

结论

有关在比特币核心 0.13.1中所做的所有更改的详细信息,请阅读版本发布说明。请访问下载页文件目录下载。

比特币核心 0.13.1是0.13版本系列中规划的唯一软分叉版本。规划的下一个主要版本是比特币核心0.14.0, 其功能冻结时间计划 为2017年1月中旬,并在所有测试完成后发布(通常需要一个多月, 以便留给每个人足够的测试时间)。

如果您有兴趣为比特币核心做贡献,请参阅我们的贡献页面 和文档如何向比特币核心贡献代码。 如果您不知道从哪里开始或有任何其他问题,请访问我们的IRC

验证哈希表

这些是所发布文件的SHA-256哈希表:

cce8417f27953bf01daf4a89de8161d70b88cc3ce78819ca70237b27c944aa55  bitcoin-0.13.1-aarch64-linux-gnu.tar.gz
e84620f51e530c6f7d2b4f47e26df3f365009b2f426f82f6ca3bc894c7cdcb46  bitcoin-0.13.1-arm-linux-gnueabihf.tar.gz
63a5f3e602b8640c5320c402f04379d2f452ea14d2fe84277a5ce95c9ff957c4  bitcoin-0.13.1-i686-pc-linux-gnu.tar.gz
499be4f48c933d92c43468ee2853dddaba4af7e1a17f767a85023b69a21b6e77  bitcoin-0.13.1-osx64.tar.gz
ca063833ffcfe9ac5c8f0e213a39b90132f32eb408e675c1e40eeaf3fcb0404f  bitcoin-0.13.1-osx.dmg
d8edbd797ff1c8266113e54d851a85def46ab82389abe7d7bd0d2827e74cecd7  bitcoin-0.13.1.tar.gz
a7d1d25bbc46b4f0fe333f7d3742c22defdba8db9ffd6056770e104085d24709  bitcoin-0.13.1-win32-setup.exe
fcf6089fc013b175e3c5e32580afb3cb4310c62d2e133e992b8a9d2e0cbbafaa  bitcoin-0.13.1-win32.zip
c1726ccc50635795c942c7d7e51d979c4f83a3d17f8982e9d02a114a15fef419  bitcoin-0.13.1-win64-setup.exe
3956daf2c096c4002c2c40731c96057aecd9f77a559a4bc52b409cc13d1fd3f2  bitcoin-0.13.1-win64.zip
2293de5682375b8edfde612d9e152b42344d25d3852663ba36f7f472b27954a4  bitcoin-0.13.1-x86_64-linux-gnu.tar.gz