区块链之分叉是什么鬼?

总是听到分叉币,今天来说说到底啥是分叉。

分叉

为什么叫分叉?因为Git中的Fork命令,在软件开发中的分叉指的是:在开源项目中如果有人Fork了一个项目(一个项目分叉为两个项目),然后开发者沿着这个Fork向另外一个不同的方向独立发展这个项目。

那么区块链里为什么会产生分叉?

假设在区块增长到 2 号的时候,此时软件升级了,增加了之前版本中不能识别的一些表结构,会怎么样?

在传统的中心化软件体系中,由于数据存储都是集中的,版本管理也是集中的,如果是重大的升级,完全可以设置为若不更新到最新版就不能进行登录操作,从而确保用户使用的总是正确的版本。

然而区块链先天是去中心的使用方式,一旦有新的软件版本发布后,并每个人都会去升级到新版本,这就可能导致如下图所示的问题:在 2 号区块生成的时候发布了新的版本,且新的版本增加了之前版本不能识别的数据结构,此时部分用户升级了新版,部分用户还没有升级,这些新旧版本的软件仍然在各自不停的挖矿、验证、打包区块,一段时间过后就会变成这样:

这个就叫分叉。

由于种种原因比特币协议发生改变,会有两个不同版本的比特币协议在同时使用,他们对其他区块的接受规则不同会导致区块链长期分叉,这两个不同的链都会被不同的网络认为是有效的。
链分叉也导致网络分叉。

先来说说硬分叉

A permanent divergence in the block chain, commonly occurs when non-upgraded nodes can’t validate blocks created by upgraded nodes that follow newer consensus rules.

区块链的永久性分裂。当没有升级的节点不能验证已升级的节点基于新的共识协议所创建的区块时,硬分叉产生。

硬分叉不向前兼容:


这个定义该如何解读呢?看一下下图:


Hard Fork

硬分叉中,新的版本定义了新的规则,并且与旧版本不兼容。

当协议发布后,并非所有节点都会选择升级;那些没有升级新协议的区块发布的交易将只能由运行旧版本软件的区块认证通过,而因此升级了新协议的区块发布的交易只能由运行新版本软件的区块认证通过;由于规则不兼容,因此矿工们工作在各自的最长链条上。于是产生了两条基于不同规则的、永远不会合并的区块链。

顺便说一下历史上最大的硬分叉事件:TheDao被黑客攻击的事件。
2016年6月区块链最大ICO项目TheDao遭黑客攻击,导致300多万以太币资产被分离出TheDAO 资产池,当前相当于20亿美元。
这时候V神站出来说,这个事情,我知道了,要不我们直接来个软分叉,重新算账。从块高度1760000开始把任何与The DAO和child DAO相关的交易认做无效交易,不就解决了吗?
然而,还是有人提出反对。他们认为这违反了区块链的不可篡改性以及智能合约的契约精神,哪怕TheDAO的钱被偷走了,但是只要数据被写在了区块上,就是不可篡改的,因此他们并不配合V神的分叉,依然使用老版本。
就这样,软分叉最后生生搞成了一次硬分叉,V神的新ETH依然获得了大多数矿工和开发者的认可,但是还是有少数人坚持试用老节点,这时挖出来的币被称为ethereum classic,也就是以太经典。

这就是ETH和ETC。
而分叉币中另一著名的则是BTC和BCC; BCC支持大区块(将区块大小提升至8M),不包含SegWit功能。

再说说软分叉

A softfork is a change to the bitcoin protocol wherein only previously valid blocks/transactions are made invalid. Since old nodes will recognise the new blocks as valid, a softfork is backward-compatible.

软分叉是对比特币协议的一次修改,只有先前有效验证的区块/交易将不再合规;由于旧节点依然可以验证新区块,软分叉被认为是向后兼容的。

软分叉是向前兼容的:

所有被新版本认为是合法的区块也会被以前旧版本认为是合法的。旧版本会接受新版本创建的区块。新版本和旧版本是兼容的。

Soft Fork

软分叉也是对原有软件协议的修改。
与硬分叉不同的是,新的软件版本所定义的新规则与旧版本兼容,但比旧版本更严格。
当新版本发布时,升级了新软件版本的节点发布的区块可以被所有节点验证通过。而没有升级新版本的节点发布的区块只能在运行旧版本软件的节点上验证通过。
此时,同样会产生两个区块链条,这种情况称为软分叉。

当网络中的大多数节点选择部署新软件版本后(更精确的说法是大多数算力),新链条将产生更多的区块,工作在旧版本节点上的矿工们将会逐步升级软件并转移到新链条上来工作,这里有两方面原因。

  1. 由于新链条成为最长链条,并且新链条上的区块被旧版本节点上的矿工们认可,所以他们会迁移到最长链上来。
  2. 由于软分叉对于节点是无感知的,旧版本节点发布的新区块会被新版本节点“莫名其妙”的拒绝,这会敦促他们升级新软件版本。

最终,并不会像硬分叉一样产生两个不相干的区块链,而是会产生一些临时性的分支。当然,只有当大多数算力支持软分叉时才会使新规则生效。

总结来说

硬分叉,是当比特币协议规则发生改变,旧节点拒绝接受由新节点创造的区块的情况。违反规则的区块将被忽视,矿工会按照他们的规则集,在他们最后见证的区块之后创建区块。

软分叉,是当比特币协议规则发生改变,旧的节点并不会意识到规则是不同的,它们将遵循改变后的规则集,继续接受由新节点创造的区块。矿工们可能会在他们完全没有理解,或者验证过的区块上进行工作。

协议一致性

在区块链中,能够让区块链保证数据唯一性的前提是:所有矿工都遵从同样的机制。即如果所有矿工都使用同一套协议,则不会出现分叉。

但是会有另一种情况导致短暂的“共存”:
默认大家已经了解什么是挖矿了,在比特币中使用工作量证明,当有矿工第一个计算出所需的数字,就大喊一声“我的工作量证明成功了你们快来看呀”,这时经过验证之后所有的矿工都会把那一页抄写一份,贴在自己账本的最后一页,然后开始新的记账过程。

但是会存在极小的概率下,有两个矿工同时计算出来,这该怎么办?
由于网络的亲疏远近,不同的节点听到两个矿工喊“我解出来了” 是有先后顺序的,一般大家会把先看到的区块复制过来,然后在这个区块后面开始新的挖矿工作,于是就出现了下面这种情况:

这种情况就是短暂共存;要怎么解决呢?

在以工作量证明为共识的区块链中,从分叉的区块开始,由于不同的矿工跟随了不同的区块,理论来说从分叉开始的两条链算力是有区别的,因此区块的增长速度也是不同的,在一段时间之后,总有一条链的长度会超过另一条,当矿工发现全网有一条更长的链时,他会放弃当前的链而把全网最长的链复制过来,在这条链的基础上继续挖矿工作,于是全网永远是只有一条最长的链为主链,分叉出来被放弃掉的链就会消失了。

最终,只有一条链会被保留下来,成为真正有效的账本,其他都是无效的,所以整个区块链仍然是唯一的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341