什么是区块链分叉? 什么又是硬分叉、软分叉
由于区块链是一种去中心化的资料结构(Data Structure),每个节点分布位置不同、以及接收到同一个区块的时间点不同,所以常常导致每条复制的区块链副本(copy)」、不一定是实时(每分每秒)都是一致的。
为了解决这个问题,每个节点都会选择,延伸长度最长的链为最信任的帐本;也就是涵盖最多工作量证明的链。只要通过对链中的每个区块、所记录的工作量进行加总,节点就可以计算出,在过去创建该链时、所花费的全部工作量为多少。
-最长的或最大累计工作的链(greatest cumulative work chain)
只要所有节点选择含有最大累积工作量证明的链,那么整个比特币网路最终就会达到一个「一致」的状态。
分叉(Fork)常常可以视为一种「暂时的非一致现象」,而这情况不会维持太久、最终会被后续愈多区块的加入而解决,渐进到相似与匀称。
※Hint: 区块链的分叉其实是碍于「网路中传递资讯的延迟」所导致的; 网速传输延迟造成区块不同步的影响,其实无时无刻都在发生。
区块链分叉 — Blokchain Forks
举个例子,当每个节点所持有的副本不同、依旧会继续进行区块的打包。
每个节点都只会以"自己手中收到区块的顺序"为排列的依据;每个节点从邻居接收区块时、同时会更新自己手中的区块链帐本,选择累积最大工作量的链。
从下图开始,假设网路从一个统一的区块链视角开始。
一开始:%20一致性的区块链网路接下来,当相异的节点、在相距的时间微乎其微下,同时算出了下一个区块的答案,链的分叉就会发生了。两个矿工节点会向周遭传播出去自己运算成功的消息、并且散播出去。
可以预料的结果是,全网路中的节点、会收到两个不同的子区块(连接同样的父区块),这时节点们会选择将「这两个连接同一个父母、却不同内容的子区块」(可以视为挛生兄弟)保留下来。
这时比特币网路中的节点、同时保留两者区块之后「继续等待」;等待下一个区块的诞生与广播(也许是在白色三角、也许在橘色三角后面),便会出现最长的链与运算最长的链。
譬如下图所示,是图片分布中的中间节点的白色三角形、算出了第三个区块。
整个流程简略形容大概是:
如果你将节点广播区块资讯出去,这一整个过程有点类似在水池里面滴颜料进去。
假如池子够大、你在两侧滴入不同的颜色时,颜色会朝中蔓延过去。
最终池子混和在一起,重叠的区域会先在池子中央出现,道理是差不多的。
小记区块链分叉是一种网路延迟所产生的问题;区块有可能在不同时间到达不同节点。这也是为何节点们「总是选择那些最长的链去继续维护」,因为他们可以相信与确保,这会是让遵守共识规则的人,达到一致性的方法;是种可量化的目标与共识。
就好比你跟你妈说话有代沟,她觉得你念书不够努力、但你想要买游戏机。达到共识的唯一方法除了隔壁邻居赞扬你以外,便是跟你妈说你下次考试进前十名就买一部游戏机。%20(前十名=可量化的共识)
这些短时间的分叉、收敛,重新达到一致,在比特币网路中时常在发生,但还有另一种情形是「共识规则」的改变与分歧。
这种共识机制的改变,会导致矿工节点、或者一般节点,收到采用不同共识规则的两个方案、并且独立发展的更新消息。
这种更新软体版本的分叉我们一般会分为硬分叉与软分叉。
硬分叉
硬分叉往往发生在共识规则的更新,会导致旧有的那些”尚未更新”的节点,不能参与在新的共识机制里面;而这些没有更新的链,会被保留在单独原先的链上、从此两条链就分道扬镳,互不干预彼此的验证与广播区块。
分别硬分叉的简单方式是节点版本间、是前后不兼容的。
譬如下图,在区块高度4出现了我们前面提到的,”因为网路延迟”所出现的短暂自然分叉。只要等待区块5的出现,区块链达到重新收敛、情况就解决了。
而硬分叉假如是在【区块高度6】时执行,彼此改变共识规则,可能是加密算法的改变、可能是区块限制大小的改变….则彼此会因为执行的节点软件版本不同、从此分割成两条不同的主链。
此时,A链上的矿工、无法处理B链的区块打包
彼此看对方区块都不符合规则,所以会视为无效
软分叉
软分叉比较像是大家在Github提交代表时所碰到的情形,软分叉便是共识规则的改变也能够让未修改的客户端仍然按照先前的规则对待交易或者区块,那么就可以在不进行分叉的情况下实现共识修改。
因为为了向前兼容、根据新规则创建的交易和区块,也必须在旧规则下有效,所以共识规则往往是增加某些”约束”而已。
共识规则的改变还依旧相容,有点像是搭公车票价规则的改变。
举例来说,如果明天地铁设置一个新规则「明天无论如何,只有穿西装的人能搭九号线」
那这样自然从明天开始、就只有符合穿西装的人,可以搭九号线,其他人上不了。
但你没穿西装,你还是可以继续搭其他线的地铁。
同理,没有更新的版本的节点只是不能参与新的共识机制,但依旧可以兼容某些情形。
最后
对于分叉的解释,其实情形复杂得多,因为过程会考量各式的人员参与,矿工、钱包、不同功能的节点,甚至矿工手续费的变动对使用者的影响。
毕竟,手续费暴涨、或是币价剧烈波动都会让使用者对项目本身产生质疑。更别说难度的锐减,会让矿工难以维持收益并且选择放弃继续待在这条链上、因为下次的难度调整依旧要2016个区块被挖掘出来之后….难度调整与矿工利益的主题,又是个巨大的议题了。
以下是软分叉和硬分叉的故事视频