目錄
您在使用智慧手機上的電子銀行應用程式時,一定遇到過系統提示您進行更新,這個時候您通常要考慮之後並同意更新,系統才能進行升級。或許您的手機也會在不通知您的前提下,自動進行更新。畢竟,軟體升級是一個必要的過程,如果您未安裝該軟體的最新版本,則可能無法繼續使用相關的服務。
而在
開源的
加密貨幣體系中,情況就大不相同。您無需閱讀支撐
比特幣執行的每一行程式碼,但是如果能這樣做也是十分有幫助的。因為您會發現,在去中心化的環境中沒有管理的層次結構,也沒有銀行可以隨便的向您推送更新和內容修改。所以,在區塊鏈網路中實現某項新功能的更新是一項挑戰。
在本文中,我們將探討如何在沒有中心化授權管理的前提下,升級加密貨幣網路。因此,隨之出現了兩種不同的機制:即硬分叉和軟分叉。
要了解分叉的工作原理,首先必須瞭解參與區塊鏈網路決策過程(或
治理)的參與者。
在比特幣中,您可以大致將參與者劃分為三個不同的子集:開發人員、礦工和
完整節點使用者。他們實際上是參與網路並做出貢獻的各方節點。而像廣泛使用的
輕節點(例如,手機、膝上型電腦等錢包),他們對於網路來說,並不是真正的“參與者”。
開發人員
開發人員負責建立和更新程式碼。對於您所熟知的傳統代幣,任何人都可以為該流程貢獻程式碼。該程式碼是公開可用的,因此他們可以將更改提交給其他開發人員進行稽核。
礦工
礦工是保護網路安全的參與者。他們執行加密貨幣的程式碼,並投入計算資源向區塊鏈新增新區塊。例如,在比特幣網路中,他們通過
工作量證明來實現這一點。礦工會通過集體獎勵的形獲取相應的
挖礦收益。
完整節點使用者
完整節點是加密貨幣網路的骨幹。他們負責驗證、傳送和接收
區塊和交易,並維護
區塊鏈的資料副本。
在這幾類不同的身份中,您可能會發現存在重疊。例如,您可以同時成為開發人員和完整節點,或者成為礦工和完整節點。你也可以同時擁有以上全部三個身份。但實際上,我們認為許多加密貨幣使用者並沒有擔任這些角色。相反,他們選擇使用輕型節點或集中式服務。
通過上面的介紹,您現在對開發人員和礦工在網路中的職責也有了深入瞭解。開發人員負責建立程式碼,如果沒有程式碼,您將無法執行相關軟體,也沒有人可以修復bug以及升級新功能。礦工負責確保網路安全,如果沒有良性的
挖礦競爭,區塊鏈可能會被劫持,或者會陷入停頓。
但是,如果開發人員和礦工試圖通過暴力方式使網路按照他們的意願執行,那麼就會造成一定不良影響。對大多數使用者來說,真正的控制權都集中在完整節點上。他們能夠維持網路的正常執行,支援使用者選擇他們想要執行的軟體。
開發人員不會破門而入闖到您家裡,拿著槍威脅您下載
比特幣的核心二進位制檔案。如果礦工採取了強硬的態度,拿出一副順我者昌逆我者亡的態度,強迫客戶選擇不必要的更改,那麼,使用者大多可能不會買賬。
實際上礦工和開發人員都不是強大的霸主,而是服務提供商。如果使用者決定不再使用網路,那麼代幣將失去價值。
代幣價值的損失將直接影響到礦工(以美元計價時,他們的報酬價值較低)。同樣,對於開發人員而言,他們也只能被使用者所忽略。
您會發現,這些軟體都不是專有的。您可以進行任何想要的修改,而且,如果有其他人也執行您修改後的軟體,你們之間是可以進行互動的。在這種情況下,您實際上就是通過分叉該軟體的方式,建立了一個新的網路。
軟分叉是通過複製和修改軟體程式碼的方式實現。而原來的專案繼續存在,只是單獨產生了一個新的專案,新的專案沿著不同的方向發展。我們假設您最喜歡的加密貨幣內容網站的團隊對如何發展存在重大分歧。團隊的一部分可能會將站點複製到其他領域中。但是,我們展望未來,他們也將會發布與原來內容所不同的文章。
這些專案都是建立在一個共同的基礎上,擁有相同的歷史資料。就像是一條道路後來分成兩條一樣,它們的道路從現在開始發生了分歧。
請注意,此類事件在
開源專案中時長髮生,並且在
比特幣或
以太坊出現之前就已經存在了很長時間。但是,只有在區塊鏈領域裡,存在硬分叉和軟分叉之間的區別。下面我們將展開詳細的討論。
儘管名稱相似,並且具有相同的用途,但硬分叉和軟分叉卻有很大差別。讓我們詳細介紹他們。
什麼是硬分叉?
硬分叉是一種不支援向後相容的軟體升級方式。通常,這些情況發生在節點以與舊節點的規則衝突的方式新增新規則時。新節點只能與執行新版本的軟體節點進行互動。結果,區塊鏈發生了分裂,生產出兩個單獨的網路:一個按照舊規則執行,一個則按照新規則執行。
節點在升級後變為藍色。之前的黃色節點拒絕藍色節點的連入,而藍色的節點之間可以相互連線。
因此,現在有兩個網路並行執行。他們將繼續產生
區塊和交易,但不再在同一區塊鏈上工作。在區塊鏈網路達到分叉區塊之前,所有節點都具有相同的
區塊鏈(並且歷史記錄仍然存在),但是這之後它們將具有不同的區塊和交易。
由於存在相同的歷史記錄,因此如果您在分叉之前持有代幣,那麼您將在這兩個網路上同時獲得代幣。假設在600,000區塊高度發生分叉時,您手裡有5 BTC。您可以選擇在區塊高度到達600,001時,在原始區塊鏈上將這5 BTC花費掉,但是在新產生的區塊鏈上並不會記錄這筆在600,001區塊高度的消費。假設加密方式沒有發生變化,那麼在新的分叉網路上您的
私鑰中仍然會存在這5個代幣。
硬分叉的另一個案例是2017年發生的分叉,當時比特幣分成了兩個獨立的鏈,原始的比特幣(BTC)和新的比特幣現金(BCH)。在社群對區塊容量的
縮放展開了諸多爭論之後,出現了分叉。比特幣現金(BCH)支持者希望增加
區塊大小,而比特幣(BTC)支持者則反對這一改變。
區塊大小的增加需要修改規則。這是在
SegWit軟分叉之前(稍後會詳細介紹)完成的,因此節點將只接受小於1MB的區塊。如果您建立了一個2MB的區塊,其他節點會拒絕進行驗證。
只有已升級軟體並支援區塊大小超過1MB的節點才能接受這些區塊。當然,這會使它們和之前的版本不相容,因此只有具有相同協議的節點才能互相進行通訊。
什麼是軟分叉
軟分叉是支援向後相容的軟體升級方式,升級後的節點仍可以與未升級的節點進行互動。軟分叉的升級方式通常是向程式中新添加了一條規則,該規則也不會與之前的舊規則發生衝突。
例如,可以通過軟分叉來實現區塊大小的下調。讓我們再次以比特幣為例,說明這一點:比特幣網路中對區塊大小的上限是有限制的,但對區塊大小的下限是沒有限制的。如果您只想接受特定大小以下的區塊,則只需拒絕大於該數值的區塊即可。
但是,這樣做並不會讓您與網路自動斷開連線。您仍然可以與未執行這些規則的節點進行互動,但是會過濾掉它們傳遞給您的一些資訊。
前面提到的
隔離見證(SegWit)就是一個很充分的案例,它是在比特幣和比特幣現金拆分之後不久發生的。隔離見證是一種更改了區塊和事務格式的更新,而且它的設計方式較為巧妙。舊節點仍然可以驗證區塊和交易(格式不違反規則的),但對於某些欄位來說,他們無法讀取。只有當節點升級到較新的版本後,某些欄位才可讀,才能夠正確解析其他資料。
甚至在隔離見證啟用後的兩年多時間裡,也沒有完成所有節點的升級。這樣做也是有很多好處的,比如網路不會發生中斷的情況、升級也沒有那麼緊迫。
從本質上說,這兩種型別的分叉作用各不相同。具有爭議的硬分叉升級,會將社群一分為二,但是有計劃的硬分叉升級可以讓所有參與者自由的選擇是否修改程式。
軟分叉則是較為平穩的選擇。一般來說,由於新的升級不會與之前的規則發生衝突,因此您只能實施某些限制。也就是說,如果您可以按照相容的方式實施升級,就無需擔心網路碎片化的風險。
硬分叉和軟分叉對於區塊鏈網路的長久成功至關重要。儘管缺乏中心權威機構,但它們能夠在去中心化系統中進行更改和升級。
分叉能夠讓區塊鏈和加密貨幣在開發時整合更多的新功能。如果沒有這些機制,我們就需要一個具有自上而下控制權的中心化系統。否則,我們只能在軟體協議的生命週期內遵守一成不變的規則。