什么是分叉區(qū)塊鏈又該如何分叉
區(qū)塊鏈為何及如何分裂?
分叉(fork),或是分叉的威脅,似乎是加密貨幣領(lǐng)域的公認(rèn)特征。但分叉是什么?為什么分叉會有這么大的影響?硬分叉與軟分叉的差異在哪?
“分叉”從編程術(shù)語來講,是一個(gè)開源代碼的修改。通常,分叉代碼與原始代碼類似,但經(jīng)過重要的修改,兩個(gè)“叉”(prongs)和平共存。有時(shí),分叉被用來測試過程,但在加密貨幣里,它通常被用來實(shí)行基本面的更改,或使用與原有資產(chǎn)相似的(但不相等的)特征來創(chuàng)造新資產(chǎn)。
并非所有分叉的發(fā)生都是刻意的。使用廣泛分散的開源代碼庫(open-source codebase),一旦當(dāng)不是所有節(jié)點(diǎn)都能復(fù)制相同信息時(shí),分叉有可能意外地產(chǎn)生。然而,通常這些分叉都能被識別并解決,主要的加密貨幣分叉都源于對植入哪些特性所產(chǎn)生的意見分歧。
記住一點(diǎn),這些分叉有著“共享的歷史”。每個(gè)鏈(舊的或新的)上在分叉之前的交易記錄都是完全相同的。
硬分叉
編程分叉主要有兩種類型:硬分叉與軟分叉。
硬分叉是對舊版本的無效協(xié)議進(jìn)行更改。假如舊版本持續(xù)運(yùn)行,它們最終將使用與新版本不同的協(xié)議與數(shù)據(jù)。這會導(dǎo)致嚴(yán)重的混淆與可能的錯(cuò)誤。
在比特幣里,需要硬分叉來更改像是區(qū)塊大小、解決加密難題的難度、新增額外信息之限制等定義參數(shù)。任何對這些規(guī)則的更改,都可能造成區(qū)塊被新協(xié)議接受但被舊版本拒絕,并可能導(dǎo)致嚴(yán)重問題──甚至有可能造成資金的損失。
舉例來說,假如區(qū)塊的大小限制由 1 MB 增加到 4 MB,一個(gè) 2 MB 大小的區(qū)塊將能被運(yùn)行新版本的節(jié)點(diǎn)所接受,但會被運(yùn)行舊版本的節(jié)點(diǎn)所拒絕。
也就是說,2 MB 大小的區(qū)塊通過某一更新后節(jié)點(diǎn)的驗(yàn)證并新增到區(qū)塊鏈中。假若下一個(gè)區(qū)塊是需要被運(yùn)行舊版協(xié)議的節(jié)點(diǎn)所驗(yàn)證的呢?該節(jié)點(diǎn)會試圖新增這個(gè)區(qū)塊,但它會偵測到最新的這個(gè)區(qū)塊并沒有通過驗(yàn)證。因此,它將忽視該區(qū)塊,并將新驗(yàn)證結(jié)果附加到前面一區(qū)塊。突然間,你有了兩個(gè)區(qū)塊鏈,其中一條同時(shí)含有舊與新版本協(xié)議的區(qū)塊,另一條僅包含舊版本協(xié)議的區(qū)塊。哪條鏈的增長較快取決于哪些節(jié)點(diǎn)可以獲得下一區(qū)塊的驗(yàn)證,并且最終可能還會有額外的分裂。兩條(或更多的)鏈?zhǔn)强梢詿o限平行增長的。
這是一個(gè)硬分叉,它可能是混亂的,也可能充滿著風(fēng)險(xiǎn),因?yàn)樵谛聟^(qū)塊中花費(fèi)的比特幣可能會再次花費(fèi)在舊區(qū)塊里(因?yàn)檫\(yùn)行舊版本協(xié)議的商戶、錢包與用戶無法偵測到無效的新代碼支出)。
唯一的解決方法是放棄其中一個(gè)分支轉(zhuǎn)而支持某一分支,這涉及一些礦工的損失(交易本身是不會丟失的,它們只會被重新分配)?;蛘?,所有節(jié)點(diǎn)都需要在同時(shí)切換到較新的版本,而這在分散的、廣泛傳播的系統(tǒng)內(nèi)是不容易達(dá)到的。
或者,比特幣會分裂,這已經(jīng)發(fā)生了。(哈啰,比特幣現(xiàn)金)
軟分叉
軟分叉仍然可以與舊版本一同運(yùn)行。
舉例來說,假如以限縮規(guī)則的方法更改協(xié)議,實(shí)現(xiàn)表層修改或添加不影響結(jié)構(gòu)的功能,則舊版本的區(qū)塊將能接受新版本區(qū)塊。但反過來則行不通:新的、較為嚴(yán)格的版本將拒絕舊版本的區(qū)塊。
在區(qū)塊鏈中,理想狀態(tài)下,礦工發(fā)現(xiàn)它們的區(qū)塊被拒絕,就會自行升級。隨著越來越多礦工完成升級動作后,擁有主要新區(qū)塊協(xié)議的鏈會變得越來越長,會更加孤立舊版本的區(qū)塊,這又能讓更多礦工進(jìn)行升級動作,并且系統(tǒng)會自動糾正。由于舊的和更新后的節(jié)點(diǎn)都接受新區(qū)塊,因此新版本的區(qū)塊協(xié)議最終將獲勝。
舉例來說,當(dāng)社區(qū)決定將區(qū)塊大小從現(xiàn)有的 1 MB 限制縮限到 0.5 MB。運(yùn)行新版本區(qū)塊協(xié)議的節(jié)點(diǎn)將拒絕 1 MB 大小的區(qū)塊,并且會建構(gòu)在前一個(gè)區(qū)塊上(如果它是使用新版本的代碼進(jìn)行挖礦),可能會導(dǎo)致暫時(shí)的分叉。
這是一個(gè)軟分叉,并且已經(jīng)發(fā)生過好多次。最初,比特幣并沒有區(qū)塊小的限制,是通過軟分叉將 1 MB 的大小限制引入的,因?yàn)樾乱?guī)則比舊規(guī)則更為“嚴(yán)格”。而可以在不改變結(jié)構(gòu)的情況下強(qiáng)化代碼的 pay - to - script - hash 功能,也是通過軟分叉成功增加的。這類型的修正通常僅需要大部分的礦工進(jìn)行升級,便可以讓該分叉變得更可行,也降低了破壞性。
軟分叉并不會帶來困擾硬分叉的雙花風(fēng)險(xiǎn)(double-spend risk),因?yàn)檫\(yùn)行舊節(jié)點(diǎn)的商家與用戶將能同時(shí)讀取新舊版本的區(qū)塊協(xié)議。





