將賬號看成一個節點,A 轉賬給 B,則在 A 節點到 B 節點之間新增一條有向邊,邊上的數 字表示轉賬金額。一個區塊內的所有交易可以構成一個圖。舉一個例子,假設一個區塊中包含如 下一些交易 {A 轉帳給 B 10 個 token,A 轉帳給 C 5 個 token,D 轉賬給 F 3 個 token,E 轉賬給 G 2 個 token},如下圖:
從圖上明顯可以看到這些交易被劃分為三個子連通圖:{A,B,C}, {D,F} 和 {E,G},同一個 連通圖內的交易存在依賴關係,只能序列執行,但不同連通圖之間是可以並行執行的,比如 D轉賬給 F,E 轉帳給 G 的先後執行順序只是在中間臨時狀態不同,但不會影響區塊最終的狀態。
2.2)智慧合約交易並行化
智慧合約的執行邏輯上可以分成兩部分:一部分用白色標識 EVM 解釋執行部分,另外一部分用灰色標識真正改變世界狀態的部分。灰色部分是影響最終世界狀態的關鍵組成部分。Dora網路在智慧合約的執行過程中收集智慧合約所依賴的外部 賬號的世界狀態,也收集最終影響的外部賬號的世界狀態。只要一個智慧合約所依賴和改變的賬號集合與另外一個智慧合約所依賴和改變的賬號集合 有交集,這兩個智慧合約是連通的。將一個區塊中所有的智慧合約交易劃分成不同的連通子 圖,各個子圖之間可以並行執行,示意如下圖:
3)Dora網路橫向擴容
Dora 以子母鏈的方式對區塊鏈做橫向擴容。透過把智慧合約集合劃分成一些獨立 的子集(基本都是按 dApp 來劃分),讓這些子集都獨立執行在一條子鏈上,讓主鏈的交易得以分流,相當於在輸入集上做了一次分片處理。子母鏈均採用賬號模型,賬號可以在子鏈和母鏈上共用的,但其在不同鏈上的狀態會分別記 錄,同一個賬號在不同鏈上各自記錄在該鏈上的世界狀態。Dora網路的字母鏈結構如下圖:
3.1)子鏈安全性
Dora網路主鏈每隔一段時間子鏈中生成區塊的礦工負責把還未記錄在主鏈上的子區塊資訊 ChildChainBlock 打包遞交到主鏈上,但注意母鏈上不會記錄完 整的子區塊資訊,而只是記錄子區塊頭資訊,這些資料僅僅只是記錄,母鏈的礦工打包時不負責驗證。為了保證子鏈資料的安全性,Dora網路設計了一個新的監察者角色。
監察者同時會監聽母鏈和子鏈的所有交易,當檢測到母鏈上有子鏈區塊打包訊息 Child- ChainBlock 時,結合之前收到的子鏈交易資料去做驗證,一旦檢測到有子鏈區塊存在問題,則把證據遞交到母鏈上,母鏈的礦工檢查確認後會對這條特定子鏈的打包礦工進行懲罰。
3.2)資料剪枝和快照
為了解決資料膨脹問題,Dora網路母鏈支援子鏈區塊資訊的剪枝裁剪,記錄在母鏈上的子鏈的 資料只保留近期區塊的資料(比如 2048 個區塊),更久之前的資料可以從母鏈上移除。
同時母鏈還支援快照,一個快照包含當前區塊所有賬號的世界狀態資訊,新的節點可以只從 某一個快照塊出發從而快速同步,甚至輕量級節點可以刪除快照以前的所有區塊資料。
3.3)跨鏈交易
通常來說一種代幣只會在一條特定子鏈內部流通運轉,Dora網路設計了一個特殊的 CrossChain- Transaction 交易能讓同一賬號內的代幣在子鏈和母鏈上互相流通。
CrossChainTransaction: {
blockno:區塊編號,rawtransaction 這筆交易在具體哪個區塊內blockhash:blockno 對應區塊的 Hash
merklepath: 驗證 rawtransaction 是否在區塊 blockno 內的默克爾樹路徑rawtransaction:{
owner: ""0xfbc2a4...ed"",
symbol: “UT”,
value: 100,
direction: 0 or 1 (0 表示從子鏈到母鏈,1 表示從母鏈到子鏈)
}
假定賬號 A 轉移 100 個 UT 到母鏈上,當跨鏈交易發生時:
1. A 先在 UT 子鏈上發起一筆特殊的轉賬交易,表示將 100 個 UT 從子鏈賬號 A 轉移到母鏈賬號 A;
2. 該特殊交易在子鏈上得到確認後,等待子鏈的礦工將包含該交易的區塊資訊記錄到母鏈上;
3. A 接著在母鏈上發起一筆從子鏈到母鏈的 CrossChainTransaction 交易,附帶上步驟 1 的轉賬交易,區塊高度和 merkle 路徑供母鏈做驗證;
4. 母鏈礦工驗證 CrossChainTransaction,如果驗證透過則打包進母鏈區塊,並修改母鏈賬號 A 的狀態記錄轉入 100 個 UT; 反之,代幣可以遵循同樣的規則就可以從母鏈上再轉移回子鏈,這種方案的好處是整個轉移過程中代幣還保留在同一個賬戶下,不像其他跨鏈解決方案引入額外的受控制賬戶。
Dora網路母鏈上設計了一個特殊的 TokenSwapAction,允許兩種代幣之間的原子互換,需要攜帶雙方簽名的訂單資訊,並同時會檢查雙方的餘額來決定是否能執行互換。
TokenSwapAction:
{ taker: "LRC",
takerAddr: “0xfbc2a4...ed”takerValue: 1000,
maker: "RDN",
makerAddr: “0xabc35e...ef”makerValue: 500, takerOrderWithSignature:makerOrderWithSignature:
}
透過這個原子互換代幣操作 TokenSwapAction 和跨鏈操作 CrossChainTransaction,可實現子母鏈之間的跨鏈交易。
4)DVBC共識演算法
為了平衡高效能和高安全的兩個需求,Dora網路提出了一種兼顧安全和效率的混合共識演算法DVBC(Delegate Verifiable BFT Consensus)。DVBC 基於 DPoS,VRF和 BFT,分為 3 個層次。假設 M 個節點,一共選出 N + 1 個節點,N 初始取為 21。在每一輪共識開始時,Dora網路首先使用第一層演算法 DPoS 根據選票的大小從 M 個節點中選擇出得票數排名前N /3 個節點,這些節點會自動成為本輪的記賬者。第二層演算法將剩下的節點 M − N /3 作為候選節點,在這些節點中採用可驗證隨機數 VRF 演算法隨機挑選出其中的 2*N/3+1 個候選節點作為 本輪的記賬者。最後一層運用 BFT 演算法在 N + 1 個記賬者之間來達成區塊共識。該共識演算法能 保證在 N + 1 個節點中只要不超過 N /3 個作惡節點,區塊的正確性仍然得以保證,而且不存在 任何分叉,防止超級節點聯合作惡。此外,由於其他候選節點也能被選中作為記 賬者,能讓更多的節點願意作為候選節點,從而增加網路的安全和魯棒性。
考慮到每個 dApp 對安全和效能的要求不同,Dora網路允許在建立子鏈的時候指定子鏈的共識 演算法:DPoS+VRF,BFT 或者兩者混合。
4.1)BFT演算法並行最佳化
假設每個區塊的 propose, prevote, precommit, commit 四個狀態的時間分別為 T1,T2, T3,T4,按序列執行生成和確認 N 個區塊所需要的時間為 N ∗(T1 + T2 + T3 + T4)。
從流水線的角度來考慮這個問題,四個狀態可以有序並行執行,理想情況下,如圖11所示, 按照流水線的方式執行生成和確認 N 個區塊所需要的時間為 N ∗ T1 + T2 + T3 + T4。當 N 足 夠大時,經過這種流水線操作後,時間近似為 N ∗ T 1。
Dora網路和區塊鏈生態一起成長,持續關注區塊鏈領域最新的研究方向,吸收和改進已有的研究成果。
更多區塊鏈資訊:www.qukuaiwang.com.cn/news