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