軟分叉
出自 MBA智库百科(https://wiki.mbalib.com/)
目錄 |
軟分叉是指在區塊鏈或去中心化網路中向前兼容的分叉。向前兼容意味著,當新共識規則發佈後,在去中心化架構中節點不一定要升級到新的共識規則,因為軟分叉的新規則仍舊符合老的規則,所以未升級的節點仍舊能接受新的規則。
區別是對新舊節點的兼容方面。軟分叉修改數據結構後,新節點生產的交易和區塊能夠被舊節點驗證並接受,硬分叉就不能。
正因為硬分叉修改數據結構後,新節點生產的區塊會被舊節點拒絕掉,如果舊節點拒絕升級軟體而堅持按照舊數據結構繼續挖礦,那比特幣就會產生兩條鏈。
而軟分叉因為沒有升級的節點能接受新節點生產的新數據,所以不會出現兩條鏈。但軟分叉為了做到新節點和舊節點生產的數據完全兼容,那是非常難的,因為本質上是不一樣的數據結構大家要相互認,一旦出現有節點拒絕驗證不一樣的交易或區塊,那就會變成硬分叉。
軟分叉可以保證不想升級的人不去升級,這種不想升級的需求在現實生活中其實是很常見的。
硬分叉必須要求所有舊節點進行升級,否則舊節點就無法識別新節點生產的交易和區塊,導致區塊鏈分成兩條鏈。
軟分叉的升級空間有限,因為目前的比特幣交易數據結構和區塊數據結構所有欄位都已經詳細定義好了,你想保證向前兼容,就不可能增加新的欄位,否則舊節點就會拒絕你。所以軟分叉的升級空間補束縛在對現有欄位的重新定義。就包括軟分叉就無法重新定義區塊數據結構里的“區塊大小”這個欄位,也就是軟分叉永遠實現不了對1M區塊的突破。而且這種極端複雜的兼容性稍微出點錯,就會新舊節點不兼容,即導致硬分叉。這個事情已經發生過一次了。
硬分叉的升級空間則要大很多,因為硬分叉只要考慮能夠接受以前舊節點生產的交易和區塊就可以了,硬分叉不需要考慮舊節點是否會接受新節點生產的交易和區塊。那硬分叉就可以對交易數據結構和區塊數據結構更大膽的修改。
最後,比特幣交易數據結構和區塊數據結構都有一個欄位叫“版本號”,意義是“明確這筆交易或區塊參照的規則”。這意味著中本聰是希望使用硬分叉來修改這些規則,就是說如果我們要修改規則,那就重新定義版本號。但軟分叉在不修改“版本號”的前提下,卻修改了規則。