時間:2022-02-26|瀏覽:474
區(qū)塊鏈是一個存在于每個網絡參與者(礦工)電腦中的大型分散系統。
換句話說,一旦區(qū)塊鏈需要更新版本或修改系統,所有網絡參與都必須下載并運行新版本的區(qū)塊鏈客戶端,以完成版本更新。
然而,比特幣 用比安交易所購買并祝愿策略升級分布式共識系統的困難在于,網絡參與者很難同時完成更新。只要參與者不立即更新客戶端,網絡上就會有不同版本的區(qū)塊鏈。換句話說,區(qū)塊鏈就會分叉。
區(qū)塊鏈更新產生的共識問題
因此,區(qū)塊鏈更新時,必須協調所有系統參與者,否則可能會影響區(qū)塊鏈系統的安全。
升級分布式共識系統的另一個困難在于,所有網絡參與者必須達成共識。
如果只有一部分礦工同意更新,另一部分舊礦工不同意更新,礦工之間就會有共識。
區(qū)塊鏈更新中的共識問題大致有四種可能性:
1)新礦工接受舊礦工挖出的區(qū)塊
2)新礦工不接受舊礦工挖出的區(qū)塊
3)舊礦工接受新礦工挖出的塊
4)舊礦工不接受新礦工挖出的區(qū)塊
硬分叉
新礦工產生的塊可與舊礦工產生的塊兼容,而舊礦工產生的塊不能與新礦工產生的塊兼容。
硬分叉和軟分叉-硬分叉
當新版本在系統中更新,與前版本不兼容,舊礦工無法接受新礦工挖出的全部或部分塊時,區(qū)塊鏈就會出現硬分叉。
以比特幣為例,如果協議的重要參數發(fā)生變化,如塊的大小、采礦主題的難度或塊的速度,這些規(guī)則中的任何變化都可能導致新塊不被之前版本的共識規(guī)則所接受。
例如,如果區(qū)塊容量限制在更新后從1開始MB增加到4MB,新版本的礦工將接受4MB但是運行舊版本的礦工會拒絕這個塊。
1
社區(qū)達成共識
硬分叉和軟分叉-達成共識
在新礦工占據大部分計算能力的情況下,舊礦工有兩種選擇。第一種是接受更新和升級客戶軟件。這種情況意味著社區(qū)對版本更新達成共識,區(qū)塊鏈可以安全順利地完成更新。
2
社區(qū)無法達成共識
硬分叉和軟分叉-無法達成共識
如果就礦工堅持維護舊版本的系統,那區(qū)塊鏈將因此分裂為兩條鏈。(在這個情況下,新礦工與舊礦工已經無法達成共識了,即便接受更新的新礦工算力>51%,舊礦工依然不愿意接受新版本,因此不適用“最長鏈共識”。)
若大部分的人都選擇更新,那新版本的算力勢必比較強,剩下的就看舊版本的算力夠不夠支持維護一條鏈的安全,倘若還是有一定數量的礦工堅持維護舊版本,那區(qū)塊鏈就會分裂成兩條鏈。
當區(qū)塊鏈分裂為兩條鏈,且在有各自的礦工維護各自的鏈的情況下,就會產生兩種不一樣的幣(大部分硬分叉,例如以太坊的君士坦丁堡硬分叉,礦工都會愿意接受新版本的區(qū)塊鏈,礦工之間沒有共識問題,就不會有分裂的情況),這就是所謂的“分叉幣”。
例如比特幣社群在2017年的擴容方案理念產生分歧,無法達成共識導致硬分叉,比特幣現金 (Bitcoin Cash) 因此誕生。
對用戶而言,這種社群分裂的硬分叉,最有感的就是可以領分叉幣,舉個例子,分叉前你在錢包有 “1BTC”,分叉后你將擁有 “1BTC+1BCH ”。
在沒有得到所有生態(tài)中的參與者同意的情況下,硬分叉有很大的風險,很容易導致該區(qū)塊鏈的生態(tài)系分裂、算力分裂以及陷入重放攻擊的危險中。
所以這是一種極具爭議和危險的區(qū)塊鏈升級技術,因此區(qū)塊鏈社群對于硬分叉非常謹慎。
軟分叉
在新礦工算力>51%時,新礦工產生的區(qū)塊不能兼容舊礦工產出的區(qū)塊,舊礦工可以兼容新礦工產出的區(qū)塊。
硬分叉與軟分叉-軟分叉
如果以“更嚴格的規(guī)則”進行更新,實現協議修改或添加不影響結構的功能時,則舊礦工將接受新礦工所產的區(qū)塊;
相反的,由于新礦工所認定的協議較嚴格,新礦工將會拒絕舊礦工所產的區(qū)塊,此時舊礦工在正常情況下,會選擇升級,否則其所產的區(qū)塊會無法被新礦工接受,無法獲得挖礦獎勵。
遇到例如意識形態(tài)或開發(fā)觀點不同等特殊情況時,舊礦工仍然有可能會選擇不接受新礦工產出的區(qū)塊,繼續(xù)維護舊版本的鏈,進而導致硬分叉甚至分裂。
以比特幣為例,理想的情況是,舊礦工會意識到他們的區(qū)塊被拒絕了,便會選擇升級。
隨著越來越多的礦工升級,這將進一步孤立舊版本的區(qū)塊,在利益的驅使下,會誘使更多舊礦工升級,于是,系統便能以較溫和的方式完成更新。
例如,社區(qū)決定將塊大小從目前的1MB限制減少到0.5MB。
占多數的新礦工會拒絕舊礦工產出的1MB區(qū)塊,并選擇其他礦工產出的符合條件的區(qū)塊。
軟分叉的更新時常發(fā)生。
最初比特幣沒有區(qū)塊大小的限制,是在之后透過軟分叉引入1MB的限制,還通過軟分叉成功添加了pay-to-script-hash函數,該函數在不改變結構的情況下增強了代碼。
這種類型的更新通常只需要大多數礦工進行升級,其他礦工便會隨之升級,這使得它更可行,破壞性更小。
鏈金研究員總結
軟分叉與硬分叉相比,軟分叉的過程中,在正常情況下,只會存在一條鏈,沒有分成兩條鏈的風險,且軟分叉不要求所有礦工同一時間升級,而是以較溫和的方式逐步升級,不影響軟分叉過程中的系統穩(wěn)定性和有效性。
然而兩者并沒有孰優(yōu)孰劣之分,而是適用性的問題,假如進行大規(guī)模的區(qū)塊鏈更新,勢必會牽涉到不被舊協議接受的規(guī)則。
即便我們都知道軟分叉比硬分叉來的安全,還是只能選擇以硬分叉進行區(qū)塊鏈升級。
不過也不需要把硬分叉想得太過可怕,因為只要全網礦工對升級有相同的共識,就不會分叉成兩條區(qū)塊鏈,影響到安全性。
總歸一句,對區(qū)塊鏈升級而言,重要的不是硬分叉還是軟分叉,而是礦工與礦工之間的共識是否一致,這部分稱之為“區(qū)塊鏈治理”。
若共識處理不好則容易導致革命,這也是為什么區(qū)塊鏈的升級相較傳統軟體還要來的困難。