概述

在比特币核心 0.13.1 中发布的 SegWit 版本经历了近两年的迭代设计、开发和测试,其中过去一年的工作重点是尽可能简化现有比特币用户、企业、开发者和矿工升级到 SegWit 的过程。

SegWit 的初始采用需要两组参与者

  • 矿工 代表比特币网络总算力的 95% 或更多,必须发出支持 SegWit 的信号,以锁定 SegWit 的激活。

  • 完整节点 由合理的数量的用户和企业运行,以验证他们收到的付款,需要升级到比特币核心 0.13.1 或更高版本,或其他与 SegWit 兼容的实现,以激励矿工在 SegWit 激活后遵循 SegWit 的规则。(这是比特币正常的激励机制,其中矿工只有在遵循所有共识规则的情况下才能获得生成区块的收入,一旦 SegWit 激活,这些规则将包括新的 SegWit 共识规则。)

SegWit 软分叉的设计允许这两组中的个人自愿决定是否采用 SegWit,下面提供了针对希望采用 SegWit 和不希望采用 SegWit 的用户的指南。

如果足够多的矿工决定采用 SegWit,它最终将被激活,并且钱包用户将能够开始使用分离见证创建交易。SegWit 软分叉也设计为与所有常用的钱包向后和向前兼容,因此钱包开发者和用户也可以独立决定是否采用 SegWit 或继续在没有分离见证的情况下进行交易。下面提供了针对采用和未采用 开发者用户 的指南。

除了说明之外,下面每个指南部分的末尾还提供了一个简短的推荐列表,您可以使用它来询问您可能遇到的任何与 SegWit 相关的问题。

矿工

本节面向独立矿工和矿池运营商。矿池矿工应联系其矿池运营商以获取有关他们需要执行的操作(如果有)的信息,以升级或不升级到 SegWit。

BIP9 软分叉部署机制正在用于 SegWit,与 2016 年 7 月 4 日激活的 BIP 68/112/113 软分叉使用的机制相同。无论您是否希望升级,都应了解升级过程的重要阶段

  • 已启动:SegWit 将从 2016 年 11 月 15 日或之后第一个重定向周期开始处于已启动阶段,直到它被激活或在一年内未达到锁定状态(根据 BIP9 的策略)而被认为失败。在此期间,愿意且能够执行 SegWit 新共识规则的矿工将通过在区块头版本位字段中放置第 1 位来表示他们的意图。

  • 已锁定:如果在 2016 个区块的重定向周期内 95% 的区块发出了对 SegWit 的支持信号,则 SegWit 软分叉将被锁定,并计划在 2016 个区块(约两周)后激活

  • 已激活:锁定期结束后,发出准备执行 SegWit 信号的矿工将开始生成包含带有分离见证的交易的 SegWit 样式区块。

升级

SegWit 软分叉的 BIP9 参数允许矿工在 2016 年 11 月 15 日或之后第一个重定向周期开始时开始发出对其的支持信号。要发出支持信号,您需要执行以下操作

  • 将您用于交易选择和区块构建的完整节点升级到比特币核心 0.13.1+ 或其他与 SegWit 兼容的完整节点。

  • 将您的挖矿软件、矿池软件或两者都升级到与 SegWit 兼容的版本。

  • 开始生成包含 SegWit 的 BIP9 版本位的区块,该版本位是第 1 位。

当 SegWit 被激活时,您将希望能够挖矿和中继 SegWit 样式的区块。以下挖矿软件已升级以支持 SegWit。

请注意,支持 GetBlockTemplate (GBT) RPC 的软件必须升级以支持 GBT 的 BIP9 和 BIP145 更改。上面链接的所有支持 GBT 的程序都已升级。

SegWit 已在测试网上激活并实施,因此您可能会发现通过在测试网上使用少量算力进行挖矿来测试您的基础设施升级很有用。或者,比特币核心 0.13.1 的回归测试模式 (regtest) 也默认支持 SegWit。

问题?独立矿工和矿池运营商欢迎在 irc.freenode.net 上的 #bitcoin-mining 中寻求帮助。矿池矿工应联系其矿池运营商以了解有关矿池关于 SegWit 的政策的任何问题。

不升级

本节介绍如果您不想执行 SegWit 作为矿工可以执行的操作。

已启动阶段,如果您不想采用 SegWit,您可以简单地拒绝升级到与 SegWit 兼容的完整节点(例如比特币核心 0.13.1 或更高版本),以及避免任何假设您想要设置 SegWit 版本位为第 1 位的挖矿软件。

如果 SegWit 达到已锁定状态,您仍然不需要升级,但强烈建议升级。SegWit 软分叉不需要您生成 SegWit 样式的区块,因此您可以无限期地继续生成非 SegWit 区块。但是,一旦 SegWit 被激活,其他矿工就可以生成您认为有效但所有执行 SegWit 的节点都拒绝的区块;如果您在这些无效区块的基础上构建任何区块,您的区块也将被视为无效。

因此,在 SegWit 达到已锁定状态后,建议您将完整节点升级到比特币核心 0.13.1 或更高版本(或兼容的完整节点),或者按照下面完整节点部分中的“不升级”说明使用比特币核心 0.13.1 或更高版本作为您预 SegWit 软件的过滤器。

完整节点用户

本节面向任何运营完整节点的人员,包括企业和个人。

完整节点阻止其用户接受违反任何比特币共识规则的任何区块。在 SegWit 等软分叉升级中,会添加新规则,任何未升级的节点都不会知道这些新规则。这不是问题:SegWit 软分叉旨在允许未升级的用户继续像软分叉之前一样使用比特币。

但是,任何希望使用 SegWit 软分叉启用的功能的人都会想知道,足够数量的完整节点用户已升级其节点以拒绝违反 SegWit 规则的区块和交易,从而为矿工遵循 SegWit 更新的共识规则提供了强大的激励。

该系统在过去运行良好,在之前几次软分叉激活之前(不包括 BIP50 紧急和临时软分叉),至少有 25% 的可访问节点(通常为 50% 或更多)进行了升级。没有理由期望 SegWit 软分叉有任何不同,升级是支持 SegWit 的用户帮助促进其采用的简便方法。当然,对 SegWit 不感兴趣的人可以简单地不升级。下面详细介绍了这两种情况。

升级

要升级到与 SegWit 兼容的版本,请下载完整节点软件的与 SegWit 兼容的版本(例如 比特币核心 0.13.1 版本),确保您下载的文件是合法的(使用 PGP 或其他方法),停止旧版本的节点软件,然后启动新版本的软件。请注意,如果您在 SegWit 激活后进行升级,则您的节点需要从激活点开始下载和重新同步区块,因为旧版本没有完全下载它们。

您可以使用比特币核心 RPC getblockchaininfo 来跟踪 SegWit 软分叉的状态(在 BIP9 样式软分叉列表中标记为 segwit)。此信息包括最近有多少个区块是由发出执行 SegWit 新共识规则意图信号的矿工生成的。getblockchaininfo RPC 的结果还将让您确定 SegWit 的软分叉何时已锁定(意味着它将在接下来的 2016 个区块内激活)以及激活(意味着它现在由矿工执行)。

比特币核心 0.13.1 提供的钱包默认情况下将继续仅生成非 SegWit P2PKH 地址以接收付款。预计以后的版本将允许用户选择接收付款到 SegWit 地址。

如果您是希望生成地址进行测试的开发者或专家用户,请参阅 SegWit 开发者指南

问题?如果您使用比特币核心作为您的完整节点,请参阅 Bitcoin.org 上的 获取帮助 页面以获取各种支持选项。如果您使用其他完整节点,最好的询问地点是您的完整节点软件用户寻求支持的地方。您的软件维护人员至少会熟悉 SegWit 背后的理念,并且他们将能够告诉您它何时会实施以及它将如何影响您。

不升级

如果您不想升级到 SegWit 并且您不是矿工,您可以简单地继续使用您当前的完整节点软件。SegWit 作为软分叉实现,因此您无需升级。您也不需要升级连接到完整节点的任何钱包;它们将继续像以前一样工作(有关详细信息,请参阅下面的 钱包部分)。

但是,如果您接受确认区块数较少的交易(例如一个或两个区块),请注意,在软分叉激活后,未升级的完整节点暂时接受无效区块的风险会略有增加。随着升级后的矿工继续执行新的 SegWit 共识规则,这种情况将在几个区块内自行解决,但不能保证在无效区块中显示为已确认的交易将继续在有效区块中得到确认。

防止此问题的最简单方法是升级到比特币核心 0.13.1 或更高版本,或其他与 SegWit 软分叉兼容的完整节点版本。如果您仍然不希望升级,则可以使用更新的比特币核心版本作为旧版比特币核心版本的过滤器。

Filtering by an upgraded node

在此配置中,您将当前的比特币核心节点(我们将其称为“旧节点”)设置为仅连接到运行比特币核心 0.13.1 或更高版本的节点(我们将其称为“新节点”)。新节点照常连接到比特币P2P网络。由于新节点了解共识规则的隔离见证更改,因此它不会将无效的区块或交易中继到旧节点,但它会中继所有其他内容。

使用此配置时,请注意,如果旧节点使用比特币核心的默认设置,则在这些交易包含在区块中之前,它将看不到使用隔离见证功能的交易。

配置

对于新节点,正常启动它并让它同步区块链。目前,您无法为此目的使用修剪节点,因为修剪节点不会充当中继节点。您可以选择使用以下一个或两个命令行参数启动新节点,以便它将旧节点视为特殊节点(这些选项也可以放在比特币核心的配置文件中)

  -whitebind=<addr>
       Bind to given address and whitelist peers connecting to it. Use
       [host]:port notation for IPv6

  -whitelist=<netmask>
       Whitelist peers connecting from the given netmask or IP address. Can be
       specified multiple times. Whitelisted peers cannot be DoS banned
       and their transactions are always relayed, even if they are
       already in the mempool, useful e.g. for a gateway

对于旧节点,首先等待新节点完成区块链同步,然后使用以下命令行参数重新启动旧节点(这也可以放在比特币核心的配置文件中)

-connect=<IP_address_or_DNS_name_of_newer_node>

例如:

-connect=192.168.8.8

这将导致旧节点仅连接到新节点,以便所有区块和交易都由新节点过滤。

钱包用户

本节适用于使用轻量级钱包、网页钱包、连接到个人完整节点的钱包或任何其他钱包的任何人。

升级

如果您确实想升级到隔离见证,则首先需要等待矿工激活隔离见证,然后您需要一个支持接收和支出隔离见证风格支付的钱包。这适用于比特币核心的钱包、轻量级钱包以及第三方代表您发送和接收比特币的钱包(有时称为网页钱包)。比特币核心或其他完整节点的用户也应阅读上面关于完整节点的部分。

在您的钱包升级到支持隔离见证后,它将生成以“3”开头的接收地址(P2SH地址)。一些钱包多年来一直在生成P2SH地址,因此这可能对您来说不是什么变化。

所有常用的钱包都能够支付P2SH地址,因此您将能够从任何常用钱包接收付款,无论它们是否已升级到隔离见证。升级到隔离见证后支出比特币时,您仍然可以支付以“1”开头的原始类型的比特币地址(P2PKH地址),以及支付其他P2SH地址的用户。

使用隔离见证钱包支出比特币时,您会注意到以下情况

  • 仅支出您在升级前收到的比特币时,您应该注意到与您在升级前创建的交易没有区别。

  • 将您在升级到隔离见证后收到的比特币支出给尚未升级到隔离见证的人时,他们可能在交易包含在区块中之前看不到您的交易。这是一项安全功能,避免在交易得到确认之前向他们显示其钱包无法完全理解的交易。交易确认后,他们将能够像往常一样查看和支出您发送给他们的比特币。

  • 将您在升级后收到的比特币支出到您的新P2SH地址时,您可能会注意到您支付的交易费用略低于支出之前收到的非隔离见证支付时。这是因为包含您签名的交易部分(“见证”)不需要比特币完整节点快速访问,因此隔离见证允许矿工在一个区块中存储多达 4 倍的见证字节,而不是存储非见证字节。这使创建区块的成本(以及由此产生的交易费用)与运营完整节点的实际成本更好地保持一致。

有问题?如果您有任何疑问,最好的询问地点是您的钱包用户寻求支持的任何地方。您的钱包维护人员将熟悉隔离见证背后的理念,他们将能够告诉您是否会为您的钱包实施隔离见证,何时可能发生以及它将如何影响您使用钱包。

不升级

如果您不想升级到隔离见证,您可以简单地继续使用任何未添加隔离见证支持的钱包。即使您没有升级,您也能够与已升级到隔离见证的用户和像您一样未升级到隔离见证的用户进行交易。

如果您不升级,您可能会遇到一个区别:如果已升级到隔离见证的人向您付款,您的钱包可能在交易包含在区块中之前不会显示付款。这是一项安全功能,可防止您的钱包查看其不完全理解的交易,直到它们得到矿工的确认。

比特币软件开发者

本节适用于处理交易或区块的任何比特币软件的开发人员。

所有比特币软件(包括挖矿软件,前提是它只选择遵循默认中继策略的交易)应该像以前一样继续工作,并且只有在您想要利用隔离见证的新功能时,您才需要升级您的软件。

以下文档中为开发人员描述了隔离见证

  • 隔离见证钱包开发者指南有关将您的钱包升级到支持隔离见证所需了解的所有内容的摘要描述。

  • BIP141 隔离见证(共识层):寻求实现隔离见证任何方面的开发人员应阅读本文档的规范部分。挖矿和完整节点软件的开发人员将在部署部分找到隔离见证的BIP9参数。

  • BIP143 版本 0 见证程序的交易签名验证:任何希望创建或验证隔离见证签名的软件的开发人员都应阅读本文档的规范部分,并建议使用示例部分进行测试。

  • BIP144 隔离见证(对等服务):寻求通过比特币P2P网络发送或接收隔离见证的开发人员应阅读本文档的规范部分。

  • BIP145 隔离见证的getblocktemplate更新:生产或使用GetBlockTemplate RPC 的挖矿和其他软件的开发人员应阅读BIP145和BIP9中相关的GBT更改。

  • BIP147 处理虚拟栈元素可塑性:钱包和特别是新交易脚本的开发人员应该意识到这条新的共识规则,它反映了长期存在的默认网络中继策略,禁止除了OP_0“空”操作码之外的任何内容作为检查多重签名风格操作码的“虚拟”参数。激活隔离见证后,这条新的共识规则将适用于使用隔离见证的交易和不使用隔离见证的交易。

  • 版本位FAQ矿工和挖矿软件的开发人员应阅读此FAQ,以获取有关设置其版本位以表示支持软分叉的信息。隔离见证使用版本位的第 1 位。

请注意,BIP142(隔离见证的地址格式)处于延迟状态(如BIP1中所定义),并且不被提议作为标准。相反,邀请钱包开发人员在bitcoin-dev邮件列表上讨论创建比当前base58check编码地址更易用的新比特币地址格式。

BIP 141、143、144和145的大多数实现细节可以在Bitcoin Core PR#8149中找到。BIP147的实现可以在Bitcoin Core PR#8636中找到。

为了在支持隔离见证的网络上测试更改,testnet(testnet3)已经支持隔离见证几个月了,并且包含大量隔离见证区块,包括非常接近隔离见证允许的最大区块大小的区块。比特币核心的回归测试(regtest)模式在比特币核心 0.13.0 和 0.13.1 中也默认支持隔离见证。

除了比特币核心之外,许多免费和开源的比特币钱包和软件包也已经添加了隔离见证兼容性或已准备好部署隔离见证兼容代码,因此,如果它们的版权许可证与您的代码兼容,您可以使用它们的代码更改作为更新软件的示例。

有问题?可以在irc.freenode.net上的#bitcoin-dev IRC聊天室中提出比特币开发问题。也可以在Bitcoin.StackExchange.com和BitcoinTalk.org的技术讨论区中提出问题。