转载请微信联系:huangdiezi,更多DAO、Web3、NFT、Metaverse资讯请关注老雅痞👇
亲爱的朋友们,大家好,我是公众号老雅痞的小编波动,雅痞哥为了敦促我学习区块链/DAO/NFT知识(我并不信,他就是想让我干活),我们将单独开始一个专栏,从零开始学习。每天在公众号FastDaily和这里各更新一篇。欢迎大家和我一起学习进步(暗号yaoyaobigc)~揪咪~
让我们每天学点新东西,争取不白活。
今天是一些关于区块链分叉的知识。

区块链领域的重要争论之一是协议升级机制到底首选硬分叉还是软分叉。两者的基本区别在于,软分叉通过严格减少有效交易的集合来改变协议的规则,因此遵循旧规则的节点仍然会进入新链(前提是大多数矿工/验证人都实现了分叉),而硬分叉允许以前无效的交易和区块变为有效,因此客户必须升级他们的客户才能留在硬分叉链上。硬分叉也有两种子类型:严格扩展硬分叉,严格扩展有效交易的集合,因此旧规则实际上是相对于新规则的软分叉,以及双边硬分叉,两个规则集双向不兼容。
这是一个说明分叉类型的维恩图:

一个分布式共识系统的升级除了需要协调好所有的系统参与者,在升级时还可能伴随着区块链共识规则的改变,因此导致了整个网络中升级软件的节点与未升级软件的节点运行在不同的规则之下,由此产生了分叉。
软分叉 Soft Fork
软分叉是指在区块链或去中心化网络中向前兼容的分叉。向前兼容意味着,当新共识规则发布后,在去中心化架构中节点不一定要升级到新的共识规则,因为软分叉的新规则仍旧符合老的规则,也就是未升级的节点仍旧能接受新的规则。
硬分叉 Hard Fork
指在区块链或去中心化网络中不向前兼容的分叉,硬分叉对加密货币使用的技术进行永久更改,这种变化使得所有的新数据块与原来的块不同,换句话说,旧版本不会接受新版本创建的区块,要实现硬分叉所有用户都需要切换到新版本协议上。如果新的硬分叉失败,所有的用户将回到原始数据块。
由此可以看出两者的区别是对新旧节点的兼容方面。软分叉修改数据结构后,新节点生产的交易和区块能够被旧节点验证并接受,硬分叉就不能。而硬分叉修改数据结构后,新节点生产的区块会被旧节点拒绝掉,如果旧节点拒绝升级软件而坚持按照旧数据结构继续挖矿,那就会产生两条链。
好处如下。
硬分叉使开发人员在进行协议升级时具有更大的灵活性,因为他们不需要注意保证新规则“适合”旧规则
软分叉对用户来说更方便,因为用户不需要升级就可以留在链上
软分叉不太可能导致链分裂
软分叉实际上只需要矿工或验证者的同意(即使用户仍然使用旧规则,如果创建链的节点使用新规则,那么无论如何只有在新规则下有效的东西才会进入链);硬分叉需要用户的同意(yes or no)。
除此之外,对硬分叉的一个主要批评是硬分叉是“强制性”。这里隐含的那种强制不是物理的力量。而是通过网络效应进行强制。
也就是说,
如果网络计划将规则从 A 更改为 B,
大多数其他用户喜欢 B 并切换到 B,
那么即使您个人再喜欢 A,也只能“随大流”切换到 B,
切换B后才能上线和其他人一样的网络。
硬分叉的支持者经常被嘲笑为试图对网络进行“恶意接管”,并“强迫”用户与他们捆绑在一起。此外,链分裂的风险通常被用来将硬分叉称为“不安全”。
a16z 的观点是,这些批评是错误的,而且在许多情况下是完全倒退的。这种观点并不特定于以太坊、比特币或任何其他区块链;它源于这些系统的一般属性,同时适用于其中任何一个。此外,以下论点仅适用于有争议的更改,其中至少一个选区(矿工/验证者和用户)的大部分不赞成它们;如果更改没有争议,那么无论分叉的格式是什么,通常都可以安全地完成。
强制性的问题
首先,让我们讨论强制的问题。不论硬分叉还是软分叉(更改协议),都可能有某些用户不喜欢,不能保证更改的支持率是100%;如果支持率低于100%,那么任何协议更改都会执行。此外,几乎不可避免的是,在任何情况下,总会有一些人更看重坚持更大群体的意见,而不是他们自己对协议规则的偏好。因此,从网络效应的角度来看,两种分叉类型都是强制的。
但是,硬分叉和软分叉有一个本质的区别:
硬分叉是可选的,而软分叉根本不允许用户“选择”。
硬分叉发生时,为了让用户加入这个硬分叉链,必须让用户亲自安装实现分叉规则的软件包。不同意规则变化的用户理论上可以选择“no”,简单地留在老链条——而且,实际上,这样的事件已经发生了。
在严格扩展硬分叉和双边硬分叉的情况下都是如此。
在软分叉的情况下,如果分叉成功,则未分叉的链不存在。因此,软分叉在制度上显然更倾向于强制而不是分裂,而硬分叉则相反。我自己的道德观点使我倾向于分离而不是强制,尽管其他人可能会有所不同(提出的最常见的论点是网络效应确实非常重要,并且“一枚代币统治一切”至关重要,尽管更温和的版本也是一个道理)。
有一种观点称:软分叉通常被称为比硬分叉“更少强制性”,因为它感觉就像硬分叉“强迫”用户安装软件更新,而使用软分叉,用户根本“不必”做任何事情。
然而,这种直觉是错误的:重要的不是个人用户是否必须执行点击“下载”按钮的简单官僚步骤,而是用户是否被迫接受他们愿意接受的协议规则更改而是不接受。如上所述,通过这个指标,两种分叉最终都是强制性的,而且硬分叉在保护用户自由方面表现得更好(可选择)。

现在,让我们看看极具争议的分叉,尤其是在两方(一方是矿工/验证者,一方是用户)出现冲突的分叉。这里有三种情况:(1)双边硬分叉(bilateral hard forks),(2)严格扩展的硬分叉(strictly expanding hard forks),以及(3)所谓的“用户激活的软分叉”(UASF,user-activated soft forks)。第四类是矿工在未经用户同意的情况下激活软分叉;我们稍后再讨论。
一、双边硬分叉(bilateral hard forks)
在最好的情况就是利润主导,这种情况很简单。两种加密货币在市场上交易,交易者决定两者的相对价值。从 ETC/ETH 的案例中,我们有压倒性的证据表明,矿工们极有可能只是简单地将他们的哈希值分配给基于价格比率的硬币,以便最大化他们的利润,而不管他们自己的观点如何。

即使一些矿工宣称对一方或另一方有偏好,也极有可能有足够多的矿工愿意保证套利,最终保持了一致。如果矿工卡特尔试图组成不在一条链上开采,那么就会有压倒性的背叛动机。
这里有两个极端情况。
第一种可能是因为难度调整后算法效率低下,挖币的价值下降了,因为价格下降,但难度不下降,使得挖矿无利可图,没有矿工愿意在损失财富的情况下继续推动链条前进。比特币可能就是这种情况,ETH还没有遇到。因此,少数链很难发展,终将消亡。请注意,这个前提是您对强制与分离的看法;我个人认为这种少数链调整难度算法的做法很糟糕。
第二个边缘情况是,如果差异非常大,大链可以 51% 攻击较小的链。即使在 ETH/ETC 以 10:1 的比例拆分的情况下,这种情况也没有发生;所以它当然不是一定的。但是,如果主导链上的矿工更喜欢强制,那总是有可能的。
二、严格扩展的硬分叉(strictly expanding hard forks)
在 SEHF 中,非分叉链在分叉规则下是有效的,因此如果分叉的价格低于非分叉链,则它的算力将低于非分叉链,并且因此非分叉链最终将被原始客户端和分叉客户端规则接受为最长的链——因此分叉链“将被消灭”。
有一种观点认为,对于这样的分叉成功存在强烈的内在偏见,因为分叉链将被歼灭的可能性将影响价格,从而推低价格,使得该链更有可能走向消亡... 在我看来,这个论点似乎很有说服力,因此将任何有争议的硬分叉进行双边而不是严格扩展是一个很好的理由。
Bitcoin Unlimited 开发人员建议通过在硬分叉发生后“手动进行双边”来解决此问题,但更好的选择是内置双边性;例如,在比特币的情况下,可以添加一条规则来禁止一些未使用的操作码,然后在非分叉链上进行包含该操作码的交易,这样在分叉规则下,非分叉链将从此成为认为永远无效。在以太坊的案例中,几乎所有的硬分叉都是双边的。其他链可能具有不同的属性,具体取决于它们的架构。
三、用户激活的软分叉(UASF,user-activated soft forks)
在 UASF 中,用户无需与矿工达成共识即可开启软分叉规则;预计矿工会出于经济利益而顺从。如果许多用户不同意 UASF,那么就会出现硬币分裂,这将导致与严格扩展的硬分叉相同的场景,除了——严格扩展硬分叉中的分叉链因为 “毁灭风险”的压力,会面对强烈的反对;而不是强烈支持 UASF 中的分叉链。即使 UASF 是主动选择加入的,它也使用经济不对称来使自己偏向成功(尽管这种偏见不是绝对的;如果 UASF 绝对不受欢迎,那么它就不会成功,只会导致链分裂)。
UASF 是一种危险的游戏。让我们假设一个项目的开发人员想要制作一个 UASF 补丁,将之前接受所有交易的未使用操作码转换为新的操作码(仅接受符合某些新功能规则的),尽管一个矿工不喜欢(不论出于什么原因)。矿工可以单方面实施矿工激活的软分叉,使所有使用软分叉创建的功能的交易总是失败。
现在,我们有三个规则集:
操作码 X 始终有效的原始规则。
仅当交易的其余部分符合新规则时,操作码 X 的规则才有效
操作码 X 始终无效的规则。
注意,(2) 是相对于 (1) 的软分叉,(3) 是相对于 (2) 的软分叉。现在,有利于(3)的强大经济压力,因此软分叉未能实现其目标。
结论是这样的。
软分叉是一种危险的游戏,如果它们引起争议并且矿工开始反击,它们会变得更加危险。
严格扩展硬分叉也是一种危险的游戏。矿工激活的软分叉是强制的;用户激活的软分叉的强制力较小,但由于经济压力仍然相当强制,而且它们也有危险。
如果你真的想完成一个有争议的改变,并且认为这样做的高社会成本是值得的,那就做一个干净的双边硬分叉,花一些时间添加一些适当的重放保护,剩下的让市场来解决。
作者 a16z 2017 Mar 14
硬分叉的经典案例
以太坊分叉
因黑客盗取了大概6kw美元的合约币,以太坊开发团队修改源码,强行把第1920000个区块的资金转移到另一个地址,“夺回”黑客控制的合约币。大部分矿工认同这个修改,但也有一部分矿工不认同这个修改,于是形成了两条链,新链是以太坊(ETH),原链是以太经典(ETC)。
比特币分叉
2017年8月,为解决比特币交易拥堵、手续费奇高等问题,比特币核心开发团队bitcoincore提出“隔离见证 + 闪电网络”的扩容方案,但另一派则认为应该直接在链上扩容,支持大区块(将区块大小提升至8M),由于扩容方案理念不一致分裂为比特币(BTC,老大哥)以及比特币现金(BCH)。目前BCH已稳踞全球加密货币第四名的位置。

