从技术层面分析 ETHPoW 分叉的正统性
作者:0xTodd,Nothing Research 合伙人
原文:《为什么从技术角度看 ETHPoW 分叉不够正统?》
我看很多朋友经常混淆各种 “分叉”,以及 ETH PoW 为什么从分叉角度是不太正统的。今天想科普个小概念。
区块链,顾名思义,就是很多个区块串成的链条。新的区块,永不停歇地接到老的区块之后。如果说,咱们现实世界以秒为单位计算时间,区块链上的世界,就以区块为最小单位计算时间。
世界上的分叉有两种:
因网络不同步而产生的分叉。
因版本有分歧而产生的分叉。
先说第一种,因为网络问题而产生的分叉。这是一个很常见的现象,每天都在发生。举个例子,当两个矿工几乎同时解开难题,打包出新的区块,那到底谁的块,是有资格接到老区块之后呢?分叉就自然而然产生了。
通常来说,矿工们会认为第一个算出来的是合法区块。但是,就怕两个矿工几乎同时算出来,比如相差几毫秒,再算上网络中广播的延迟。那么自然而然,就变成了两个集团。有人先收到了 A 区块,有人先收到了 B 区块。
同时收到新区块为了解决这个问题,行业里有了 “最长链原则”。它规定,如果区块链在某高度分叉了,那么就比谁的链更长,谁的区块就有意义,短的则被废弃。如图所示,从分叉高度开始,两个矿工集团开始做算力竞赛,其他所有矿工都要选边站队。因为是暴力计算哈希,算力更强的一方,通常可以更快算出来。但是理论上,也存在弱的一方运气逆天,能够反超的。
算力竞赛赢家,赚走所有区块头奖励+手续费,输家什么也得不到,白白浪费了电力。
当然,ETH 为了解决这个问题,专门设计了叔块。叔叔是爸爸的弟弟,但是叔叔没有儿子。它让输家也能拿一点点补偿,可以避免一些矿工死磕。
如果一方是恶意的,那就是 51% 攻击。如果两方都无恶意,那就是正常分叉。这也是交易所要求充值代币时,要等到若干个区块才给上账的原因。
那么,如图所示,最长的链就变成了主链,网络分叉的风波也就过去了。
赢家变成了正统主链那么再说说第二种,什么是因版本有分歧而产生的分叉。
理论上,ETH 分叉过很多很多很多很多次,大多数都是因为系统的版本升级。凡是因为版本升级而产生的分叉,最长链原则都【不】适用。最长链原则只适用于解决网络同步问题。
这里会进一步分为硬分叉和软分叉。
由于升级而产生的硬分叉,如果全网都同意的话,不会诞生出新的分叉链。它其实是新链对旧链的完全取代。
代表案例是以太坊的 “伦敦升级”,美其名曰升级,其实是伦敦分叉。伦敦升级带来了 EIP-1559(手续费燃烧),没有产生新的链。这就好比,清基本继承明的版图,民国又继承了清的版图。
EIP1559 是标准的硬分叉升级但是,如果社区对于版本升级没有达成共识,则会造成分裂。例如 ETC 分叉,ETC 和 ETH 两条链彻底分家。前者是没有因黑客而回滚的版本,后者则是有的版本。两者版本有分歧,互不认可。这类似于朝鲜和韩国,过去曾是一个国家,但如今已经完全变成两个国家,互不认可。
ETC 和 ETC 同时存在,互不干扰所以,硬分叉有风险,并不能保证每次都全网皆同意。所以,比特币的世界比较喜欢软分叉,这样的风险会小的多。
什么是软分叉?就是虽然版本有变化,但是属于可升、可不升,大家仍然在一个网络当中。大家都知道美国各州有自己的法律,只不过都遵循美国的宪法。软分叉就好比美国某一个州推出了新的法规,那么不必全国采用,也不会造成分裂。
比特币最著名的软分叉是 segwit 隔离见证,它可以将见证人信息拿掉一部分以节约比特币的区块空间,不破坏 1MB,又不影响安全性。如图所示,如果你认可隔离见证,那么你可以升级,如果你不认可,也可以不升级。不同版本客户端虽有分歧,但仍能一起挖矿。