迅雷鏈采用了同構多鏈架構,將不同的賬戶錨定在不同的同構鏈上,然后接入層將交易路由到發送方所在的鏈上進行區塊打包與共識。
共識成功的區塊中的交易會根據接收方所在的鏈的不同,跨鏈轉發到相應的鏈上。若交易接收方與發送方同屬于一條鏈,則不再進行交易轉發。
在每一條同構鏈上,驗證人節點對打包好交易的區塊進行共識。共識采用優化過的 PBFT 算法。
以處于某一區塊高度的共識操作為例,由于共識的達成需要超過 2/3 的節點確認,因此每一次共識可能需要多輪投票才能達成。
與傳統的 PBFT 算法類似,對于每一輪共識操作,又包括三個階段: Propose,Prevote 和 Precommit。
當在某一輪達成共識(收到+2/3 的 Precommit 投票)后,就會進入對下一個高度的共識,從第 0 輪開始。下面簡單介紹下詳細的步驟:
首先介紹一個鎖定區塊的概念,表示在某個特定的高度和輪數,節點對某個塊收到超過節點總數 2/3 的 Prevote 投票集合后,則此節點對于此高度此輪的區塊進行鎖定。也就是說,節點以鎖定區塊來表示對某一個區塊的認可。
Propose 階段:系統中所有驗證人節點輪流作為提議者提出提議,而系統中非提議者的節點在收到提議后,就會進入 Prevote 階段。如果當前節點此前存在已鎖定區塊,則還需要收集所有針對已鎖定區塊的 Prevote 投票。
PreVote 階段:當節點進入到 Prevote 階段后,每個節點廣播自己的PreVote 投票。
具體的,如果當前區塊高度或投票輪數高于此前已鎖定的區塊高度或輪數,則將原鎖定的區塊進行解鎖。
如果此時節點仍含有未解鎖的區塊,則對此鎖定的區塊投 PreVote 投票。或者如果節點收到合法的 Propose 區塊,則對此區塊投 ProVote 投票。
當階段超時或者接收到大于 2/3 的針對某個塊的投票后,則節點鎖定此區塊并進入。
PreCommit 階段:當節點存在已鎖定區塊,則對此區塊投 PreCommit 投票。當節點收到針對已鎖定區塊大于 2/3 的 PreCommit 投票是,就可以將這個塊 Commit,并且進入針對下一個高度塊的共識。
若 PreCommit 階段定時器超時,則節點保存已鎖定區塊,然后重新返回到 Propose 階段。
各節點通過在以上階段上循環,對區塊進行一致性共識。與 PBFT 算法類似,迅雷鏈共識也經過了三階段提交,但通過引入區塊鎖定操作,通過緩存待確認區塊,降低了未達成共識情況下重復通信區塊帶來的網絡壓力,從而提升了共識效率。
版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。