基礎課程第十六課 分叉

挖礦過程中需要全球多個礦工共同競爭去獲取記賬權,由於區塊鏈是去中心化的數據結構,所以不同副本之間不能總保持一致,區塊有可能在不同時間到達不同節點,因此相互競爭的鏈之間是存在差異的。這就是我們所提到的分叉,分叉主要有三種類型:臨時分叉、軟分叉和硬分叉。

01

臨時分叉

數字貨幣進行的是競爭記賬方式,也就是誰先算出來難題,將交易打包成區塊,並將區塊公佈到網絡中,得到其他節點的驗證和接收,大家就在自己的區塊鏈上加上新的區塊,並進行下一輪的計算。

基礎課程第十六課 分叉

但是這裡會出現一個問題,因為廣播是需要時間的,如果A和B兩個區塊分別被不同的礦工挖出,並分別在網絡中廣播,一部分節點先得到A區塊,後得到B區塊,則他們把A作為主鏈,而B作為臨時分叉保存,這些節點被稱為紅軍;另一部分節點先得到B區塊,後得到A區塊,則他們把B作為主鏈,而A作為臨時分叉保存,這些節點被稱為綠軍。

基礎課程第十六課 分叉

這就是我們所說的臨時分叉,那麼接下來是以誰為準呢,紅軍和綠軍彼此並不服氣啊,所以誰也說服不了誰,區塊鏈的頂點產生了分歧,一派以紅色區塊為頂點,一派以綠色區塊為頂點。

基礎課程第十六課 分叉

於是大家制定了一個規則,先在誰的基礎上算出下一個區塊,按照最長鏈原則就以誰為準,後續,基於綠色區塊計算的粉色區塊率先出現並被全網接收和認可,也就是在綠軍的基礎上增加了粉軍,他們現在是紅軍一倍的實力,所以綠軍就打敗了紅軍,也就是所有節點將B+C作為主鏈,A區塊分叉被拋棄,臨時分叉結束。

基礎課程第十六課 分叉

在實際應用中,臨時分叉並不常見,不過存在這種可能性,所以提前約定好了處理辦法以解決這種可能出現的情況。而且臨時分叉如同名字所表達的,它只是一個臨時出現的情況,後續就還會合併到一條主鏈上。

02

軟分叉

軟分叉又稱為兼容性分叉,這也是軟分叉和硬分叉最大的區別。硬分叉是實實在在的分成了兩條鏈,而軟分叉還是在一條鏈中,只是彼此前後節點所遵守的規則有可能不同。簡單舉一個例子,硬分叉就像是另外開闢了一條新路,而軟分叉就像是在原來的土路上,我們開始修建水泥道路啦,這還是一條路,只是用料(規則)有所不同啦。

在此之前,說說分叉的原因吧,因為中本聰老先生設計比特幣的時候,沒想到比特幣發展會如此迅猛,所以當初一個區塊的大小隻設計了1M大小,也就是1000字節k,按照一筆交易250字節來算,一個區塊也就是能放4000筆交易,一個區塊按照10分鐘計算,一秒鐘只能處理7筆交易。隨著比特幣的發展,這個處理能力明顯是不足的,所以大家就考慮擴容。可是擴容的方案太多啦,有的說擴成2M,有的說擴成無限大,有的說擴成可調節的,按照之前的2016個節點的大小需求去取平均值。誰也說服不了誰,於是社區就各自按照自己的思路去對比特幣進行了擴容,在此基礎上就出現了軟分叉和硬分叉。

軟分叉例子:

1、P2SH軟分叉升級

P2SH包含在BIP16中,通過軟分叉進行升級比特幣系統,讓比特幣在支持P2PKH基礎上,再支持一種叫P2SH的標準交易類型。

2、SegWit軟分叉升級

SegWit主要包含在BIP141-144中,通過軟分叉進行升級比特幣系統,讓比特幣支持一系列SegWit的功能集。

03

硬分叉

相對於軟分叉這種比較溫柔的擴容方式之外,硬分叉則是不再承認原來的鏈條,而是在某個區塊之後,完全採取新的區塊規則。

目前已發生的區塊鏈硬分叉的案例有:

a、比特現金(BCC)

Bitcoin Cash(BCC),中文名譯為比特現金,其客戶端軟件Bitcoin abc是對Bitcoin core 0.14進行fork(複製並修改)得來的版本,將區塊大小調整到了8M,並且移除了隔離見證(SW)。2017年8月1號UTC時間12:37,比特幣區塊高度478558開始分叉,BCC由此而來,可將其視作比特幣(BTC)的分叉幣或競爭幣。

比特現金雖然算是比特幣較為成功的一個硬分叉,不過主流btc用戶還是對此持不歡迎態度。此後又出現了什麼比特黃金,比特白銀等硬分叉,則基本不被接受。

b、以太經典(ETC)

The DAO(Decentralized Autonomous Organization,即“去中心化的自治組織”)於2017年5月在以太坊上進行眾籌,在6月份已經成功募集價值約1.5億美金的以太幣,然而黑客利用攻擊,將5000萬美金的資產轉移到了他們名下。為了奪回這部分資金,以太坊團隊決定在2017年7月20日晚上,以太坊的第192000個區塊進行硬分叉,將以太坊分為以太經典(ETC)和以太坊(ETH),將已有以太幣進行回滾,以奪回黑客侵佔的以太幣。雖然這一決定並未得到以太坊社區半數以上的人群認可,質疑聲也是很多,不過以太坊團隊還是強行進行了硬分叉。

這個例子可以簡單理解為,國家印了1.5億元錢,其中5000億被強盜搶走了,為了保證利益,國家把這1.5億紙幣宣佈無效,重新印了1.5億。這個是不是合理合法呢,就仁者見仁智者見智啦。不過以太坊的創始人V神(Vitalik Buterin)的確是一個愛劍走偏鋒的人,現在國內嚴厲打擊的ICO(Initial Coin Offering),其實也是由V神率先提出併發揚光大的,他在開發以太坊之前就是利用ICO募集比特幣作為開發以太坊的資金。之前我也說過,我認為以太坊最大的技術突破是智能合約,這也是我最看好它的地方。但實際上,以太坊最受人歡迎的地方,就是它的ICO機制,可以輕鬆的發行各種各樣金額的代幣。(發個廣告,各位如果有想發行代幣的,從幾千萬到幾千億,隨便說啊,我幫你們搞定。哈哈,開個玩笑,只是說明,其實那就是個數字罷了,空氣中飄過的數字而已)

在以太坊之前,發代幣是需要像我們這樣的IT工程師的大力參與,參考比特幣的源碼來進行二次開發,才能發幣的,成本是比較高的。但是以太坊出現之後,各種公有鏈的開發都可以基於以太坊平臺,發幣進行ICO也是如此,整個過程變的超級簡單。

04

軟分叉與硬分叉的比較

硬分叉和軟分叉最大的區別就是新舊節點的認可關係,軟分叉是新舊節點可以相互認可,彼此當做是還和原來一樣的節點(其實是具有一定欺騙性的,因為新舊節點的確有區別啦),而硬分叉則是新節點不再遵循任何老節點的規則,也將按照新規則才能產生節點,而由老規則生成的節點則會被認為是無效節點被拋棄掉。

軟分叉優點:

a.軟分叉總是隻有一條鏈,沒有分成兩條鏈的風險;

b.軟分叉不要求所有節點同一時間升級,允許逐步升級,且並不影響軟分叉過程中的系統穩定性和有效性;

但軟分叉也有缺點:

a.軟分叉的前提是老的節點總是能夠接受新節點的區塊,這就要求把系統設計成向前兼容(forward compatible);

b.軟分叉總是建立在對老節點進行欺騙的基礎上,它讓老節點沒有察覺實際上已經發生的變化,某種程度上違背了單點完整驗證的原則;

這節課我給大家介紹了區塊鏈的分叉原理以及相關案例,讓大家瞭解到什麼是區塊鏈分叉,下一節課,我將和大家聊一聊區塊鏈的匿名性。

P.S. 名詞解釋:向前兼容(forward compatible)

向前兼容是非常有意思的術語,它不同於我們通常說的軟件設計中向後兼容(backward compatible)的方式。它要求對於新可能出現的區塊形態、共識機制有個預先的判斷,並在老的系統中留有餘地或後門。當新的節點被部署時,老的節點能夠接受新節點所產生的區塊。

那麼,比特幣裡是如何實現向前兼容的?

答案是:非標準交易(non-standard transaction)。

比特幣中設定了如下規則:

1.將所有交易分類為:標準交易、非標準交易和非法(invalid)三種;

2.如果發現非法交易,一律拒絕,如果該非法交易在某個區塊中,則拒絕整個區塊;

3.在標準配置下,所有節點對非標準交易採取以下態度:

a. 不轉發

b. 不接受

c.不打包

4.對於已經進入區塊的非標準交易採取以下態度:

接受該區塊;

對區塊中的所有交易,包含該非標準交易按既有規則進行驗證;


分享到:


相關文章: