本文關于支撐 Polkadot 的技術。Polkadot 是具有異構分片的分片區塊鏈。在這種情況下,分片意味著將工作拆分到多個子區塊鏈上,稱為平行鏈。異構意味著每個區塊鏈都有自己的狀態轉換功能,該功能專為特定用例而構建。不同類型的交易會有不同的歸屬地,這使得特定場景的鏈可以最有效地為其用戶服務。Polkadot 為所有平行鏈提供安全和消息傳遞功能。
這篇文章主要是為對區塊鏈共識有一定了解的技術讀者寫的。我希望它對除了開發者以外的人有用,并為大家提供對基礎層區塊鏈面臨的問題和挑戰以及 Polkadot 如何解決這些問題的見解。我不會詳細介紹我們的解決方案的每一個細微差別,但我會深入描述我們考慮的事物類型以及如何保證我們的目標實現。
Polkadot 之前的鏈
對區塊鏈的簡化理解只涉及一條單鏈,從這條鏈的創世區塊延伸到其盡頭。對于許多人來說,這是唯一重要的鏈概念,它代表了所有已經發生并已被網絡同意的狀態轉換。任何區塊鏈共識系統的最終目標都是為觀察者提供這一事實來源。然而,這條單鏈,我們可以稱為最終鏈或規范鏈,只是可能存在的許多可能的競爭鏈中最后剩下的幸存者。區塊鏈共識算法的作用是從許多可能的鏈開始,最終只確定其中一個。
區塊生產者可以產生下一個區塊,但一次可能有多個獲勝者。在工作量證明中,礦工通過找到一種方法來生成一個新塊,當該塊 hash 到一個低于某個困難目標的唯一隨機數,從而獲得在給定塊之上的生產塊的權利。在充分競爭的環境中,礦工可能需要大量嘗試才能找到滿足此條件的區塊。作為參考,在撰寫本文時,比特幣網絡的累積哈希率為每秒 162 Exahashes,這意味著比特幣礦工總每秒要嘗試 162 萬億次來獲得貢獻下一個區塊的權利,難度目標設定為平均每 10 分鐘只有一個哈希值低于目標值。請注意,多個礦工可以大致同時找到一個解決方案,該解決方案在區塊鏈中引入了一個小分叉。未來的礦工將不得不選擇在哪些區塊上進行開采,這可能會導致分叉變長。規則是遵循最長的鏈,對于從過去的區塊開始的攻擊者來說,追趕并壓倒更長的鏈變得越來越困難。因此,在最長鏈中足夠深的塊可以被認為是概率上最終的塊。
Ouroboros 系列權益證明協議使用稱為可驗證隨機函數 (VRF) 的加密技術,通過將時間劃分為離散的插槽并將每個驗證人從已注冊和質押的驗證人集合(驗證人集合)中分配出來來模擬工作證明每個 slot 產生一個可驗證的隨機值的機會,如果低于閾值,則作為允許驗證人創建新塊的憑證。與工作量證明一樣,多個驗證人可能會產生一個低于閾值的 VRF 值并同時創建塊,從而導致分叉。驗證人不會激勵故意引入分叉,他們會受到 slash 懲罰來扣除他們的鏈上的質押。這些協議還提供了最長鏈分叉選擇規則下的概率確定性。
與工作量證明中的礦工不同,Ouroboros 式網絡中的驗證人只需要運行一次計算就有機會創建一個塊,而不像礦工必須做的大量哈希值。這允許驗證人將大部分時間花在構建帶有交易的區塊上,并隨后允許區塊鏈包含更有價值的計算。
Polkadot 的中繼鏈使用一種稱為 BABE 的協議,它是 Ouroboros Praos 的演變。BABE 對 Praos 的具體改進是 BABE 避免了依賴中心化 NTP 服務器讓驗證人知道當前時間。
BABE 是分叉的,具有概率確定性
雖然概率確定性很好,但等待一個塊在最長鏈中達到一定深度是一種效率低下的機制,因為它旨在適應預期的最壞情況,即網絡處于一定程度的網絡壓力和攻擊之下。可能大多數網絡已經就哪些區塊是規范鏈的一部分達成了一致。事實上,在幾乎所有情況下,網絡都能夠在一個區塊達到最長鏈的最小深度之前就已經達成共識。為此,我們引入了確定性小工具(finality gadget)和絕對確定性(absolute finality)的概念。最終性小工具是在概率性最終區塊鏈之上運行的二級共識協議,它證明了網絡將認為哪些區塊是最終區塊的更快協議。這些共識協議引入了進一步的經濟安全屬性:在不 slash 懲罰至少 1/3+ 驗證人集合總權益的情況下,確定性小工具永遠不會最終確定 2 個競爭塊。
Polkadot 的中繼鏈使用稱為 GRANDPA 的確定性小工具。它可以在任何特定長度的子鏈上實現近乎瞬時的最終確定性,并且通過讓驗證人反復對他們認為位于最長鏈頭部的塊進行反復投票來粗略地發揮作用。GRANDPA 目前在 Polkadot 和 Kusama 網絡上運行,在撰寫本文時擁有 900 個驗證人的 Kusama 上,它可以在 3 秒內實現新區塊的最終確定性。
驗證者對他們認為最好的鏈進行投票,該算法讓他們就要最終確定的公共塊達成一致
BABE 和 GRANDPA 的結合允許 Polkadot 僅使用來自單個驗證人的輸入來樂觀地增長鏈,這很快,并通過獲得絕大多數驗證人的簽名在后臺完成。這種屬性的組合意味著在良好的網絡條件下,Polkadot 實現了高吞吐量和低延遲,而在糟糕的網絡條件下,中繼鏈實現了高吞吐量和(更)高延遲,因為 GRANDPA 將轉向跟蹤 BABE 的最終性。
分片:通過子集選擇進行擴展
Web3基礎設施提供商Ankr與Polygon Labs達成合作:4月3日消息,Web3基礎設施提供商Ankr發文稱,已與PolygonLabs合作,為尋求使用Polygon Supernets創建特定應用區塊鏈的Web3開發者增強開發體驗。Ankr App Chains是Polygon Supernets的基礎設施提供商與實施合作伙伴,Ankr可為創建特定應用的區塊鏈(包括Polygon Supernets)提供一個端到端的工程解決方案。[2023/4/3 13:42:00]
讓我們回到分片。分片的目標是通過以交易的形式在許多稱為分片的鏈上拆分工作來提高吞吐量。分片由頂級區塊鏈引用和保護。在 Polkadot 中,頂級區塊鏈稱為中繼鏈,分片是平行鏈。中繼鏈上出現的大多數數據都是包含對新平行鏈區塊的引用的交易,這使得處理中繼鏈本身的任何分叉變得便宜。請注意,我在這里區分了中繼鏈的任意分叉和最終的中繼鏈。我們在這里的大部分工作是確保中繼鏈的最終部分(用戶將其視為規范鏈)僅包含對有效平行鏈塊的引用。
此圖或類似圖在互聯網上廣泛分布。它們展示了驗證人如何被分成組并分配給平行鏈,并從收集人那里獲得平行鏈區塊提案。在這篇文章中,我對許多更細微的概念進行了視覺解釋。
如果每個驗證人只需要檢查一些提交的平行鏈塊,而不是全部,分片就只是對可擴展性的改進。如果有 10 條平行鏈,并且每個驗證人必須檢查所有 10 條鏈中的所有區塊,我們不妨將所有交易放在一個區塊鏈上,然后收工。訣竅是找到一種方法,讓每個驗證人在保持經濟安全的同時盡可能少地做驗證工作:提倡不良平行鏈區塊的驗證人在經濟上不會受到激勵。更具體地說,在他們所有質押被懲罰之前,將一個壞的平行鏈區塊包含在最終的中繼鏈中,一組對抗性的驗證人應該不可能串通一氣。驗證人,實際上是驗證人的一小部分,可以串通以獲得中繼鏈的未最終分叉所引用的不良平行鏈塊,但我們保證這些分叉在最終確定之前被忽略,并且違規者被懲罰。
當引用它們的中繼鏈塊最終確定時,平行鏈塊被最終確定。
當引用它們的中繼鏈塊最終確定時,平行鏈塊被最終確定
讓我們對我們要防御的對手做出一些具體的假設:
攻擊者最多可以控制所有驗證人的 1/3,并且可以控制所有這些驗證人的行為完全符合預期。
攻擊者可以查看誠實驗證人人與其控制的驗證人之間的所有網絡消息。
攻擊者可以隨時拒絕最多 X% 的驗證人,阻止他們發送或接收消息。
在攻擊者開始拒絕任何驗證人之前需要一個固定的延遲。
在這篇文章中,我不會為該協議設置正式的安全證明,但這些約束應該可以讓我們深入了解我們打算防御的攻擊類型。
事實上,我們平行鏈共識的基本單元實際上并不是平行鏈,而是我們稱之為可用性內核或簡稱內核的東西。這些類似于 CPU 內核:它們并行運行,并在離散的 slot 中安排工作。每個平行鏈都有自己的專用內核,這意味著它總是被調度到一個特定的內核上。但是,我們也可以將多個鏈多路復用到一個內核上。唯一的區別是調度算法。
內核服務是中繼鏈吞吐量的有效描述。內核直接對應于驗證人需要做的工作量。每個內核最多可以在每個中繼鏈塊處理一個平行鏈塊,在峰值。
在任何分片區塊鏈系統中,只有一些驗證人檢查每個平行鏈塊,數據可用性是確保檢查平行鏈塊所需的數據可以恢復以進行欺詐檢測的關鍵組成部分。可用性內核由中繼鏈管理,并跟蹤哪些平行鏈塊正在等待數據可用性。可用性內核的主要目的是作為調度原語,并在數據可用性比平時慢時提供背壓。
可用性內核的邏輯如下所示。當內核準備好接受新的平行鏈塊時,內核是空的,此時它們被占用。然后,數據要么變得可用,要么可用性過程超時。那時,內核再次變空。
將平行鏈共識劃分為 5 個不同的協議是有幫助的,這些協議在中繼鏈共識中交織在一起。
收集
支持
可用性
審批檢查
爭議 Disputes
Collation 收集是創建平行鏈塊的過程。收集人構建一個平行鏈塊并將其發送給驗證人。
Backing 支持是由一小組中繼鏈驗證人最初檢查平行鏈塊并在中繼鏈上注冊的過程。支持的主要副產品是,如果后來的協議失敗,它要求驗證人將自己置于危險之中。
Availability 可用性是支持驗證人分發檢查平行鏈塊所需的數據片段并確保以后可以檢查的過程。
Approval Checking 批準檢查是隨機驗證人恢復數據并執行平行鏈區塊的過程。他們根據是否認為平行鏈區塊有效來批準或發起爭議。
Disputes 爭議是解決驗證人對平行鏈區塊的沖突意見、忽略不良平行鏈區塊并懲罰違規者的過程。爭議僅作為故障保險存在,預計不會經常觸發。
Web3日活用戶數排名:BNB Chain第一約110萬,Polygon第二約39萬:金色財經報道,數據網站Token Terminal推特發文稱,各主流公鏈和應用的Web3日活躍用戶數排名顯示如下:
1、BNB Chain:110萬;
2、Polygon:39萬;
3、Ethereum:34萬;
4、Solana:12萬;
5、Fantom:5.82萬;
6、Arbitrum:5.8萬;
7、OpenSea:5.4萬;
8、Optimism:4.9萬;
9、Uniswap:4.4萬;
10、Avalanche:3萬。
有從業者分析稱,這些數據存在水分,需要清洗掉“機器用戶”。這意味著,Web3的真實用戶數可能要低于該數據。考慮到一個真實用戶可能存在多個地址,Web3用戶數或許要遠小于該數據。[2022/12/19 21:52:50]
請注意,驗證人可能同時參與這些協議中的每一個,并且通常是它們的多個實例化。例如,驗證人可能在參與支持較新區塊和對更舊區塊爭議的同時,參與對管道更下游的平行鏈區塊的批準投票。
這種內部并行性也反映了實現的架構:這些協議中的每一個都被實現為一個獨立的子系統,并且所有子系統都并行運行。每個節點總是在做一些事情。
提交區塊和增長平行鏈
本節介紹平行鏈如何與中繼鏈同步增長。
將潛在的平行鏈塊包含到平行鏈中需要 2 個步驟。第一個是中繼鏈塊引用平行鏈塊以及關于其有效性的證明。下一步是檢查平行鏈所需的相應數據。
由于中繼鏈可以有短期分叉,每個平行鏈也可以有短期分叉。如果在給定高度有兩個相互競爭的中繼鏈塊 A 和 B,并且 A 包含平行鏈塊 P,B 包含平行鏈塊 P',那么這也構成了平行鏈中的一個分叉。
出于本文的目的,我們將考慮 Polkadot 中繼鏈狀態機的簡化版本。提醒大家一下,中繼鏈分支中的每個塊都代表從前一個狀態到下一個狀態的轉換。
每個塊表示從區塊鏈的先前狀態到某個新狀態的原子變化單元。賬戶余額、可用性核心、治理建議和智能合約都是區塊鏈狀態的一部分。塊通過固有的 logi 更新狀態
在構建區塊鏈時,典型的設計模式是節點收集信息并在鏈下工作,然后將工作記錄放在鏈上。例如,您可以通過相同的視角查看交易包含。節點參與鏈下八卦協議以收集新交易,然后區塊作者將其選擇的交易捆綁到一個區塊中。平行鏈的工作方式相同:大部分工作都是在鏈下進行的,但工作記錄保存在中繼鏈上,以提供共識的規范指示。
節點為發展平行鏈所做的鏈下工作涉及整理、支持和可用性。
節點監視中繼鏈的最新塊以確定它們應該做什么工作。
校對由平行鏈頭和 PoV 或有效性證明組成,這是檢查從前一個平行鏈頭到當前頭的轉換所需的所有數據。只有頭部才能在鏈上運行,但必須提供 PoV。我們使用糾刪碼來確保 PoV 可用:數據被分成稱為塊的塊,每個驗證器一個塊,任何足夠大的塊子集都可以恢復完整數據。這可以防止節點脫機或謊報擁有自己的數據。
在此示例中,數據被拆分為 9 塊,任何 4 塊或更大的子集都可以恢復完整數據
當驗證者觀察到可用性核心是空的,并且在該核心上調度的平行鏈是節點被分配到的平行鏈時,它將嘗試從整理者那里收集整理并參與支持過程。新的潛在平行鏈區塊以及驗證者的證明通過八卦系統傳播。這意味著每個連接良好的節點都知道每個下一個潛在的平行鏈塊。下一個中繼鏈區塊作者監控網絡狀態并選擇一組新的平行鏈區塊以支持他們創建的中繼鏈區塊。
這是一個粗略地描述驗證器為支持過程執行的邏輯的流程圖。只要平行鏈的可用性核心為空,它們就會執行此邏輯。
該圖顯示了驗證者如何從收集者那里獲得新的平行鏈區塊,并與其他驗證者合作以從指定的驗證者那里獲得足夠的支持。未分配到平行鏈的驗證者仍然會監聽證明,因為無論哪個驗證者最終成為中繼鏈塊的作者,都需要為多個平行鏈捆綁已證明的平行鏈塊并將它們放入中繼鏈塊中。
一旦平行鏈區塊在鏈上得到支持(即,它的標頭與選定驗證者的證明一起出現在中繼鏈區塊中,并且通過了各種健全性檢查),它就開始占據可用性核心。
當驗證器觀察到可用性核心被占用時,如果它不是最初證明該塊的驗證器組的一部分,它會嘗試獲取其擦除編碼的 PoV 塊。否則,驗證器負責將塊分配給相應的驗證器。
可用性分布:非支持驗證器向支持驗證器請求它們的塊。一些非支持驗證器可能無法直接連接,但只要足夠,就可以了。
驗證器從需要分發它們的支持驗證器請求他們的數據塊
每個驗證者都會簽署關于它擁有哪些區塊的平行鏈區塊的聲明,并八卦這些聲明。中繼鏈區塊作者在中繼鏈中包含此類語句。一旦 2/3+ 的驗證者表明他們擁有占據核心的平行鏈塊的塊,則認為平行鏈塊是可用的,并被正式包含為平行鏈的一部分,并且核心再次免費。
跨鏈互操作性協議Poly Network宣布支持Layer2網絡zkSync:官方消息,跨鏈互操作性協議Poly Network宣布支持Layer2網絡zkSync,用戶將能夠通過Poly Bridge以更低的成本和更快的速度zkSync和其他超過18條鏈之間轉移資產。[2022/2/17 9:58:25]
如果在一定數量的塊內沒有達到可用性,那么核心被釋放,被認為是超時并且占據核心的平行鏈塊被放棄。
可用性核心邏輯作為回顧
總而言之,支持和可用性協議確保在包含平行鏈塊時,它已得到少數驗證者的證明,并且檢查平行鏈塊所需的 PoV 的可用性已至少得到證明 2/3 的驗證者。換句話說,支持和可用性是關于在游戲中獲得皮膚并執行問責制。下一節將討論 Polkadot 如何確保沒有經過更徹底檢查的平行鏈區塊不會最終確定。
批準檢查和最終確定性
批準檢查是一種機制,驗證者通過該機制隨機選擇檢查可用的平行鏈塊,并將其檢查的意圖和結果傳達給網絡的其余部分。
現在,讓我們將批準檢查的實際過程作為一個黑匣子。我們將首先介紹我們希望該協議做什么的背景知識,以便稍后清楚為什么它會以這種方式運行。
正如我們已經確定的那樣,每個驗證節點都參與了 GRANDPA,即最終性小工具。GRANDPA 以輪次進行,我們可以將每個驗證人在每個 GRANDPA 輪次中所做工作的過度簡化版本視為這些步驟的重復:
下一輪開始
選擇最終目標區塊:我們希望最終確定的最佳區塊
對最終目標進行投票
等待其他驗證者的投票
找到出現在驗證者投票的至少 2/3 鏈中的最高公共塊
完成該塊
回合結束
驗證者在這個過程中唯一的靈活性是在第 2 步:它選擇要投票的區塊作為他們的最終目標。這種選擇稱為投票規則。在基本的 GRANDPA 中,每個驗證者只需選擇他們知道的中繼鏈中最長的分支,并提交該鏈的負責人作為他們的投票。但是,對于平行鏈共識,我們引入了新的投票規則。
GRANDPA 批準檢查的投票規則規定每個驗證者應該:
選擇中繼鏈最長的分支
找到鏈中最高的塊 B,使得當前最終塊和 B 之間的每個塊僅觸發包含驗證者觀察到已被足夠驗證者批準的平行鏈塊。
讓我們分解一下。請記住,一個主要目標是讓網絡只完成實際上好的平行鏈塊,并且讓每個驗證者做盡可能少的工作,以便網絡可以擴展。所以在部分:
找到鏈中最高的區塊 B:我們希望每個節點對符合其他標準的最高區塊進行投票,以便最終性盡可能快地推進。
使得當前最終確定的區塊與 B 之間的每個區塊:投票規則需要驗證者對僅包含良好平行鏈區塊的鏈進行投票。在 GRANDPA 中,對區塊的投票被視為對其所有祖先的投票,因此即使區塊 100 僅包含良好的平行鏈區塊,區塊 99 和 98 也可能不會。因此,投票規則需要找到通過其他標準的中繼鏈塊的最高連續鏈。
僅觸發包含平行鏈塊:回到關于平行鏈擴展的部分,這里所說的是平行鏈塊已通過中繼鏈塊中的可用性證明變得可用,并且平行鏈塊已添加到 平行鏈。尚不可用的平行鏈塊還不算作平行鏈的一部分。
驗證者觀察到已被足夠多的驗證者批準:這指的是我們將在下面描述的批準檢查機制,這是一種讓驗證者對平行鏈塊是好的有高度信心而不必自己檢查的方法 依靠別人的檢查。
下面是 3 個示例,說明如何應用投票規則來選擇要對最終確定的區塊進行投票。
在第一個示例中,這顯示了鄰接屬性以及我們選擇最佳鏈的祖先的事實。
在第二個示例中,我們對最終確定的區塊進行投票,因為這兩條鏈都不是最終確定的。
在第三個示例中,整個最佳鏈是可最終確定的,因此我們選擇對此進行投票。
最后,值得注意的是,這個投票規則是一個在每個驗證者上運行的過程,并且他們都可能根據他們看到的中繼鏈塊和批準消息對最終目標有不同的看法。但這很適合 GRANDPA:如果所有誠實的驗證者都運行這個投票規則,那么除非 2/3 的節點同意它可以最終確定,否則任何中繼鏈塊都不能最終確定。
批準檢查會稍微減慢最終確定性,但只是一點點。平行鏈允許有大約 3 秒的執行時間,恢復數據大約需要 1 秒,消息被八卦需要幾秒鐘。在樂觀的情況下,這意味著它增加了大約 5 秒的最終確定性。這是真正的終結,背后有 Polkadot 的全部重量。
因此,讓我們進入批準檢查的過程,以及節點實際上在做什么,以了解哪些平行鏈塊是好的并且已經被足夠多的驗證者檢查。
批準檢查屬性和安全性
批準檢查是驗證者為每個平行鏈區塊運行的子協議。每個驗證器節點都在為每個中繼鏈塊中的每個平行鏈塊運行批準檢查過程。這個過程有幾個特點:
任何特定節點上的進程要么輸出“good”,要么停止。
DCTDAO構建Polygon和Avalanche間跨鏈橋,連接代幣和NFT:9月20日消息,DCTDAO工程師團隊正在Polygon和Avalanche之間建立跨鏈橋,以連接代幣和NFT,使兩個鏈的項目能夠利用彼此的生態系統和技術優勢。此外,不久之后DCTDEX用戶也將能夠在Polygon區塊鏈上交換DCTEX上新的潛在流動性。此次安排進一步促進Polygon、Avalanche和DCTDAO項目之間交叉合作的可能性。
DCTDAO是第一個Gas-less Quantum Proof跨鏈DEX的創建者,該DEX運行在 DCore、Polkadot 、Moonbeam和Avalanche 上,更名為DCTDEX。在當前版本中,DCTDAO已經有一個從以太坊到Avalanche的可操作跨鏈橋,橋費僅為2美元。[2021/9/20 23:37:35]
如果平行鏈區塊是有效的(即通過檢查),那么它最終會在誠實節點上輸出“good”。
如果平行鏈區塊無效,那么它只會在低概率的誠實節點上輸出“good”
請注意,無效情況下的“低概率”大約是數十億分之一,具體取決于驗證者數量和最小檢查者數量等變量。這不是低概率的加密版本,但它適用于加密經濟學。
Polkadot 的安全論點基于 Gambler's Ruin。雖然確實可以進行數十億次嘗試暴力破解該過程的攻擊者最終會成功,但我們將此過程與一個懲罰系統相結合,以確保每次失敗的嘗試都伴隨著攻擊驗證者的全部股權的懲罰。Polkadot 是一個權益證明網絡,在撰寫本文時,每個驗證者都有大約 200 萬個 DOT 權益支持。最有可能的是,每次失敗的嘗試都會導致 10 或 20 個驗證者的 slash。但即使只有 1 個驗證者被削減,很明顯攻擊者的資金會在成功之前迅速枯竭。
我們通過批準檢查的其他一些屬性來實現這一點:
驗證者檢查平行鏈區塊的任務是保密的,直到他們自己披露。
驗證者的分配是確定性生成的。
驗證者在恢復執行這些檢查所需的數據之前廣播檢查平行鏈塊的意圖。
當驗證者廣播一個檢查平行鏈區塊的意圖然后消失時,這會導致更多誠實的驗證者開始檢查。
屬性 1 確保攻擊者不知道要拒絕誰來阻止他們檢查塊。
屬性 2 確保即使攻擊者獲得了幸運的“抽獎”并且有足夠的惡意節點來說服誠實節點已經檢查了某些內容,也很可能有誠實節點將與他們一起進行檢查,并且這些誠實節點將發出警報。
屬性 3 確保誠實節點不會通過向惡意節點請求數據而意外地將自己暴露為檢查者,然后在沒有人注意到的情況下被對手離線。即,如果攻擊者試圖讓檢查者保持沉默,它會被其他人注意到。
屬性 4 確保看似已被 DoSed 的節點將被更多節點替換。批準檢查就像九頭蛇:如果你砍掉一個頭,就會出現另外兩個頭。
下一節將更詳細地介紹批準檢查的實際工作原理。
驗證者檢查什么?
這里驗證者的目標是確定支持驗證者是否參與了任何不當行為。這需要 3 個步驟:
下載 PoV 數據以檢查區塊。這是通過獲取 1/3 的塊并將它們組合以形成完整數據來完成的。
確保 PoV 數據對應于有效的平行鏈狀態轉換。
確保平行鏈區塊頭提交的所有輸出實際上與平行鏈區塊執行的輸出相匹配。
假設> 2/3的節點是誠實的并且已經承諾擁有他們的數據塊,那么恢復可用性永遠不會失敗。這就是為什么僅對可用的平行鏈塊進行批準檢查的原因。
但是,步驟 (2) 和 (3) 都可能失敗。當步驟(2)失敗時,表明狀態轉換本身就是垃圾。當步驟(3)失敗時,表示狀態轉換成功,但中繼鏈上記錄的狀態轉換輸出信息是錯誤的。
在步驟 (3) 中要注意的一個重要情況是平行鏈塊頭包含對 所有 擦除編碼塊的承諾。我們讓驗證器在恢復 PoV 數據后進行額外檢查,即將 PoV 轉換回其糾刪碼形式,并確保標頭中的承諾與所有塊匹配。如果沒有匹配,這可以避免一種攻擊,攻擊者可以有選擇地選擇哪些驗證器可以恢復數據。攻擊的工作方式是這樣的:攻擊者將數據分成塊,并用垃圾替換除 1/3 之外的所有塊。它將 1 個有效塊分配給誠實的驗證者,并給另外 1/3 的驗證者垃圾數據。惡意的 1/3 驗證者保留了其余的帶有有效數據的塊。這意味著有足夠的驗證器 (2/3 + 1) 來考慮可用數據,但如果惡意驗證器拒絕回答有關其 1/3 好塊的請求,則只有垃圾可用。檢查數據的重新編碼是否確實與承諾相匹配,可以徹底擊敗這種攻擊。
如果步驟 (2) 或 (3) 中的任何一個失敗,檢查器將提出爭議并將塊升級到所有驗證器以執行相同的檢查。稍后我們將回到爭議中來討論這究竟意味著什么。
驗證者何時檢查
了解批準檢查系統的關鍵見解之一是每個驗證者都被分配檢查每個平行鏈塊,但這是他們檢查的時間問題。如果驗證者在檢查時間之前發現平行鏈區塊已獲得批準,那么他們根本不檢查并繼續前進。
從 Unix Epoch開始,時間分為 0.5 秒的離散。0.5 秒的選擇是基于小消息通過 gossip 網絡傳播的預期時間。
驗證者打算檢查平行鏈塊的時間以延遲部分表示,它與平行鏈塊相關。延遲批次的范圍從 0 到 MAX_TRANCHES,并且對應于節點意識到平行鏈塊變得可用后的滴答數。節點對第 0 行對應的分期付款的視圖略有不同。
Polynetwork攻擊者歸還價值約9700萬DAI:PeckShield派盾預警顯示,Polynetwork 多簽錢包發生大額轉賬,攻擊者歸還價值約 9700萬 DAI。[2021/8/19 22:23:34]
MAX_TRANCHES 是一個協議參數,它確定檢查每個平行鏈塊需要多長時間。將它設置得太小意味著我們可能會選擇比我們需要的更多的檢查器,從而浪費精力。設置太大意味著檢查平行鏈塊需要很長時間。作為參考,在撰寫本文時,該參數在 Polkadot 和 Kusama 上設置為 89。
刻度是時間的離散度量,基于從 Unix Epoch 開始的半秒增量。
延遲部分是相對于產生中繼鏈塊的偏移量。
第 0 批是特殊的,因為第 0 批中的預期檢查者數量被設計為大致等于 MIN_CHECKERS,這是一個協議參數,指定在一個平行鏈塊被批準之前所需的最小檢查量檢查程序。
作為平行鏈區塊支持組的一部分的驗證者不允許參與批準檢查,因為他們的檢查是多余的。所有其他驗證器在本地運行 VRF 計算,以確定它們要檢查的延遲部分。
分配、批準和未出現
驗證器在批準檢查中發送兩種消息:分配和批準。分配用于傳達檢查平行鏈塊的意圖和資格,并且批準消息表明平行鏈塊已通過所有檢查。
每個驗證者使用 VRF 和平行鏈 ID 和中繼鏈塊 BABE 憑證作為輸入,立即生成一個分配來檢查平行鏈塊。驗證者將其分配保密,直到需要為止。每個分配都唯一且確定地與延遲部分相關聯,延遲部分表示當驗證者被分配檢查平行鏈塊時的延遲部分。
VRF 很重要,因為它意味著接收者可以驗證分配,并且分配的驗證者對分配給他們的延遲部分沒有影響。驗證者確實會通過更復雜的攻擊產生一些間接影響,這些攻擊涉及在 BABE 隨機性有利時故意分叉中繼鏈,但我將把它留到另一篇文章中。
批準是一條簡單的消息,由發布驗證者簽名,表明平行鏈區塊已通過檢查。
當驗證者開始檢查平行鏈區塊時,它所做的第一件事就是將其分配給其他驗證者。這會通知其他驗證者等待相應的批準消息。驗證者完成檢查后,會發出一條批準消息。如果批準消息不在 NO_SHOW_DURATION 內,則其他節點將初始驗證者視為未出現。未出現旨在表明對手觀察到驗證者檢查平行鏈區塊的意圖并試圖讓他們沉默。NO_SHOW_DURATION 是一個協議參數,目前在 Polkadot 上設置為 12 秒。
這是一個顯示 3 種情況的圖表:未出現、已完成的任務和延遲完成。最后一種情況尤其重要,因為它展示了驗證者如何“起死回生”,即使在被認為沒有出現的情況下也能獲得批準。
實現:調度和批準狀態機
關于批準檢查協議的最后一部分將詳細說明用于批準平行鏈區塊的狀態機。
每個驗證器節點都為每個包含的(可用的)平行鏈塊維護一個批準狀態。由于網絡中的時間和異步性,驗證者的狀態版本可能會有所不同。國家讓我們回答以下問題:
平行鏈區塊是否被批準?
T檔的分配是否相關?
在沒有其他輸入的情況下,問題 (1) 或 (2) 的答案可能發生變化的下一個時間點是什么時候?
批準狀態可以通過 3 種方式更新:通過接收新任務、通過接收新批準或通過時間推進。
驗證器運行狀態機,直到問題 (1) 的答案為“是”。在每條輸入之后,他們使用問題 (2) 來確定他們是否應該開始自己檢查平行鏈塊,通過查看他們的分配是否相關。問題 (3) 僅用于優化目的:節點通常并行運行數千個這些狀態機(每個未完成的平行鏈塊一個),并且每次滴答都輪詢所有這些狀態機效率低下。
這是每個驗證者運行的邏輯,直到平行鏈塊被批準
狀態實際包含的是兩部分:
所有收到的作業,按批次排序,并用第一次觀察到的刻度進行注釋。
全部獲得批準。
驗證器在開始檢查之前不會在狀態中包含自己的分配。在產生批準后,驗證者將其包含在狀態中。
這是狀態的可視化表示;它是一個中立的對象,可以根據收到的任務、經過的時間以及獲得的批準來回答問題。
批準狀態中最重要的操作之一是確定要計算哪些分配。我們將全部延遲付款。作業總是與來自同一延遲部分的所有其他作業捆綁在一起。一個節點永遠不會從延遲部分計算一個分配,而不計算它知道的同一延遲部分的所有其他分配。
分配處于以下三種狀態之一:
待定:該任務沒有相應的批準,但它是最近發布的。
已完成:任務有相應的批準。
未出現:該任務沒有相應的批準,最近也沒有下達。
未出現的任務需要由至少一個非空檔覆蓋。也就是說,每個未出現都需要被至少一個分配覆蓋,但期望不止一個(基于參數化)。
通過以下程序確定要分多少次:
分批,從第 0 批開始,直到它們至少包含 MIN_CHECKERS 分配。
取非空檔,每次缺席一張。如果這些非空檔中有更多未出現的情況,請重復步驟 2。
如果所有未出現的任務都完成了,那么平行鏈區塊就被批準了。換句話說,如果有任何分配仍在等待中,那么平行鏈區塊就不會被批準。
如果您在任何時候都用完了可取的部分(最大值是協議參數),則該塊不會被批準。在該協議的實際版本中,對于不采用“未來”的部分以及基于步驟 2 的每次迭代的漂移時間,還有一些進一步的限制。
此流程圖捕獲每個驗證器運行以確定平行鏈塊是否被批準的邏輯。需要注意的是,這僅基于驗證者實際看到的分配和批準。可能存在更改計數過程結果的分配,但如果運行該過程的驗證器未收到它們,則不能考慮它們。
如何計算和解釋收到的任務和批準
此過程的關鍵要點是,如果有足夠的早期分配,則根本不計算后期部分的分配,并且在神秘情況下消失的節點將被替換。
以下是批準計數程序結果的 4 個示例:
每當驗證者運行此批準計數程序并發現需要更多分配時,它就會檢查是否應該觸發自己的分配并開始檢查。驗證器在以下情況下觸發其分配:
驗證者尚未觸發其分配。
分配的部分與國家相關:要么它是國家已經計入的部分的一部分,要么計數程序用完了部分并且分配不在未來。
總結
批準檢查協議是 Polkadot 的主要欺詐檢測機制。在任何事情到達此階段之前,我們已確保檢查所需的數據可用。這種機制要么導致每個平行鏈塊的批準或升級,并且被設計為使試圖消除檢查的驗證者的 DoS 攻擊者被更多的檢查者所取代。批準檢查是九頭蛇。它旨在吃掉攻擊者并在另一端將其吐出。它將它們發送到我們稱之為爭議的系統:Polkadot 的共識法院。
爭議:為金錢而爭吵
當 2 個或更多驗證者對平行鏈塊的有效性存在分歧時,就會發生爭議。雖然本文前面的大部分內容都集中在快樂路徑上,即平行鏈塊實際上是好的情況,但爭議是關于批準檢查器實際檢測到無效平行鏈塊可用的錯誤路徑。
爭議過程相對簡單。它旨在滿足以下目標:
通過所有驗證者的投票來確定平行鏈區塊的好壞。
如果平行鏈塊是壞的,請確保不要最終確定或構建任何中繼鏈塊使其可用。
確保糾紛的輸家受到相應的懲罰。
首先,爭議是關于滿足 Polkadot 更高級別的目標之一:確保沒有任何不好的事情被最終確定。
參與爭議的驗證者在“支持”或“反對”類別中投票。參與是自動的或明確的。
通過支持和批準檢查自動參與。當驗證者為平行鏈區塊發布支持證明或批準消息時,他們自動算作參與了“for”類別。事實上,誠實的驗證者會記錄他們收到的所有最近的支持和批準檢查消息,以便以后提供證據反對他們的同行。
絕大多數驗證者不是自動參與者。這些驗證者明確參與,這意味著他們簽署了“贊成”或“反對”類別的投票。他們在進行與批準檢查員相同的檢查后這樣做,即
下載 PoV 數據
驗證狀態轉換
驗證對狀態轉換輸出的承諾
參與不是強制性的,但只有至少 2/3 的驗證者在一方投票后才能解決爭議。驗證者因參與而獲得獎勵,并因站在多數一方而獲得獎勵。
爭議要么以贊成或反對狀態結束,因為驗證是確定性的。以前的支持和批準聲明(分別標記為 (B) 和 (A))會自動計入“for”列
對爭端的失敗者有嚴厲的處罰。對實際有效的平行鏈區塊提出異議只是浪費時間和帶寬,因此會受到少量懲罰。提交無效的平行鏈區塊是對 Polkadot 的攻擊,因此 slashing 懲罰為 100%。
遠程和本地糾紛
爭議主要是一個脫鏈過程。也就是說,它們發生在“鏈條”的級別,而不是“鏈條”的級別。但是,最終確定的中繼鏈的分叉應該包含爭議記錄。這是因為削減是一個鏈上過程。
當發生爭議時,所有投票都會記錄在鏈的每個分叉上,以觸發罰沒并創建爭議的永久記錄。
遠程爭議,關于中繼鏈的分叉,是指引用了未包含在中繼鏈分叉中的平行鏈塊。
本地爭議,關于中繼鏈的分叉,是指包含在中繼鏈分叉中的平行鏈區塊。
做出這個決定的原因是因為它告訴我們需要放棄中繼鏈的哪些分叉。任何記錄了針對平行鏈區塊的本地爭議的中繼鏈分叉都應該避免,并且不應由誠實的驗證者保存。換句話說,誠實的驗證者觀察到平行鏈塊是壞的,將自動對包含壞平行鏈塊的中繼鏈的分叉發起 51% 攻擊。
最終結果是中繼鏈的最終分叉不包含任何失去爭議的平行鏈區塊。然而,當誠實的驗證者構建新鏈并忽略壞的平行鏈塊時,他們會將新分叉上的爭議作為遠程爭議重播。懲罰得以保留,但罪行的影響已從歷史中抹去。
此圖顯示了有爭議的平行鏈塊是如何根據您正在查看的中繼鏈的哪個分支是遠程或本地的:
關于中繼鏈塊的爭議是本地的或遠程的
爭議和共識規則
與批準檢查一樣,爭議伴隨著誠實驗證者共識參與規則的修改。這些變化有兩個主要目標:
避免最終確定任何涉及不良平行鏈塊的中繼鏈分叉。
避免在中繼鏈的任何分支上構建,該分支指的是壞的平行鏈塊。
這些目標分別對應于 GRANDPA 和 BABE 內部行為的變化。
GRANDPA 投票規則是對批準檢查 GRANDPA 投票規則的修改。它指出:
根據批準檢查投票規則選擇一個區塊。
找到該鏈中的最高塊 B,以便從最后一個最終確定的塊到 B 的所有塊僅觸發包含沒有持續爭議或已丟失爭議的平行鏈塊。
這與批準檢查投票規則類似,但讓我們解開最重要的部分,其中驗證者忽略中繼鏈塊觸發包含平行鏈塊:
沒有持續爭議:這指示驗證者避免最終確定存在爭議的平行鏈區塊,直到有足夠的驗證者參與。換句話說,“比抱歉更安全”。
已經失去爭議:如果驗證者看到 2/3 的意見反對平行鏈區塊,則該驗證者將永遠不會投票最終確定觸發包含該平行鏈區塊的中繼鏈區塊。
在此圖中,我們展示了如何將爭議 GRANDPA 投票規則應用于鏈的一些示例:
還有一個 BABE(區塊作者身份)鏈選擇規則服務于第二個目標。通常,BABE 指示驗證者通過在具有最高權重(類似于高度)的中繼鏈塊之上構建來擴展中繼鏈。修改后的 BABE 鏈選擇規則指出:
中繼鏈塊被認為是可行的,如果它們已最終確定,或者如果它們的父塊是可行的,并且中繼鏈塊觸發包含的每個平行鏈塊是無可爭議的或贏得了爭議。
如果沒有可行的子節點,則中繼鏈塊是可行葉。
驗證者應該建立在他們知道的具有最高權重的可行葉上。
BABE 鏈選擇規則的含義是,誠實的驗證者將放棄中繼鏈的分叉,這會觸發包含任何被發現無效的平行鏈塊,即使這意味著暫時建立在較短的鏈上。
下圖顯示了 BABE 鏈選擇規則如何要求驗證者放棄并停止構建包含已失去爭議的平行鏈塊的鏈的示例。這有效地使他們 51% 攻擊中繼鏈的壞分支。
在實踐中看起來像是中繼鏈的簡短自動回滾。下面舉例說明:
在區塊 1a 中,包含一個平行鏈區塊 P。
到區塊 3a 建成時,平行鏈區塊 P 已經存在爭議,被認定為無效。
誠實的驗證者開始忽略塊 1a 和 1a 的任何子塊。相反,他們構建了一個新鏈,從一個不包含無效平行鏈塊 P 的替代塊 1b 開始。
這些誠實的驗證者將與平行鏈區塊 P 相關的爭議消息發布到中繼鏈的新分叉上,從而確保 P 的支持者被削減。一旦 4b 構建完成,它就會超越原始鏈,并且 1b 最終確定。
回滾是可能發生,因為誠實的驗證者在 1a 獲得批準之前不會最終確定它,而批準過程是引發爭議的原因。一旦 P 有爭議,驗證者就會暫停 1a 的最終確定。當 P 輸掉爭議時,驗證者在任何情況下都將拒絕敲定 1a。
一個錯誤的平行鏈區塊被忽略的“回歸”示例
綜上所述,爭議邏輯是確保檢測到的不當行為得到妥善懲罰以及中繼鏈重組以完全避免不良平行鏈區塊的一種手段。爭議和相關的鏈選擇規則是 Polkadot 與常規樂觀匯總的主要區別。樂觀匯總運行在對最終性或分叉選擇沒有影響的鏈上,這意味著它們必須對最終確定任何壞塊的風險極為保守,因此會施加較長的欺詐期和提款持續時間 (幾天或幾周)。
在 Polkadot 中,爭議協議和鏈選擇規則意味著,當爭議正在進行時,最終確定性會被簡單地延遲幾秒鐘,并且鏈可以圍繞壞塊構建。終結性仍然很快,終結性仍然是安全的。
這篇文章深入介紹了區塊鏈共識以及我們如何應用這些概念來構建 Polkadot。我們設計方法的很大一部分圍繞著確保在網絡條件良好時快速運行,但在網絡條件差時正確運行。大多數時候,不會有攻擊驗證者。網絡延遲會很低,而帶寬會很高。在這樣的情況下,批準和最終確定可能會在幾秒鐘內發生。但是當存在攻擊驗證者或網絡狀況不佳時,最終性會相應減慢,中繼鏈有能力圍繞不良平行鏈塊進行重組。
自 2016 年夏天以來,我們一直在以一種或另一種形式研究這套協議。看到這些東西在實時、高度分散的網絡上實施和運行,真是令人難以置信。
自從我們幾年前踏上這段旅程以來,區塊鏈擴展問題只會變得更糟。我們已經看到了許多方法,但其中許多都缺乏安全性或去中心化。Polkadot 通過其支持、可用性、批準檢查和爭議系統,是提供可擴展性、去中心化和安全性的實用解決方案。
關于協議開發
「以下為個人觀點」
構建軟件系統是理想、實用主義、美學和時間之間不斷的角力比賽。現實永遠不會完全符合理想。沒有什么是完美的,但事情可以是好的。
協議的理想化版本與最終在計算機上運行的實現之間存在脫節。這類似于戲劇中的角色與演員對該角色的體現之間的差異。全世界的服務器都將穿上我們驗證者的服裝,但無論他們多么努力,他們都永遠不會成為我們協議的驗證者。
協議開發是一項重大任務。它需要大量的時間、精力和精力。它需要愿意忽略發生在邊緣的絕大多數事情。這些犧牲是典型的——一件作品只能通過提供它所不是的一切來創造。構建某些東西是關于定位彼此相關的符號。最重要的是,建設需要愿意失敗。作為協議開發者,我們別無選擇,只能失敗。但在這樣做的過程中,我們遇到了荒謬,并找到了意義。
互聯網的大眾媒體鼓勵主要將建筑信息作為達到目的的手段。我們被鼓勵將構建作為更大事物的一部分:商業、金融系統、社會運動和聲明。將這些目標植根于工藝和建造不僅僅是功能性的東西,而且充滿關懷和優雅的簡單快樂是很重要的。努力構建一個系統的每一部分以與其他部分保持一致是一種自豪感,即使以其他物質回報為代價也是值得的。
我們已經構建了這里描述的協議超過 5 年,我選擇以這種方式結束這篇文章來回答許多讀者會提出的問題:“為什么有人要花 5 年時間做這個?”。這是給加密空間中所有新加入者的信息。這適用于自 2020 年浪潮以來一直乘風破浪的每個人。如果您發現自己正在從貪婪和紛爭中尋找避難所,那么它就存在,而且它一直都在這里。
本文作者:Habermeier「Polkadot founder」
Tags:POLDOTPolkadotPOLKPOLY幣XDOT價格polkadot怎么讀音發音polkadotted讀音
熱血、瘋狂、暴跌、暴漲……元宇宙還沒有到來,NFT卻坐上了火箭,一飛沖天。“自從玩了NFT之后,就沒睡過什么好覺.
1900/1/1 0:00:002021年度的最熱網絡詞匯元宇宙,還會在2022年熱一陣子。短短半年時間,元宇宙攪動商圈、資本圈、媒體圈,一大波新公司誕生,一大批元宇宙圖書出版,我收到的就有趙國棟、易歡歡等《元宇宙》、《元宇宙.
1900/1/1 0:00:00我們將分享對 DAO 生態進行記錄和思考的最新文章并提取其要點,使您可以輕松地消除噪音信息并與 DAO 世界保持同步。這就是?DAO 之現狀.
1900/1/1 0:00:00目前看來,流動性挖礦似乎已經油盡燈枯,加密貨幣領域的各個子行業都在熱衷尋找替代它的項目。根據不同的項目,真正能夠發揮作用的可能一種被稱為是「流動性即服務」的機制,或者也可以說是「協議控制價值」甚.
1900/1/1 0:00:00這是一場全方位、多維度的競賽。企業并購的目的無非就是人(團隊人才技術)、錢(現金流)、業務(產業鏈上下游的縱向擴張和橫向擴張)。當然,還有門口的野蠻人.
1900/1/1 0:00:00區塊鏈商業模式已成為聳人聽聞的策略的頭條新聞。但在更安靜的角落,DAO 正在為數字初創公司打造一個有前途的新生態系統.
1900/1/1 0:00:00