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