為了順利引入新的PoC2+標準,需要將全節點在共識層面上進行適當改造,也即所謂的分叉。本文為Lava核心開發者團隊提出的分叉方案介紹。分叉一般有兩種形態,一種是硬分叉,另一種是軟分叉。該方案基於區塊鏈的去中心化和社區自治精神,提出了一種由礦工投票激活的硬分叉方案,既有別於傳統的硬分叉,也有別於比特幣經常採用的MASF (礦工激活軟分叉)。
什麼是硬分叉?
如果軟件/硬件的規則發生改變,並且這種規則改變無法向前兼容。在區塊鏈中,使用舊版本的節點和使用新版本的節點各成體系、無法互相辨認,稱為硬分叉。
現實中的例子:
·蘋果公司在iPhone 5上使用了Lightning接口,以替代此前的30針Dock接口。 iPhone 5以前的手機無法使用新的接口, iPhone 5以後的新手機也無法使用舊的接口。
什麼是軟分叉?
軟分叉一般都是向前兼容的( Forward Compatibility ),也可以說是未來兼容。通俗解釋就是:舊版本的軟件/硬件,可以使用新版本的軟件/硬件產生的數據。在區塊鏈上可以理解為舊節點可以驗證並接受新節點出的塊。
現實中的例子:
·立體聲FM廣播是向前兼容,它既可以被單聲道的老式收音機播放,但沒有立體聲效果;也可以被新式的立體聲收音機播放,具有立體聲效果。
軟分叉在特殊情況下也可以是向後兼容( Backward Compatibility ),也即新版本的軟件/硬件,可以使用舊版本軟件/硬件產生的數據。在區塊鏈上可以理解為,新節點也可以驗證並接受老節點出的塊。
現實中的例子:
· Intel的x86指令集CPU是向後兼容的,新款CPU依然可以運行老款CPU的軟件,這是由於Intel希望保證老版本CPU有的指令集在新版本中也得以保留。這種只增加不刪除的策略,保證了我們換CPU時無需更換相配套的軟件。
分叉涉及的技術層面
針對Lav a PoC2+的分叉方案中,在共識層面需要改動以下幾處:
1.區塊頭中需要新增一個LAVA挖礦者地址的字段。這種區塊頭中附帶地址用以驗證的方式, burst已經使用,其地址即為區塊頭中的PID 。因此LAVA中將以前的PID替換為LAVA專屬地址的方法也是該思路的延續。
2.挖礦相關的一系列接口,包括: Miner請求信息, Miner提交信息後的驗證,以及全節點的鑄塊時校驗等。
3.全節點同步其他區塊時的驗證過程。
4.全節點重啟後讀盤時的區塊驗證過程。
5.綁定關係數據庫升級。
詳細分叉方案的分析
1.向前兼容的軟分叉
首先排除該方案。雖然該方案是區塊鏈軟分叉首選,但是由於需要修改區塊頭中的字段,因此就無法滿足舊節點能夠接收新節點出的區塊這一大前提。
2.向後兼容的軟分叉
該方案的實際效果如下圖1 。根據向後兼容的大前提,由於新節點可以接收並驗證老
節點出的區塊,而舊節點卻無法接收新節點出的區塊。因此最後新節點逐漸超過舊節點算力達到51%時,兩條鏈分叉。這雖然保證了分叉的效果,但是也存在相應的問題(如圖2 ),在最初始的網絡中,由於舊節點算力佔優( 51%~100% ),而新節點出塊始終無法被舊節點接收,因此會存在很大程度上新節點算力的浪費。假設某時刻新節點挖出另一條鏈與老鏈分叉,在一段時間後老鏈的算力和長度會逐漸超過新鏈,新節點的向後兼容性又使得新鏈被舊鏈覆蓋,整條新鏈的算力全都浪費。
圖1.新節點算力超過51%
圖2.新節點算力不到51% ,回到舊鏈
3.傳統硬分叉
傳統硬分叉方式實際效果如下圖3 。傳統硬分叉是指直接通過更新軟件來進行分叉,更新後的軟件和原有版本的軟件無法互認,因此形成兩條獨立的區塊鏈。傳統的硬分叉若沒有得到生態中參與者的同意,容易造成生態的分裂,應當謹慎考慮。
圖3.傳統硬分叉
4.一種由算力激活的鏈上硬分叉方案
Lava提出了一種由礦工投票激活的硬分叉方案。這種方案的實際效果如圖4 。
該方案將硬分叉分為兩個階段:
第一階段:分叉前的礦工投票激活和鎖定;
第二階段:鎖定期結束後激活分叉。
圖4.一種由算力主導的鏈上硬分叉方案
該方案的好處是:
第一,解決了上述向後兼容軟分叉方案中,在分叉起始時新節點可能存在的算力浪費的問題。
第二,傳統硬分叉由於兩條區塊鏈互相隔離、自成體系,可能導致生態的分裂。這是因為如果有部分生態參與者不同意分叉,但又強行被另一部分參與者意見裹挾而不得不服從,就容易引起不滿和爭議。硬分叉後,甚至可能存在兩條鏈獨立發展,例如以太坊( ETH )和以太坊經典( ETC )的案例。
算力激活硬分叉的第一部分:投票與鎖定
礦工選擇跟新全節點軟件版本來鑄造區塊,新的全節點依舊會保持舊的共識規則,也即PoC2標準,與未更新軟件的舊節點互認。新的全節點軟件版本僅在區塊頭的版本中變更了版本號,用以表示出塊者的投票意見(更新本身即是投票,無需作出額外動作)。一段時間後,全節點會自動統計“投票”階段中新節點出塊的量,當數量達到一定閾值,即可開啟下一個階段——鎖定。
鎖定階段中,新舊節點依舊使用POC2的共識規則進行鑄塊,當鎖定階段結束,即進入硬分叉的第二部分,正式激活硬分叉。鎖定階段的意義是提供共識切換前的過渡時間,以便用戶可以逐漸將硬盤中的文件從POC2格式遷移至POC2+ (即給出時間以進行“重新P盤”),用以在即將來臨的新鏈上繼續挖礦。
算力激活硬分叉第二部分:正式激活分叉
進入激活階段後,硬分叉正式生效,舊鍊和新鏈共存。舊鏈依舊沿用POC2共識,而新鏈,也即新節點將使用POC2+共識進行鑄造,驗證,同步等過程。這也意味著,從此刻開始,新節點必須使用LAVA專屬的P盤格式,否則將無法出塊。