區塊鏈科普系列第28天: 1分鐘,分清軟分叉和硬分叉
文/杜豆豆
自從接觸區塊鏈技術,總是接受一些看起來很有趣的洋詞兒,軟硬分叉就是一個。
這詞兒看起來很形象,猛一讀還真是不知所云。于是,翻書查資料,終于鬧明白了怎么回事。
其實,也無非就是新瓶換舊藥。所謂軟分叉和硬分叉,技術點兒說,就是升級過程中的向前兼容和向后兼容罷了。
不過,看似簡單的事兒,實現起來可不容易,不然,也不會難倒這么多聰明人。
不就是一個升級嘛,天天看軟件升級、打補丁,哪有那么難的?
我們一向的觀念里,說升級,程序寫好,服務器一上傳,大家下載補丁一打,完事兒!
你還別說,在區塊鏈的世界里,升個級真的沒那么容易。
我們以比特幣為例,來解析一下這兩個分叉概念吧。
1、什么是軟分叉和硬分叉?
百度百科里是這么定義的:
(1)? 軟分叉 Soft Fork
軟分叉是指在區塊鏈或去中心化網絡中向前兼容的分叉。向前兼容意味著,當新共識規則發布后,在去中心化架構中節點不一定要升級到新的共識規則,因為軟分叉的新規則仍舊符合老的規則,所以未升級的節點仍舊能接受新的規則。
(2)硬分叉 Hard Fork
指在區塊鏈或去中心化網絡中不向前兼容的分叉,硬分叉對加密貨幣使用的技術進行永久更改,這種變化使得所有的新數據塊與原來的塊不同,舊版本不會接受新版本創建的區塊,要實現硬分叉所有用戶都需要切換到新版本協議上。如果新的硬分叉失敗,所有的用戶將回到原始數據塊。
我們可以發現,這兩個定義,都涉及到修改,那到底修改了什么呢?
我們來具體看一下兩種分叉的案例分析。
2、比特幣軟分叉升級案例分析
(1)CSV軟分叉
比特幣區塊鏈上,2016年6月份執行過一次軟分叉升級,稱為CSV軟分叉。
CSV軟分叉主要修改的地方是“序列號(目前未被使用的交易替換功能)”。
因為原來比特幣交易數據結構中這一個字段未被使用,或者當時是模糊定義,所以才可以被使用重新定義。
這種未明確定義的字段在舊版本的比特幣完整節點上不會被仔細驗證,新版本的節點按照新規則生產新區塊,還可以被舊版本的節點驗證接受。這就是一個典型的軟分叉。
(2)多重簽名軟分叉
比特幣在2012年還有一次重要的升級,叫P2SH,社區稱之為多重簽名軟分叉,是對比特幣交易簽名腳本的一次修改。
多重簽名軟分叉主要修改的地方是P2PKH字段(Pay-to-Public-Key-Hash,支付給公鑰),目前這個字段可以有5種腳本。
因為多重簽名軟分叉之后,沒有升級的節點在驗證已經升級過的節點產生的區塊時,它們對這種新的P2SH鎖定腳本也可以通過驗證,所以這也是一個軟分叉。
(3)74638高度區塊補丁軟分叉
在2010年8月15日,有一個黑客利用比特幣代碼的一個漏洞,在第74638高度區塊上刷出一筆交易包含了1844億個比特幣。隨后在半天時間內被開發人員發現,并且發布了補丁,將這筆交易的輸出變為無效。
漏洞補丁主要修改的地方,修改之前的規則是“總量”不能高于“交易”,修改之后的規則是添加了“總量”不能是負值。
這種修改未升級的節點能夠驗證已經升級的節點產生的區塊,所以也是軟分叉。
由此,我們可以得出,軟分叉是指比特幣交易的數據結構發生改變時,未升級的節點可以驗證已經升級的節點生產出的區塊,而且已經升級的節點也可以驗證未升級的節點生產出的區塊。
3、比特幣硬分叉升級案例分析
(1)bitcoin qt 0.8.0版本硬分叉
2013年3月12日,bitcoin qt 0.8.0版本軟件發布,采用了一種新的數據庫level db。
有的礦工節點升級了bitcoin qt 0.8版本,有的礦工還繼續使用bitcoin qt0.7版本的軟件。雙方各自生產區塊,但bitcoin qt 0.8采用的新數據庫生產出的區塊被被qt0.7版本節點拒絕掉。
具體的原因是舊的數據庫對超過800Kb的區塊有時不接受。
因此在區塊高度225430比特幣區塊鏈分成了兩條鏈,結果導致了比特幣區塊鏈產生兩條鏈,一條是包含大于800kb區塊的鏈,另一條是拒絕承認這些包含更大區塊的鏈,這就發生了硬分叉。
(2)區塊高度363731硬分叉
2015年7月4日比特幣區塊鏈在區塊高度363731發生一次硬分叉。
Bitcoin Core 開發者往新版本的Bitcoin Core 0.10.0添加了BIP 66,試圖進行一次軟分叉的修改。在比特幣網絡上主要礦池都使用了0.10版本的軟件時,但有一個礦池BTC Nuggets沒有升級、挖出來的兩個區塊被其他礦工拒絕掉,然后雙方各自挖礦,由此產生硬分叉,分成了兩條鏈。
由此,我們可以得出,硬分叉是指比特幣區塊格式或交易格式發生改變時,未升級的節點拒絕驗證已經升級的節點生產出的區塊,不過已經升級的節點可以驗證未升級節點生產出的區塊,然后大家各自延續自己認為正確的鏈,所以分成兩條鏈。
4、軟分叉和硬分叉的主要區別到底是什么?
軟分叉和硬分叉的主要區別是新舊節點的相互兼容性。
軟分叉需要保證完美的兼容性就要求達到以下兩種情況:
1.升級過的節點接受沒有升級的節點生產的交易和區塊(向后兼容);
2.沒有升級的節點接受升級過的節點生產的交易和區塊(向前兼容)。
硬分叉需要保證的兼容性只需要達到上面的第1種情況就可以了。
所以,軟分叉是比較難的,要顧著新的,還要考慮舊的。硬分叉沒那么復雜,你不升級,我大不了不帶你玩就是了。
(本文出自杜豆豆《白話區塊鏈》讀書筆記的部分摘錄,同時參考引用了百家號小林投資的文章《什么是硬分叉,什么是軟分叉,什么是共識?》中的部分案例。)
明天分享:《為什么51%攻擊被稱為達摩克利斯之劍?》
(未完待續)
原創不易,非授權不得轉載,轉載請注明出處。如果您覺的文章有用,別忘了在文末點贊哦。
讀更多好書,請訪問我的文集:《一生必讀的萬卷好書》
歡迎加入“萬卷好書讀書會”:在這個群里,大家可以分享電子書,交流讀書心得,以文會友,自由點贊支持。目前該群已超過100人,需要群主發邀請才能進,有興趣的簡友請加微信dudoudou189聯系我。讀書會座右銘:在浮躁的時代,安心讀書寫作,養育心靈。
我已晉升五十萬鉆高級合伙人,歡迎使用我的專屬會員推廣鏈接:http://www.lxweimin.com/mobile/club?ref=3debb0de。訂閱會員,享受最優惠福利。