什么是分叉?樹(shù)木生長(zhǎng)過(guò)程中會(huì)在主干周?chē)鷻M生一根根枝條,多數(shù)枝條會(huì)比較細(xì)小,但有些枝條異常粗壯可以將主干分為幾根枝干,這便是樹(shù)木的分
什么是分叉?
樹(shù)木生長(zhǎng)過(guò)程中會(huì)在主干周?chē)鷻M生一根根枝條,多數(shù)枝條會(huì)比較細(xì)小,但有些枝條異常粗壯可以將主干分為幾根枝干,這便是樹(shù)木的分叉。區(qū)塊鏈的分叉和樹(shù)木也有些類(lèi)似。區(qū)塊鏈?zhǔn)怯梢粋€(gè)個(gè)區(qū)塊首尾相連構(gòu)成的一條鏈條,就像人的脊椎一樣,在整個(gè)鏈條延伸過(guò)程中會(huì)產(chǎn)生一些短小的支鏈,也會(huì)產(chǎn)生一些較長(zhǎng)的支鏈將原有的主鏈分為幾條支鏈,這便是區(qū)塊鏈的分叉。
為什么會(huì)分叉?
樹(shù)木分叉的原因我們都容易理解,那么區(qū)塊鏈為什么會(huì)分叉?要了解區(qū)塊鏈分叉的原因,首先要從礦工挖礦講起,在 什么是btc——「幣全101」之5 中已經(jīng)介紹過(guò)每一個(gè)礦工(節(jié)點(diǎn))在“挖礦”成功后會(huì)對(duì)會(huì)對(duì)全網(wǎng)進(jìn)行廣播,驗(yàn)證成功后將被作為新的區(qū)塊接在區(qū)塊鏈末端。
互聯(lián)網(wǎng)世界信息的傳播同樣需要一些時(shí)間,同時(shí)對(duì)于“挖礦”這項(xiàng)工作也存在著競(jìng)爭(zhēng),基于此,假設(shè)有一條區(qū)塊鏈長(zhǎng)m,最后一塊區(qū)塊為b在某一時(shí)刻,礦工Karan先挖出了區(qū)塊Ca,并立即向全網(wǎng)進(jìn)行廣播。恰巧此時(shí)礦工Dexter挖出了區(qū)塊Cb。但他離Karan比較遠(yuǎn)還未收到區(qū)塊ca的信息,所以他立即開(kāi)始對(duì)全網(wǎng)廣播Cb。
于是,這時(shí)全網(wǎng)便有兩個(gè)新區(qū)塊在傳播,這兩個(gè)區(qū)塊都能被成功驗(yàn)證且都指向前置區(qū)塊b。由于信息傳播需要一定的時(shí)間,不同節(jié)點(diǎn)會(huì)先后收到不同的區(qū)塊信息,所以他們會(huì)以不同的區(qū)塊(Ca或Cb)作為前置區(qū)塊來(lái)維護(hù)新的鏈條,自此產(chǎn)生了chain a與chain b兩條分叉,兩條分叉在m+1個(gè)區(qū)塊之前都共用同一根鏈條。這便是區(qū)塊鏈的分叉。
但是分叉后又會(huì)產(chǎn)生一個(gè)新的問(wèn)題,難道兩條鏈都是主鏈嗎?這就要看各個(gè)節(jié)點(diǎn)對(duì)不同鏈條的認(rèn)可度,一旦多數(shù)節(jié)點(diǎn)都選擇chainb這條鏈條,那么chain b 的長(zhǎng)度便會(huì)遠(yuǎn)超chain a,chain a便會(huì)被舍棄,不再有意義。Chain a上面的區(qū)塊也將成為孤塊。
分叉的種類(lèi)?
上述的分叉是基于區(qū)塊鏈的分布式計(jì)算技術(shù)產(chǎn)生的,無(wú)法避免,因而往往被稱(chēng)為自然分叉。
相對(duì)于自然分叉,有一些分叉則是由人為干預(yù)產(chǎn)生的。隨著區(qū)塊鏈技術(shù)的發(fā)展,各種數(shù)字通證都需要升級(jí)。但是這些數(shù)字通證的設(shè)計(jì)導(dǎo)致其協(xié)議或者規(guī)范的升級(jí)難以實(shí)現(xiàn),因?yàn)橄到y(tǒng)上的不同參與者對(duì)于如何升級(jí)有不同的看法,協(xié)調(diào)起來(lái)十分困難。這時(shí)候,他們就會(huì)被分為新舊版本兩個(gè)派別,分叉便會(huì)產(chǎn)生。這種分叉,可以稱(chēng)為升級(jí)分叉。
按照區(qū)塊鏈對(duì)新規(guī)則的兼容情況,升級(jí)分叉又可以分為硬分叉與軟分叉。
硬分叉升級(jí)有一個(gè)特點(diǎn),即舊的區(qū)塊按照新規(guī)范仍然能被驗(yàn)證通過(guò),但新區(qū)塊不能被舊的規(guī)范所認(rèn)可。所以想要通過(guò)硬分叉進(jìn)行升級(jí)就要獲取大部分節(jié)點(diǎn)的同意,否則他們將會(huì)以舊的規(guī)范繼續(xù)維護(hù)鏈條,新規(guī)范這條支鏈便會(huì)被舍去。一旦大部分節(jié)點(diǎn)接受了新的規(guī)范,舊規(guī)范后續(xù)的支鏈就會(huì)被舍去,未接受的節(jié)點(diǎn)則會(huì)被迫進(jìn)行規(guī)范升級(jí)。判斷節(jié)點(diǎn)是否同意的標(biāo)準(zhǔn)是看大部分新區(qū)塊是按舊規(guī)則產(chǎn)生的還是按新規(guī)則產(chǎn)生的。
軟分叉不是真正意義上的分叉,而是一種雙向兼容的規(guī)范設(shè)計(jì)。軟分叉要求舊的區(qū)塊能夠被升級(jí)的節(jié)點(diǎn)理解,又要求未升級(jí)的節(jié)點(diǎn)能夠理解新區(qū)塊。這在某種意義上來(lái)說(shuō)是一種細(xì)微的調(diào)整,與硬分叉的改動(dòng)幅度相比微乎其微。
通俗點(diǎn)講,硬分叉與軟分叉的區(qū)別就像一個(gè)修理工去修理交通工具。他學(xué)的是修汽車(chē)的方法,現(xiàn)在去修理電動(dòng)自行車(chē),對(duì)他來(lái)說(shuō)并不會(huì)有什么問(wèn)題。而如果他學(xué)的是如何修電動(dòng)自行車(chē),現(xiàn)在讓他去修理電動(dòng)三輪車(chē)沒(méi)問(wèn)題,但是修理汽車(chē)便不行了,同樣他會(huì)修理電動(dòng)三輪車(chē)便也可以修理電動(dòng)自行車(chē)。從可以修自行車(chē)到可以修汽車(chē)便是硬分叉,后者技術(shù)兼容了前者的技術(shù)。而從修自行車(chē)到修理三輪車(chē)便可看作軟分叉,前后技術(shù)雖有細(xì)微差別但基本互通。