區(qū)塊鏈科普系列第28天: 1分鐘,分清軟分叉和硬分叉
文/杜豆豆
自從接觸區(qū)塊鏈技術(shù)客峭,總是接受一些看起來很有趣的洋詞兒豫领,軟硬分叉就是一個。
這詞兒看起來很形象舔琅,猛一讀還真是不知所云等恐。于是,翻書查資料备蚓,終于鬧明白了怎么回事课蔬。
其實,也無非就是新瓶換舊藥郊尝。所謂軟分叉和硬分叉二跋,技術(shù)點兒說,就是升級過程中的向前兼容和向后兼容罷了流昏。
不過扎即,看似簡單的事兒,實現(xiàn)起來可不容易况凉,不然铺遂,也不會難倒這么多聰明人。
不就是一個升級嘛茎刚,天天看軟件升級、打補丁撤逢,哪有那么難的膛锭?
我們一向的觀念里,說升級蚊荣,程序?qū)懞贸跽?wù)器一上傳,大家下載補丁一打互例,完事兒奢入!
你還別說,在區(qū)塊鏈的世界里媳叨,升個級真的沒那么容易腥光。
我們以比特幣為例三椿,來解析一下這兩個分叉概念吧胎围。
1混槐、什么是軟分叉和硬分叉戏自?
百度百科里是這么定義的:
(1)? 軟分叉 Soft Fork
軟分叉是指在區(qū)塊鏈或去中心化網(wǎng)絡(luò)中向前兼容的分叉狐胎。向前兼容意味著醉冤,當(dāng)新共識規(guī)則發(fā)布后韩容,在去中心化架構(gòu)中節(jié)點不一定要升級到新的共識規(guī)則艺骂,因為軟分叉的新規(guī)則仍舊符合老的規(guī)則,所以未升級的節(jié)點仍舊能接受新的規(guī)則伍纫。
(2)硬分叉 Hard Fork
指在區(qū)塊鏈或去中心化網(wǎng)絡(luò)中不向前兼容的分叉宗雇,硬分叉對加密貨幣使用的技術(shù)進行永久更改,這種變化使得所有的新數(shù)據(jù)塊與原來的塊不同莹规,舊版本不會接受新版本創(chuàng)建的區(qū)塊赔蒲,要實現(xiàn)硬分叉所有用戶都需要切換到新版本協(xié)議上。如果新的硬分叉失敗访惜,所有的用戶將回到原始數(shù)據(jù)塊嘹履。
我們可以發(fā)現(xiàn),這兩個定義债热,都涉及到修改砾嫉,那到底修改了什么呢?
我們來具體看一下兩種分叉的案例分析窒篱。
2焕刮、比特幣軟分叉升級案例分析
(1)CSV軟分叉
比特幣區(qū)塊鏈上,2016年6月份執(zhí)行過一次軟分叉升級墙杯,稱為CSV軟分叉配并。
CSV軟分叉主要修改的地方是“序列號(目前未被使用的交易替換功能)”。
因為原來比特幣交易數(shù)據(jù)結(jié)構(gòu)中這一個字段未被使用高镐,或者當(dāng)時是模糊定義溉旋,所以才可以被使用重新定義。
這種未明確定義的字段在舊版本的比特幣完整節(jié)點上不會被仔細驗證嫉髓,新版本的節(jié)點按照新規(guī)則生產(chǎn)新區(qū)塊观腊,還可以被舊版本的節(jié)點驗證接受。這就是一個典型的軟分叉算行。
(2)多重簽名軟分叉
比特幣在2012年還有一次重要的升級梧油,叫P2SH,社區(qū)稱之為多重簽名軟分叉州邢,是對比特幣交易簽名腳本的一次修改儡陨。
多重簽名軟分叉主要修改的地方是P2PKH字段(Pay-to-Public-Key-Hash,支付給公鑰)量淌,目前這個字段可以有5種腳本骗村。
因為多重簽名軟分叉之后,沒有升級的節(jié)點在驗證已經(jīng)升級過的節(jié)點產(chǎn)生的區(qū)塊時呀枢,它們對這種新的P2SH鎖定腳本也可以通過驗證叙身,所以這也是一個軟分叉。
(3)74638高度區(qū)塊補丁軟分叉
在2010年8月15日硫狞,有一個黑客利用比特幣代碼的一個漏洞信轿,在第74638高度區(qū)塊上刷出一筆交易包含了1844億個比特幣晃痴。隨后在半天時間內(nèi)被開發(fā)人員發(fā)現(xiàn),并且發(fā)布了補丁财忽,將這筆交易的輸出變?yōu)闊o效倘核。
漏洞補丁主要修改的地方,修改之前的規(guī)則是“總量”不能高于“交易”即彪,修改之后的規(guī)則是添加了“總量”不能是負值紧唱。
這種修改未升級的節(jié)點能夠驗證已經(jīng)升級的節(jié)點產(chǎn)生的區(qū)塊,所以也是軟分叉隶校。
由此漏益,我們可以得出,軟分叉是指比特幣交易的數(shù)據(jù)結(jié)構(gòu)發(fā)生改變時深胳,未升級的節(jié)點可以驗證已經(jīng)升級的節(jié)點生產(chǎn)出的區(qū)塊绰疤,而且已經(jīng)升級的節(jié)點也可以驗證未升級的節(jié)點生產(chǎn)出的區(qū)塊。
3舞终、比特幣硬分叉升級案例分析
(1)bitcoin qt 0.8.0版本硬分叉
2013年3月12日轻庆,bitcoin qt 0.8.0版本軟件發(fā)布,采用了一種新的數(shù)據(jù)庫level db敛劝。
有的礦工節(jié)點升級了bitcoin qt 0.8版本余爆,有的礦工還繼續(xù)使用bitcoin qt0.7版本的軟件。雙方各自生產(chǎn)區(qū)塊夸盟,但bitcoin qt 0.8采用的新數(shù)據(jù)庫生產(chǎn)出的區(qū)塊被被qt0.7版本節(jié)點拒絕掉蛾方。
具體的原因是舊的數(shù)據(jù)庫對超過800Kb的區(qū)塊有時不接受。
因此在區(qū)塊高度225430比特幣區(qū)塊鏈分成了兩條鏈上陕,結(jié)果導(dǎo)致了比特幣區(qū)塊鏈產(chǎn)生兩條鏈桩砰,一條是包含大于800kb區(qū)塊的鏈,另一條是拒絕承認這些包含更大區(qū)塊的鏈唆垃,這就發(fā)生了硬分叉。
(2)區(qū)塊高度363731硬分叉
2015年7月4日比特幣區(qū)塊鏈在區(qū)塊高度363731發(fā)生一次硬分叉痘儡。
Bitcoin Core 開發(fā)者往新版本的Bitcoin Core 0.10.0添加了BIP 66辕万,試圖進行一次軟分叉的修改。在比特幣網(wǎng)絡(luò)上主要礦池都使用了0.10版本的軟件時沉删,但有一個礦池BTC Nuggets沒有升級渐尿、挖出來的兩個區(qū)塊被其他礦工拒絕掉,然后雙方各自挖礦矾瑰,由此產(chǎn)生硬分叉砖茸,分成了兩條鏈。
由此殴穴,我們可以得出凉夯,硬分叉是指比特幣區(qū)塊格式或交易格式發(fā)生改變時货葬,未升級的節(jié)點拒絕驗證已經(jīng)升級的節(jié)點生產(chǎn)出的區(qū)塊,不過已經(jīng)升級的節(jié)點可以驗證未升級節(jié)點生產(chǎn)出的區(qū)塊劲够,然后大家各自延續(xù)自己認為正確的鏈震桶,所以分成兩條鏈。
4征绎、軟分叉和硬分叉的主要區(qū)別到底是什么蹲姐?
軟分叉和硬分叉的主要區(qū)別是新舊節(jié)點的相互兼容性。
軟分叉需要保證完美的兼容性就要求達到以下兩種情況:
1.升級過的節(jié)點接受沒有升級的節(jié)點生產(chǎn)的交易和區(qū)塊(向后兼容)人柿;
2.沒有升級的節(jié)點接受升級過的節(jié)點生產(chǎn)的交易和區(qū)塊(向前兼容)柴墩。
硬分叉需要保證的兼容性只需要達到上面的第1種情況就可以了。
所以凫岖,軟分叉是比較難的江咳,要顧著新的,還要考慮舊的隘截。硬分叉沒那么復(fù)雜扎阶,你不升級,我大不了不帶你玩就是了婶芭。
(本文出自杜豆豆《白話區(qū)塊鏈》讀書筆記的部分摘錄东臀,同時參考引用了百家號小林投資的文章《什么是硬分叉,什么是軟分叉犀农,什么是共識惰赋?》中的部分案例。)
明天分享:《為什么51%攻擊被稱為達摩克利斯之劍呵哨?》
(未完待續(xù))
原創(chuàng)不易赁濒,非授權(quán)不得轉(zhuǎn)載,轉(zhuǎn)載請注明出處孟害。如果您覺的文章有用拒炎,別忘了在文末點贊哦。
讀更多好書挨务,請訪問我的文集:《一生必讀的萬卷好書》
歡迎加入“萬卷好書讀書會”:在這個群里击你,大家可以分享電子書,交流讀書心得谎柄,以文會友丁侄,自由點贊支持。目前該群已超過100人朝巫,需要群主發(fā)邀請才能進鸿摇,有興趣的簡友請加微信dudoudou189聯(lián)系我。讀書會座右銘:在浮躁的時代劈猿,安心讀書寫作拙吉,養(yǎng)育心靈潮孽。
我已晉升五十萬鉆高級合伙人,歡迎使用我的專屬會員推廣鏈接:http://www.reibang.com/mobile/club?ref=3debb0de庐镐。訂閱會員恩商,享受最優(yōu)惠福利。