什么是软分叉和硬分叉?如果比特币社区无法达成一致,区块链很可能形成分叉。简单来讲,分叉是指区块链在升级时发生了意见分歧,从而导致区块链分叉。根据分叉后的区块链是否兼容旧区块,将分叉分为硬分叉和软分叉。下面就来详细介绍下。
最简单的解释是:如果你遇到一个硬分叉,它意味着某种数字货币——比如比特币——的新版本软件和旧版本无法兼容,彼此看不顺眼,必须各走各路。而软分叉则不同,新版本要求更为严苛,不同意旧版本的一些规则;但旧版本比较憨厚,还能接受新版本软件。所以对于软分叉而言,新旧版本并非你死我活。
这么说仍然比较抽象,我们可以用一个具体的例子打比方。
对于软分叉,运行旧版本软件就好比出门坐地铁,而运行新版本就像是坐飞机。在地铁站安检的时候 (旧版本),拿着打火机,可以进站,可以上车,按照日常规程,基本没人拦你。而在机场安检时 (新版本),你的打火机只能贡献给倒卖打火机的大爷大妈了。换句话说,有些在地铁上能做的事情,在飞机上就不能做 (旧版本支持的事情,新版本不支持)。反过来看,因为坐飞机的安检更为严格,所以如果你满足了坐飞机的要求,坐地铁自然没有任何问题 (新版本支持的事情,旧版本也支持)。
对于硬分叉,我们也可以用 “地铁和飞机” 形象化。硬分叉中的旧版本软件就好比开地铁,而新版本则是开飞机。显然,能开地铁,不代表你能开飞机 (旧版本支持,新版本则不支持);反过来,即使你有飞机驾驶证,也不能拿着它直接坐进地铁驾驶室里把车开走 (新版本没问题,旧版本却不支持)。
如果非要用一句话来总结,数字加密货币的硬分叉意味着新旧版本软件互不兼容,必须分道扬镳,分成两条不同的区块链;软分叉则相对柔和,旧版本兼容新版本,只是新版本不兼容旧版本而已,因此虽然会有轻微分叉,但仍可共存在同一条区块链下。
最近在比特币网络中,最引人关注的软分叉和硬分叉当数8月份成功启动的 Segwit,和可能会在11月启动的 Segwit2x。二者的目的相似,都是为比特币的区块扩容。我们可以套用上面对于软硬分叉的解释,来理解这两个扩容方案的区别。
之所以说 Segwit 是软分叉,是因为在这一方案中,首先,旧版比特币软件 “区块不能大于 1MB” 的硬性要求,被新版突破了——区块大小最高可达 2MB。启用了 Segwit 的比特币软件中,每笔交易都会激活 Segwit 指令。正是因为这一指令存在而且会被激活,这些交易形成的区块才可以突破 1MB 的上限,达到 2MB。
其次,新版本软件产生的交易,仍然可以被旧版本接受、确认——即旧版本仍然支持新版本。这正是 Segwit 的巧妙之处:新版本软件产生的交易,在旧版本上不会触发 Segwit 指令——旧版本软件并没有接到 “你需要把区块大小改为 2MB哦” 的要求。所以,在旧版本看来,这仍然是一笔跟以往一样的交易。我可以确认它。
换句话说,在 Segwit 模式下,区块可以小于 1MB,跟往常一样,也可以处在 1 - 2MB之间。这就是 Segwit 属于软分叉的根本原因,求同存异嘛,大家一起过。
广为诟病的 Segwit2x 则不同。这个方案属于硬分叉,因为它要求 “新产生的区块至少达到 2MB,最多可达 8MB”。显然,这是一个 “你死我活” 的方案;这样一来,新旧版本均无法跟对方兼容。旧版要求区块不超过 1MB;即使是加入了 Segwit 的中间版本,区块也不能超过 2MB。在这样的条件下,Segwit2x “不低于 2MB” 的要求跟任何一个旧版本都没有交集。
在比特币网络中,由于分散共识机制,基于开源公有链的本质,硬分叉的存在不可避免。而且由于比特币软件去中心化的运行模式,任何一个矿工、用户或者网络节点,以及那些拥有网络节点和算力的交易所、矿池,都可以根据自己的需求选择支持分叉的任意一方。因此,避免过于激进的硬分叉,在分叉前充分做好预防网络攻击的准备,充分考虑各方的需要,就变成了必须要完成的功课。
软分叉和硬分叉都"向后兼容",这样才能保证新节点可以从头验证区块链。向后兼容是指新软件接受由旧软件所产生的数据或者代码,比如说Windows 10可以运行Windows XP的应用。