
編者按:本文來自PolkaWorld(ID:gh_6c4c2038ddba),Odaily經授權轉載。
),Odaily經授權轉載。
),Odaily經授權轉載。
mdnice編輯器
),Odaily經授權轉載。
mdnice編輯器
區塊鏈節點使用共識引擎在區塊鏈狀態上達成統一。本文介紹了區塊鏈系統中共識的基本原理,共識如何與Substrate 框架中的runtime 交互,以及框架中可用的共識引擎。
mdnice編輯器
區塊鏈runtime 是一個狀態機[1]。它有一些內部狀態和狀態轉換功能,允許它從當前狀態轉換到未來狀態。在大多數runtime 中,有些狀態具有到多個未來狀態的有效轉換,但必須選擇一個轉換。
一些初始狀態,叫做“創世”
mdnice編輯器
最終(當前)狀態
mdnice編輯器
Aura (Round Robin)
mdnice編輯器
PoW
在中心化系統中,中心化的權限通過按照他們看到的順序記錄狀態轉換,在相互排斥的備選方案中進行選擇,並在發生衝突時選擇競爭備選方案中的第一個。在去中心化系統中,節點將看到不同順序的交易,因此它們必須使用更精細的方法來排除交易。更複雜的是,區塊鍊網絡力求容錯,這意味著即使某些參與者不遵守規則,系統也應繼續提供共識的數據。
mdnice編輯器
Substrate 提供多種區塊構造算法,還允許你創建自己的:
BABE (基於插槽)
mdnice編輯器
分叉選擇規則是一種算法,它獲取一個區塊鏈並選擇“最佳”鏈,從而選擇應該擴展的鏈。 Substrate 通過SelectChain 展現了這個概念。
mdnice編輯器
最長鏈規則
mdnice編輯器
GHOST 規則
PoW
mdnice編輯器
區塊生產
在像比特幣這樣的PoW 系統中,任何節點都可以在任何時候生成一個塊,只要它解決了計算密集的問題。解決這個問題需要CPU 時間,因此礦工只能根據計算資源的比例生成塊。
插槽
Substrate 提供了一個PoW 塊生產引擎。
mdnice編輯器
插槽
mdnice編輯器
基於插槽的共識算法必須有一組已知的驗證人,這些驗證人可以生成塊。時間被分配到不同的插槽中,在每個插槽中只有一些驗證人可以產生塊。在每個插槽中,驗證人可以編寫塊的細節因引擎而異。 Substrate 提供Aura 和Babe,這兩個都是基於插槽的區塊生產引擎。
最終性
任何系統中的用戶都想知道他們的交易何時完成,區塊鏈也不例外。在一些傳統的系統中,最終性發生在收據被移交或文件被簽署時。
在使用最終性小工具的系統中,必須修改分叉選擇規則以考慮最終性遊戲的結果。例如,節點將選擇包含最近完成的塊的最長鏈,而不是選擇最長鏈的周期。
Aura
mdnice編輯器
BABE
mdnice編輯器
mdnice編輯器
mdnice編輯器
PoW
mdnice編輯器
GRANDPA
mdnice編輯器
mdnice編輯器
mdnice編輯器
為了適應這些共識特徵,Substrate 有一個DigestItem 的概念,一個從節點的外部(共識所在的地方)傳遞到runtime 的消息,反之亦然。
了解更多
mdnice編輯器
BABE Research[7]
GRANDPA Research[8]
了解更多
了解更多
mdnice編輯器