# Polkadot 的共識機制(NPOS) ## 共識機制(Consensus Mechanism) - Proof of Work(POW): 藉由解決一個數學難題以取得驗證交易和挖掘新區塊的權利。 - Proof of Stake(POS): 根據代幣持有量而非算力參與區塊生產,實際應用上會有營運礦池或代幣數量等等門檻使得完整參與的驗證者數量有限,進而導致一定程度中心化。 - Nominated Proof of Stake(NPoS): 將驗證者和提名人角色分開,以最大化鏈的安全。驗證者負責生產新區塊、驗證平行鏈區塊並保證最終性(finality)。提名人可以選擇支持他們信任的驗證者。 ## Polkadot 的混合共識 結合兩種共識機制:Polkadot 將兩種共識機制(BABE 和 GRANDPA)結合起來,形成混合共識。 - BABE: 負責快速生成新區塊。 - GRANDPA: 決定生成新區塊為的最終結果 混合共識的概念過去也曾被應用在以太坊的共識機制轉換上。 Polkadot 的混合共識使得區塊鏈系統能夠既快速又安全地運作,同時確保了區塊鏈上的交易最終會被確認。 ## BABE (決定區塊生產者的機制) ### 運作方式: - Time Slot: 分為多個epoch 而每個 epoch 包含多個 slot,6 秒為一個slot,會更新一次區塊鏈。 - 抽籤決定: 以 epoch 為單位在新epoch開始時對所有驗證者透過抽籤的方式,決定哪些在該 epoch 有生產新區塊資格。([什麼是 Verifiable Random Function (VRF)?](/VNWEBbEVQkO2e3DFwD3WRw)) - 區塊生產競賽: 獲得資格後,多個驗證者開始競賽生產區塊,目標為將最多新區塊傳播到大部分網路的驗證者。 - 避免空閒: 若沒有驗證者生產區塊,則由備用驗證者來生產區塊。 演算法細節眾多,可參考官方文件 [link](https://spec.polkadot.network/sect-block-production) > 當沒有任何驗證者贏得生產區塊的權利 (VRF 結果沒有達到 Winning threshold),將會採用 Secondary slots 中所計算好的備用驗證者來產生區塊,以確保區塊持續的產生。 ### 特性: - 公平性: 根據驗證者的質押代幣量和隨機性,將區塊生產的機會分配給不同的驗證者,也透過競爭的方式決定最終驗證者。 - 效率: 約 6 秒更新一次鏈且可一次新增多個新區塊,生產過程相對高效。 - 容錯性: 即使部分驗證者出現問題,也有備用驗證者不會影響整個網路的運作。 ### 優點 - 確保的去中心化: 防止少數幾個驗證者壟斷區塊生產權。 - 提高安全性: 透過分散化的方式,提高區塊鏈的安全性。 - 提升性能: 透過高效的新區塊生產機制,提升區塊鏈的性能。 ## GRANDPA (最終性裝置) ### 運作方式: - 多輪投票: 驗證節點會對區塊進行多輪投票,當超過 $2/3$ 的驗證節點對某個區塊達成共識後,這個區塊就被認為是最終的,無法被更改。 演算法細節眾多,可參考官方文件 [link](https://spec.polkadot.network/sect-finality) ### 特性: - 鏈上共識: 達成共識後一次加入整個鏈(多個新區塊),而不是只新增單個區塊。 - 容錯性強: 能夠容忍最多 $1/3$ 個節點出現故障的情況下正常運作,確保系統的可靠性。 ### 與其他機制的比較 #### 概率最終性(Probabilistic Finality) vs. 可證明最終性(Provable Finality): - 概率最終性: 如像 BTC 使用 POW 最長鏈機制,只能提供概率上的最終性,但無法絕對的保證經確認的區塊不會被更改,掌控大量算力仍可能對區塊鏈進行攻擊。 - 可證明最終性: 在 GRANDPA 演算法下,且一旦一個區塊被確認為最終,它就永遠不會被回滾,但也相對增加叛徒節點的淺在風險。 ### 優點 - 安全性: 防止壞人篡改已經確認的交易。 - 可靠性: 即使網路出現故障,也能快速恢復。 - 去中心化應用: 可靠的基礎設施,讓開發者可以在此基礎上構建各種去中心化應用。 ## BABE + GRANDPA BABE 與 GRANDPA 的結合: Polkadot 的區塊鏈透過 BABE 生成新區塊,而 GRANDPA 則負責確認這些區塊的最終性。 ### 運作方式 - 優先選擇 GRANDPA 完成的鏈: BABE 必須優先選擇那些已經由 GRANDPA 確定為最終的鏈。 - 主要區塊(primary block) 優先: 即被 2/3 節點認證的區塊,在多條候選鏈中,BABE 會選擇包含最多「主要區塊」的那條鏈。 - 最長鏈不一定獲勝: 即使某條鏈的新區塊數量最多,但如果它的「主要區塊」數量較少,也可能不被選中。 ### 參考下圖: #### 黑色區塊: 已完成最終性的區塊。 #### 黃色區塊: 尚未完成最終性的區塊。 #### 1: 主要區塊,代表更廣泛的共識。 #### 2: 次要區塊,代表較少的共識。 ![](https://wiki.polkadot.network/assets/images/best_chain-52a3da00fb2f804a198c73690fcedc4f.png =300%x) 選擇第2條 因為他同時符合主要節點最多 + 接在正確的Block上 ## BEEFY BEEFY 是 Polkadot 生態系統中的一個協議,主要用來實現不同區塊鏈之間的互操作性,特別是與那些沒有原生支持 Polkadot 互操作性的區塊鏈(如以太坊)進行橋接,實現跨鏈的數據傳遞和價值交換。 ### 運作方式 - GRANDPA 的輔助: BEEFY 建立在 GRANDPA 協議的基礎上。GRANDPA 負責確定 Polkadot 區塊的最終性。 - 驗證者簽名: 在 Polkadot 上,驗證者會對每個最終化的區塊進行簽名。這些簽名會被記錄在 BEEFY 中。 - 輕客戶端驗證: 其他區塊鏈上的輕客戶端可以通過驗證這些簽名,來確認 Polkadot 網路所處的狀態。 - Merkle 山脈範圍 (MMR): BEEFY 使用 MMR 這種高效的數據結構來儲存和管理這些簽名,使得驗證過程更加高效。