概述
我们很高兴发布比特币核心 0.13.1 版本,其中包含矿工可用于表明支持隔离见证(SegWit)软分叉的代码,以及节点在软分叉激活后可用于验证 SegWit 交易的代码。
SegWit 软分叉与所有比特币钱包完全向后兼容,因此无论 SegWit 是否激活,您都将继续能够安全地发送和接收比特币。如果您是矿工,如果 SegWit 似乎即将激活,您可能需要采取行动;对于所有其他比特币用户而言,现在或将来都不需要采取任何与 SegWit 相关的行动。但是,如果您想支持 SegWit 或想详细了解 SegWit 激活后可能会看到的更改,请参阅我们的SegWit 升级指南。
SegWit 时间线
-
# 矿工将能够从 2016 年 11 月 15 日(UTC)或之后第一个 2016 个区块的重定向周期开始,表明他们愿意并且能够执行 SegWit。
-
# 如果任何重定向周期内 95% 的区块表明支持 SegWit,则它将锁定。
-
# 经过另外一个 2016 个区块(大约两周)的重定向周期后,SegWit 将激活,允许矿工在比特币主网上生成包含 SegWit 交易的区块。
-
# 如果到 2017 年 11 月 15 日后的一个重定向周期结束时 SegWit 尚未激活,则 SegWit 将不再有资格激活。
如果 SegWit 激活,生成交易的软件将能够将交易签名(见证)与交易中 txid 覆盖的数据部分分离(隔离)。这提供了几个直接好处
-
消除不需要的交易可塑性,适用于使用隔离见证的交易,从而简化比特币钱包软件的编写并简化比特币智能合约的设计。
-
容量提升,允许区块容纳比以前更多的交易。
-
基于数据对节点性能的影响进行加权,以便矿工允许在区块中包含更多数据,这些数据不会长期降低节点性能。
-
签名覆盖价值,以减少安全签名生成器(例如硬件钱包)创建安全签名所需的步骤数。这使得开发硬件钱包变得更容易,并且可能会显著提高现有硬件钱包的速度。
-
sighash 操作的线性扩展,以确保使用 SegWit 的交易不会触发导致 2015 年一个区块验证花费 25 秒的问题。
-
提高多重签名的安全性,因此安全性从 P2SH 的大约 80 位提高到 SegWit 的大约 128 位——这相当于针对某些攻击的安全性提高了大约 281 万亿倍。
-
更高效的近乎完整节点安全性,允许愿意放弃一些安全保证的新启动节点构建比特币分类账的准确副本,而无需下载每个区块中的所有数据。(这是 SegWit 提供的功能;它不包含在比特币核心 0.13.1 版本中。)
-
脚本版本控制,允许用户在收到新交易时单独选择加入对比特币脚本语言的未来软分叉更改。
有关上述每个益处的更多信息,请参阅下面的隔离见证的详细益处部分或本网站上更长、更详细的SegWit 益处常见问题解答页面。
有关 SegWit 升级的更多信息,请参阅SegWit 升级指南。
隔离见证的详细益处
以下小节将更详细地描述上面总结的功能。
1. 消除不需要的交易可塑性
隔离见证允许现有和升级的软件在不引用见证的情况下计算交易标识符 (txid),而见证有时可以被第三方(例如矿工)或多重签名花费中的共同签名者更改。这解决了所有已知的不需要的交易可塑性情况,这是一个使比特币钱包软件编程变得更加困难并且严重复杂化比特币智能合约设计的问题。
2. 容量提升
SegWit 交易包含新的字段,这些字段不属于当前用于计算区块大小的数据的一部分,这使得包含 SegWit 交易的区块可以容纳比当前最大区块大小允许的更多数据。
基于当前在区块中找到的交易的估计表明,如果所有钱包都切换到使用 SegWit,网络将能够支持大约 70% 的更多交易。由于 SegWit 激活后赋予交易不同部分的不同权重(有关详细信息,请参阅下一节),网络还将能够支持比现在更多的先进风格的支付(例如多重签名)。
3. 基于数据对节点性能的影响进行加权
每个比特币区块的某些部分需要由节点存储才能验证未来的区块;区块的其他部分可以立即忘记(修剪)或仅用于帮助其他节点同步其区块链副本。
一大块可立即修剪的数据是交易签名(见证),SegWit 使得能够赋予隔离见证不同的“权重”,以对应于它们对节点资源的较低需求。具体来说,隔离见证的每个字节的权重为 1,区块中的其他每个字节的权重为 4,并且区块的最大允许权重为 400 万。以这种方式对数据进行加权可以更好地将创建区块的最有利策略与区块验证的长期成本相一致。
4. 签名覆盖价值
SegWit 中签名生成方式的简单改进简化了安全签名生成器(例如硬件钱包)的设计,减少了签名生成器需要下载的数据量,并允许签名生成器更快地运行。这是通过让生成器签署他们认为正在花费的比特币数量,以及让完整节点拒绝接受这些签名(除非正在花费的比特币数量与签署的数量完全相同)来实现的。
对于非 SegWit 交易,钱包必须为他们进行的每次支付下载正在花费的完整先前交易,这在硬件钱包和其他带宽或计算速度受限的情况下可能是一个缓慢的操作。
5. sighash 操作的线性扩展
2015 年,由于交易签名哈希的执行方式,产生了一个需要大约 25 秒才能在现代硬件上进行验证的区块。其他类似的区块,或可能需要更长时间才能验证的区块,今天仍然可以产生。导致此问题的问题无法在软分叉中修复而不会产生不希望的副作用,但选择加入使用 SegWit 的交易现在将使用一种不同的签名哈希方法,该方法不会受到此问题的影响,并且没有任何不希望的副作用。
6. 提高多重签名的安全性
比特币地址(以“1”开头的 P2PKH 地址和以“3”开头的 P2SH 地址)使用称为 RIPEMD-160 的哈希函数。对于 P2PKH 地址,这提供了大约 160 位的安全性——这超出了密码学家认为今天可以破解的范围。但由于 P2SH 更加灵活,每个地址仅提供大约 80 位的安全性。
虽然 80 位是非常强大的安全性,但它有可能被强大的对手破解。SegWit 允许高级交易使用 SHA256 哈希函数,该函数提供大约 128 位的安全性(即 281 万亿倍于 80 位的安全性,并且等同于比特币为其椭圆曲线数字签名算法 [ECDSA] 选择的参数提供的最大位数安全性)。
7. 更高效的近乎完整节点安全性
中本聪的原始比特币白皮书描述了一种方法,允许新启动的完整节点跳过下载和验证来自受大量工作量证明保护的历史区块的一些数据。不幸的是,中本聪的方法无法保证使用此方法的新启动节点将生成比特币当前分类账(称为 UTXO 集)的准确副本,从而使节点容易与其他节点失去共识。
虽然中本聪方法的问题无法在软分叉中修复,但 SegWit 实现了与其原始提案类似的功能:它使节点能够选择性地跳过下载一些区块链数据(特别是隔离见证),同时仍然确保节点可以为具有最多工作量证明的区块链构建 UTXO 集的准确副本。SegWit 在共识层启用了此功能,但请注意,截至 0.13.1 版本,比特币核心不提供使用此功能的选项。
8. 脚本版本控制
SegWit 使未来的软分叉能够轻松地允许比特币用户在收到新交易时单独选择加入对比特币脚本语言的几乎任何更改。比特币核心贡献者目前正在研究可能使用此功能的功能包括对 Schnorr 签名的支持,这可以提高多重签名(或具有多个输入的交易)的隐私和效率,以及 Merkelized 抽象语法树 (MAST),这可以提高具有两个或多个条件的脚本的隐私和效率。其他比特币社区成员正在研究可以使用脚本版本控制进行的其他改进。
隔离见证如何测试
来自比特币核心和许多其他比特币项目的开发人员自 2015 年 6 月以来一直在测试和使用一个或另一个版本的 SegWit——并且自 2016 年 4 月以来一直在测试 SegWit 实现的最终版本。下面描述了一些开发和测试里程碑
-
2015 年 6 月见证了Elements 项目侧链的发布,其中包含一个被描述为“从头开始”的 SegWit 版本,因为它最初不打算与之前的比特币软件兼容,因为当时不知道如何做到这一点。此版本的 SegWit 继续在基于 Elements 的侧链上使用,直到最近,Elements 项目才切换到使用比特币核心 0.13.1 提供的版本,因为该版本获得了全面的测试以及与现有比特币软件的兼容性。
-
2015 年 10 月,一位开发人员描述了如何在比特币中将 SegWit 实现为软分叉。具有开发“从头开始”版本的经验的开发人员立即开始设计一个与所有现有比特币软件向后兼容的软分叉实现(尽管程序确实需要升级才能完全理解 SegWit)。
-
2015年12月,一个专门针对隔离见证的测试网络(称为segnet)正式启动,允许开发者和测试人员在多用户环境中运行隔离见证,也允许钱包开发者测试其生成隔离见证交易的代码。Segnet经历了多次迭代,解决了发现的问题,并实现了改进。
-
2016年4月,一个关于隔离见证的请求被提交到比特币核心代码库,并鼓励所有比特币开发者(无论来自哪个项目)提供反馈(许多开发者都提供了反馈)。
-
2016年5月,比特币测试网络上激活了隔离见证。这提供了一个比特币核心实现的实时集成测试,针对测试网络上各种各样的其他软件,以查看它是否与已升级到隔离见证的其他软件存在互操作性问题,或者在未升级隔离见证的程序中是否出现了任何问题。测试的成功帮助证明了隔离见证不会给(除了矿工之外)任何未在隔离见证激活时进行升级的人带来问题。截至比特币核心0.13.1版本发布,隔离见证已在测试网络上激活超过六个月,没有已知的共识失败。
同样在2016年5月,二十位比特币核心开发者在瑞士会面,(除其他事项外)对隔离见证代码进行了面对面审查,并确保测试覆盖率足够。
-
2016年6月,隔离见证代码审查完成,几位经验丰富的比特币开发者完成了他们的审查,并表示支持隔离见证的代码更改。
同样在6月份,合并了紧凑区块,这是一种基于过去几年快速区块中继网络开发的点对点协议增强功能。紧凑区块允许在合作节点之间更有效地宣布新区块,这预计将最大限度地减少隔离见证允许的更大区块带来的带宽和延迟影响。
-
2016年9月,比特币核心0.13.0(包含紧凑区块)开始在生产环境中使用,到月底,超过1300个比特币核心0.13.0节点接受传入连接。同样在月底,除了比特币核心之外的一些程序——包括btcd全节点和许多常用的挖矿程序——已经准备好升级到隔离见证的代码,并被积极地用于在测试网络上生成区块。
空操作软分叉
同样在比特币核心0.13.1中,并结合隔离见证软分叉,还进行了一项额外的更改,将一项长期存在的网络中继策略转变为共识规则。OP_CHECKMULTISIG和OP_CHECKMULTISIGVERIFY操作码在签名验证后消耗额外的堆栈元素(“虚拟元素”)。虚拟元素不会以任何方式进行检查,并且可以被任何值替换而不会使脚本无效。
由于任何值都可以用作此虚拟元素,因此第三方可以将数据插入到其他人的交易中,更改交易的txid(称为交易可塑性),并可能导致其他问题。
自比特币核心0.10.0以来,节点默认仅中继和挖掘虚拟元素为零值(0x00,也称为OP_0)的交易。零虚拟软分叉将此中继规则转变为针对非隔离见证交易和隔离见证交易的共识规则,从而永久地从网络中消除这种修改交易的方法。
零虚拟软分叉的信号通过发出对隔离见证的支持来完成,并且零虚拟软分叉将在与隔离见证相同的时间激活。
有关更多信息,请参阅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
