多鏈架構設計必讀:平行鏈數據的可靠性如何保障?

從以太貓事件以來,單鏈的擁堵問題讓區塊鏈開發者意識到,高速型區塊鏈網絡才是普及應用的關鍵。而提速的方案中從單鏈的分層:比特幣的閃電網絡,以太坊的分片,EOS DPOS共識機制等, 其實還有當下比較熱門的多鏈架構,如海外的COSMOS、Polkadot 、及國內的杭州複雜美Chain33平行鏈架構。

筆者在前面一篇文中介紹了平行鏈的實現原理,它作為一種多(公)鏈並行的架構,有人可能會提出,從整個區塊鏈網絡生態來說,安全性是高的,但從單鏈的網絡生態來看,由於其不需要眾多節點,那平行鏈的數據可靠性如何保障呢?

首先我們來看一下原有的主鏈—平行鏈機制,假設有如下應用場景:a是平行鏈節點,A是對應的主鏈節點;A收到主鏈的各個節點發送的交易,假設在區塊高度為100時,A收到三條交易tx1、tx2、tx3;其中,tx2是平行鏈關注的交易;原有的主鏈—平行鏈機制運作方式如圖1所示:

多鏈架構設計必讀:平行鏈數據的可靠性如何保障?

(1)A打包這三條交易生成區塊block(100);

(2)a從block(100)中同步關注的交易,即tx2;a執行tx2,並生成一個平行鏈上的區塊block(100)';

在主鏈—平行鏈機制機制中,不同的平行鏈節點之間無法通信,這就導致a打包這三條交易生成區塊block(100)後,a可以修改數據,平行鏈數據無法得到保障;

可以得到一個淺顯的結論,若平行鏈的數據可以經過共識,則可以保證平行鏈數據的可靠性。那麼,如何使得平行鏈數據共識以保證平行鏈數據的可靠性呢?

有人會說,那就使得不同的平行鏈節點之間都可以通信,可以通信的平行鏈節點之間相互廣播平行鏈數據,對若干平行鏈數據進行共識,不就可以保證平行鏈數據的可靠性了嗎?

筆者認為,如果不同的平行鏈節點之間都可以通信,平行鏈就變成了一條側鏈,側鏈需要大量的挖礦節點,需要消耗大量的算力資源,成本較高;違背了開發主鏈—平行鏈機制節省資源的初衷,因此這種方案不可取;

那麼,如何保證平行鏈數據的可靠性呢;

筆者瞭解到,複雜美chain33配置了平行鏈驗證節點,所謂平行鏈驗證節點,以下簡稱驗證節點,就是擁有較高權限的平行鏈節點,驗證節點可以將打包生成的平行鏈上的區塊信息發送給主鏈對應的節點;

同樣,假設在區塊高度為100時,A收到三條交易tx1、tx2、tx3;其中,tx2是平行鏈關注的交易;平行鏈中有a、b、c、d、e、f共6個節點,其中a、b、c、d為驗證節點;

改進後的主鏈—平行鏈機制運作方法如下:

(1)A打包這三條交易生成區塊block(100);

(2)a從block(100)中同步關注的交易,即tx2;a執行tx2,並生成一個平行鏈上的區塊block(100)';同理,b、c、d也生成一個平行鏈上的區塊,假設b與c生成的平行鏈區塊為block(100)',d生成的平行鏈區塊為block(100)'',正確的平行鏈區塊為block(100)';

(3)a打包block(100)'生成執行結果tx100_a,併發送給A;同理,b、c、d也分別打包block(100)'與block(100)''生成tx100_b、tx100_c、tx100_d,併發送給主鏈中對應的B、C、D;

(4)主鏈中的各節點可以相互通信,將收到的tx100_a、tx100_b、tx100_c、tx100_d相互廣播並進行共識;經共識後,認定tx100_a、tx100_b、tx100_c為正確的執行結果,並以tx100_a為代表,對tx100_a打上確認標識;

(5)a、b、c、d、e、f從主鏈相應的節點同步經過確認的tx100_a,解析經過確認的tx100_a得到正確的區塊哈希等數據,若與本節點本身計算得到的區塊哈希等數據相同,則認為數據是可靠的。

簡而言之,在步驟(3)、(4)中,驗證節點將生成的平行鏈區塊以交易的形式發送給主鏈,即其實平行鏈區塊的正確性是由主鏈節點經過共識保證的,這樣,改進後的主鏈—平行鏈機制既不需要消耗大量的算力資源,又保證平行鏈數據的可靠性。


分享到:


相關文章: