「比特幣101」專欄資料教學

「比特幣101」(三十一) – 硬分叉與軟分叉

比特幣,叉子

編程術語中的“fork”是一種開源代碼修改。通常,分叉代碼與原始代碼類似,但經過重要修改,兩個“分支”終可順利共存。但當使用加密算法,它通常用於更改基本事項,或創建具有與原始類似(但不相等)特徵的新資產。

並非所有的”叉子”都是刻意安排的。在使用廣泛分佈的開源代碼庫,當並非所有節點都複製相同的信息時,叉子可能會意外發生,產生錯誤。然而,通常這些叉子也會被識別並解決,並且大多數加密貨幣叉子是由於對嵌入特徵產生分歧。

要認識分叉的第一件事是他們有一個“共享的歷史”。在拆分之前,每個鏈(舊的和新的)上的交易記錄是相同的。

硬分叉

編程分支有兩種主要類型:硬和軟。

硬分叉是對舊版本無效的協議的更改。如果舊版本繼續運行,它們最終將使用與新版本不同的協議和不同的數據。這可能導致嚴重的混淆和發生錯誤的可能。

使用比特幣,需要硬分叉來更改定義參數,例如區塊大小,需要解決的加密拼圖的難度,對可添加的其他信息的限制等。對這些規則中的任何一個的更改,都將會導致區塊被新協議接受但被舊版本拒絕的情況發生,甚至可能引致資金損失。

例如,如果區塊大小限制從1MB增加到4MB,則運行新版本的節點將接受2MB區塊,但運行舊版本的節點拒絕該區塊。

假設這個2MB塊區由更新的節點驗證並添加到區塊鏈中。如果下一個塊由運行舊版本協議的節點驗證怎麼辦?它會嘗試將其區塊添加到區塊鏈中,但它會檢測到最新的區塊并令其無效。因此,它將忽略該區塊並將其新驗證附加到前一個區塊。突然間,您有兩個區塊鏈,一個包含較舊版本塊和較新版本塊,另一個版塊僅包含較舊版本塊。哪個鏈增長更快將取決於哪些節點率先驗證的下一個區塊,並且最終可能會有額外的分裂。兩條(或更多條)鏈無限地平行生長是可能發生的。

這也是有風險的,因為在新區塊中花費的比特幣可能會再次花在舊區塊上(因為商家,錢包和運行前面代碼的用戶不會檢測到他們認為無效的新代碼的支出)。

唯一的解決方案是將一個分支放棄而支持另一個分支,這涉及一些礦工問題(交易本身不會丟失,他們只是被重新分配)。或者,所有節點都需要同時切換到較新版本,這在分散且廣泛傳播的系統中很難實現。

軟分叉

軟分叉仍然適用於舊版本。

例如,如果以收緊規則的方式更改協議,實現外觀修改或添加不以任何方式影響結構的功能,則舊版本節點將接受新版本區塊。不過,較新的“更嚴格”版本將拒絕舊版本區塊。

在比特幣中,舊版本的礦工會意識到他們的區塊被拒絕了,並且會進行升級。隨著越來越多的礦工升級,主要是新區塊的鏈條變得更長,這將進一步孤立舊版本區塊,導致更多礦工升級,系統進行自我糾正。由於舊版本和升級節點都接受新版區塊,因此新版區塊最終會獲勝。

例如,社區決定將區塊大小從目前的1MB限制減少到0.5MB。新版本節點將拒絕1MB塊,並將構建在前一個區塊上(如果它是使用更新版本的代碼進行挖掘),這將導致出現臨時分叉。

而軟分叉已經發生了好幾次。最初,比特幣沒有區塊大小限制。因為新規則比舊規則“更嚴格”,所以通過軟分叉引入1MB的限制。還通過軟分叉成功添加了pay-to-script-hash函數,該函數在不改變結構的情況下增強了代碼。這種類型的修正案通常只需要大多數礦工進行升級,這使得它更可行,破壞性更小。


上一篇︰「比特幣101」(三十) – 什麼是比特幣現金?

下一篇︰「比特幣101」(三十二) – Litecoin和比特幣有什麼區別?

BTC Shop Hong Kong

廣告查詢 ADVERTISE
Back to top button