硬分叉,軟分叉,違約和強制

硬分叉和軟分叉哪個應該成為的協議升級機制的首選是區塊鏈空間中的一個重要爭論。兩者之間的基本區別是軟分叉通過嚴格減少有效交易的集合來改變協議的規則,以達到使遵循舊規則的節點留在新鏈上的目的(假定大多數礦工/驗證者執行分叉),而硬分叉使先前無效的交易和區塊變得有效,因此客戶必須升級他們的客戶端才能停留在硬分叉後的區塊鏈上。硬分叉又分為兩種子類型:嚴格擴展硬分叉 會嚴格地擴展有效交易的集合,因此有效的舊規則是相對於新規則的軟分叉;以及雙向硬分叉,它的兩個規則集在兩個方向都不兼容。


下圖可以說明分叉類型:

硬分叉,軟分叉,違約和強制

圖中左側為雙向硬分叉,右側從大到小為:嚴格擴展硬分叉,原協議,軟分叉

以下是一些人們常常提起的軟分叉和硬分叉的優點。

  • 硬分叉使開發人員在進行協議升級時更加靈活,因為他們不必小心確保新規則。

  • 軟分叉對用戶更方便,因為用戶不需要升級就可以留在區塊鏈上。

  • 軟分叉不太可能導致區塊鏈分裂。

  • 軟分叉只需要礦工/驗證者的同意(即使用戶仍然使用舊規則,但假如節點使用新規則,則只有在新規則下有效的東西會錄入鏈中); 硬分叉需要用戶選擇同意。

除此之外,對硬分叉的一個主要批評是硬份叉是“強制的”。這裡所指的強制不是物理力量,而是通過網絡效應的強制。也就是說,如果網絡將規則從A更改為B,則即使你個人喜歡A,如果大多數其他用戶喜歡B並切換到B,那麼為了啟用與其他人一樣的網絡你必須切換到B,儘管你個人不同意該更改。

硬分叉的支持者通常被嘲笑為試圖實現對網絡的“惡意收買”,並且“強迫”用戶與他們一起。此外,區塊鏈分裂的風險使硬叉方案貼上了“不安全”的標籤。

1

我的個人觀點是,這些批評是錯誤的,並且在許多情況下是本末倒置的。這個觀點不針對以太坊,或比特幣,或任何其他區塊鏈; 它源於這些系統的普遍性質,適用於它們中的任何一個。此外,下面的論點只適用於有爭議的協議變化,即當至少有一個社區的組成部分(礦工/驗證者和用戶)的大部分成員不贊成該更改; 如果協議更改是不具有爭議性的,那麼更改通常可以安全地完成,不管分叉是以哪種方式實現的。

首先,讓我們討論強制的問題。硬分叉和軟分叉都可能以某些用戶可能不喜歡的方式改變協議; 如果改變得不到100%的支持,那麼任何協議更改都面臨強制的問題。此外,幾乎不可避免的是,在任何情況下,至少一些反對協議更改的人因為更加重視網絡效應希望與大多人成員保持一致,從而放棄自己喜好的協議規則。 因此,從網絡效應的意義上,兩種類型的分叉都是強制的。

然而,硬分叉和軟分叉之間存在一個本質區別:硬分叉給用戶選擇的機會,而軟分叉不允許用戶“選擇”。 用戶想要加入硬分叉鏈就得親自安裝實現分叉規則的軟件包,那些對規則更改的不認同超過他們重視網絡效應的用戶群理論上可以簡單地留在舊鏈上—實際上,這樣的事件已經發生。

以上描述同等適用於嚴格擴展硬分叉和雙向硬分叉。然而,軟分叉時,分叉一旦成功分叉前的那條區塊鏈就不復存在。因此,軟叉顯然在體制上偏向強制接受而不是脫離,硬分叉在這一點上是相反的。我自己的道德觀點導致我支持脫離而不是強制,雖然其他人的觀點可能不同(最常見的論點是,網絡效應真的非常重要,“一個制霸全場的幣”的存在是至關重要的,雖然也存在更溫和的版本)。

除卻上述討論,如果非要我猜測軟分叉通常被認為比硬分叉“更不強制”的原因,我會說,這是因為一個硬分叉感覺上像是在“強制”用戶安裝軟件更新,而軟分叉用戶沒有“必要”做任何事情。然而,這種直覺具有誤導性的:重要的不是個人用戶是否必須執行簡單的官僚步驟點擊“下載”按鈕,而是用戶是否需要被迫接受他們不願意接受的協議規則變更。以這個標準來衡量,軟硬分叉最終帶有強制性,硬分叉反而在維護用戶自由度方面稍微好一些。

2

現在,讓我們來看看極具爭議的分叉,特別是那些礦工/驗證者偏好和用戶偏好相沖突的分叉。這裡有三種情況:(i)雙向硬分叉,(ii)嚴格擴展硬分叉,以及(iii)所謂的“用戶激活軟分叉”(UASF)。第四類是礦工在沒有用戶同意的情況下激活軟分叉; 我們將在後面討論。

首先,雙向硬分叉。在最好的情況下,情況很簡單。兩種幣在市場上交易,交易者決定兩者的相對價值。從ETC/ ETH案例中,我們有大量證據表明礦工極有可能簡單的根據幣的價格的比率分配算力,以最大化他們的利潤,不管他們的意識形態為何。

硬分叉,軟分叉,違約和強制

即使一些礦工的意識形態傾向於一方或另一方,極有可能會存在足夠的其他礦工願意利用價格與算力之間的不匹配來套利,從而使兩者一致。假設一些礦工試圖形成一個集團不去在某條鏈上挖礦,套利空間會形成激勵讓人們不去這麼做。

這裡有兩個邊界情況。第一個可能性是,挖礦價值因為價格的下降而下降,但難度由於低效的難度調整算法沒有下降到相匹配的水平,這時採礦變得無利可圖,沒有礦工會願意在虧損的情況下繼續推動整鏈向前直到難度恢復平衡。這不是以太坊的情況,但可能是比特幣的情況。因此,少數群體鏈很可能永遠不會啟動。注意,這種情況是好是壞取決於你對強制與脫離的看法; 你可以從我上面寫的推斷我個人認為這種對少數群體鏈惡意的難度調整算法是不好的。

第二種情況是,如果差異非常大,大鏈可以51%攻擊較小的鏈。即使在ETH / ETC分流比為10:1的情況下,也沒有發生; 所以它當然不是一定要發生的。然而,如果大鏈上的礦工喜歡強制而不喜歡脫離,並以他們的偏好採取行動,那麼51%攻擊的情況總是可能的。

3

接下來,讓我們看看嚴格擴展硬分叉。SEHF(嚴格擴展硬分叉的縮寫)具有分叉前的區塊鏈在分叉後的規則下依然有效的屬性,因此如果分叉鏈比非分叉鏈的價格更低,則它將具有比非分叉鏈更低的算力,因此非分叉鏈將最終被原始鏈的客戶端規則和分叉客戶端規則接受為最長鏈,而分叉鏈“將被湮沒”。

這樣的分叉具有天生的劣勢,因為分叉鏈被湮沒的可能性將反應在價格中,促使價格降低,使得鏈更可能湮沒... 這個論點在我看來十分有力,因此任何具有爭議性的分叉應該進行雙向硬分叉,而不是嚴格擴展。

Bitcoin Unlimited開發人員建議在發生分叉後通過雙向手動硬分叉來處理這個問題,但更好的選擇是通過內置的雙向性; 例如,比特幣的例子中,可以添加規則以禁止一些未使用的操作碼,然後在非分叉鏈上進行包含該操作碼的交易,使得在分叉規則下,非分叉鏈會從那時起被認為永遠無效。對於以太坊,由於狀態計算運作的各種細節,幾乎所有硬分叉都是自動雙向的。由於結構上的區別,其他區塊鏈可能具有不同的屬性。

4

上面提到的最後一種類型的分叉是用戶激活的軟分叉。在UASF(用戶激活軟分叉的縮寫)中,用戶在不獲得礦工的共識的前提下轉換到軟分叉規則; 他們期待礦工會因為經濟利益自動同意規則的變更。如果許多用戶不執行UASF,那麼幣會分裂,這將導致與嚴格擴展的硬分叉相同的情況,除了 - 這是概念的真正聰明和迂迴的部分 - 在嚴格擴展的硬叉中強烈地不利於叉鏈的“湮滅風險”在此強烈地偏向UASF中的叉鏈。即使UASF提供選擇,它利用經濟不對稱,使分叉更容易成功(雖然這種傾向不是絕對的;如果UASF決定不受歡迎,那麼它不會成功,而會將導致區塊鏈分裂)。

然而,UASFs是一個危險的。例如,假設項目的開發人員想要創建一個UASF補丁,該補丁將以前接受所有交易的未使用的操作碼轉換為只接受符合一些新規則的交易的操作碼,即便政治或技術上有爭議或是礦工不喜歡。礦工有一個聰明和狡猾的方式來反擊:他們可以單方面實施一個礦工激活軟分叉,使所有使用由軟分叉創建的功能的交易失敗。

假設我們有三個規則集合:

  • 原始規則,其中操作碼X總是有效的。

  • 其中操作碼X僅當交易的其餘部分符合新規則時才有效的規則。

  • 操作碼X總是無效的規則。

注意,(2)是關於(1)的軟分叉,(3)是關於(2)的軟分叉。假設,存在有利於(3)的強大的經濟壓力,軟分叉就不能實現其目標。

結論是這樣的。軟分叉是一個危險的遊戲,如果存在爭議引起礦工開始反擊,情況會變得更加危險。嚴格擴展硬分叉也是一個危險的遊戲。礦工激活的軟分叉是強制的; 用戶激活的軟分叉不那麼強制,但由於經濟壓力仍然是強制的,且它們也具有自己的危險。如果你真的想實施一個有爭議的變更,並認為這樣做的高社會成本是值得的,那就實施一個乾淨的雙向硬分叉,花時間添加一些適當的重放保護,讓市場來選擇。


參考鏈接: http://vitalik.ca/general/2017/03/14/forks_and_markets.html


分享到:


相關文章: