模型
IntentionBFT 能容忍拜占庭對手掌握至多三分之一的總權益。因此誠實權益始終超過三分之二,標準法定人數就是任意一組合計權益超過三分之二的驗證者,本文件稱之為 權益加權法定人數。網路是部分同步的:在穩定點之前,延遲是任意的;在穩定點之後,誠實驗證者之間的延遲有界。預言機 sidecar每個驗證者一個
驗證者驗證並簽章包括按配置的門檻檢查新鮮度
在驗證者之間 gossip 擴散作為一條共識網路訊息
認證價格按紀元與輪次
價格可用性是出塊的前提驗證者要提議區塊,必須拿得出當前輪次的有效價格觀測 — 因此提交這些交易的簽章,同時也提交了它們據以結算的價格。
這不主張什麼它把價格綁到交易上,但不會讓價格變得正確 — 共識認證的只是一個法定人數的驗證者在這一輪提交了這些觀測值。
提交一個順序
區塊內的交易次序,本身就提升成由共識提交的對象,不再是執行過程的副產物。區塊雜湊覆蓋了已排序的載荷,因此共識之後的任何重排,都會讓原本提交這個順序的簽章失效。 效果是:區塊一旦最終確定,就有一個 權益加權法定人數對這個確切順序簽過章,而且沒有任何誠實驗證者會在同一輪為這批交易的另一種順序簽章。再加上執行完全依照這個已提交的順序循序進行,確定性重放就從一種實作慣例,變成任何人都能核驗的性質。單個提案內部的主節點自由裁量空間——納入哪些可用批次、怎麼排列——仍然是一處殘留的攻擊面,靠主節點聲譽,以及「拿不出有效價格觀測就根本無法出塊」這一事實來緩解。更強的公平排序構造,列為候選的未來升級持續追蹤。
批次可用性
在樸素的協議裡,主節點提議的區塊,載荷裡帶著本輪的全部交易,於是共識訊息的大小就和吞吐量綁死了。IntentionBFT 把資料傳播和排序拆開。 驗證者在背景持續傳播交易批次。每個批次會逐一收到確認,直到發起方能證明它達到了 權益加權的可用性;到那時提案才可以引用,而且是按摘要引用,不按內容。無論吞吐量多高,共識訊息都保持很小;而且已提交的區塊總是可重放的,因為沒有哪個區塊能引用只由拜占庭少數方持有的資料。認證價格
驗證者同時也是價格觀測者,而區塊會帶上自己據以執行的那組價格。驗證者共識 · 記憶池 · 預言機 sidecar · 內核 · 儲存
唯一投票的角色
驗證者全節點跟隨並執行已提交區塊;不投票
隔離 — 吸收公網的讀取流量和對等連線,讓驗證者不必直接暴露在開放網際網路上
公共全節點任何人都可以自己跑一個;跟隨、執行、提供讀取
開放的一層
用戶端前端 · 交易代理人 · 造市商 · 索引器
它們連的是全節點,不是驗證者。需要最低延遲、最完整視圖的用戶端,會自己跑一個。
四層,從共識向外
這一層為什麼存在
主節點聲譽
主節點按確定性的權益加權輪替逐輪選出,另外疊了一層以滑動視窗為基礎的聲譽啟發式。反覆提案失敗的驗證者——這說明它不可用,或是有對抗行為——在後續選擇中會被降權,槽位重新分配給近期回應良好的驗證者;這樣一來,不可用的驗證者就不會佔著分到的槽位拖住進度。 由於價格觀測構成提案資格的門檻,聲譽機制還必須避免把主節點資格集中到行情連通性最好的那批驗證者手裡。一條場所多樣性要求——每個商品的觀測須取自多個相互獨立的來源——堵住了這條路。紀元與重新配置
時間切成一個個紀元(epoch)。一個紀元之內,驗證者集合和大多數參數保持不變。到了紀元邊界,這些東西可以透過一次治理授權的重新配置改變:驗證者集合變更、共識參數變更、風險參數更新,以及緊急動作。切換是原子的:每個誠實驗證者都在同一個區塊高度看到同一次切換。網路拓撲
主節點
驗證者
鏈
2f+1 權益加權聚合簽章
順序與價格至此不可更改
提議區塊 — 批次摘要與認證價格
驗證可用性、順序與價格
投票
認證本輪
提交
後續閱讀
記憶池
什麼能到達共識、以什麼順序到達,以及什麼會被丟棄。
IntentionKernel
區塊的順序和價格提交之後,會發生什麼。
預言機
指數價格在驗證者簽章之前是怎麼產生的。
運行節點
驗證者集合為什麼是封閉的,以及如何洽詢加入事宜。