Skip to main content
Intention 不使用外部的預言機委員會。驗證者集合本身就是預言機。 每個驗證者對每個商品的價格產出自己的看法並簽署;同一個共識事件既提交那些據以結算的交易,也在其中認證出一個結果。 這裡有兩個不同的步驟,回答的是不同的問題。聚合問的是這個商品值多少,在每個驗證者內部、在共識路徑之外進行。認證問的是網路在這一輪認定它值多少,在共識內部進行。
每個驗證者內部 — 在共識路徑之外
共識內部
交易場所
預言機 sidecar每個驗證者一個
驗證者驗證並簽署
在驗證者之間 gossip 擴散
按紀元與輪次認證
隨區塊攜帶
內核 — 標記價格 · 保證金 · 強平 · 資金費按同一個共識事件裡提交的價格結算

產出一個指數價格

每個驗證者都運行自己的預言機 sidecar,從多個交易場所採集資料,歸約成每個商品一個指數價格。這個歸約刻意不用簡單平均:平均值太容易被一個壞來源拉走。
過濾非有限值與格式錯誤的值
中位數在各來源之間
鉗制各來源到中位數 ± 偏離帶
加權按價差與穩定性
設上限按場所等級
指數價格
這個先後順序就是設計過濾先跑,是因為只要有一個無窮值活著進入中位數或加權和,後面的一切都被污染。鉗制而不是丟棄,讓每個來源都仍然計入,同時限定任何一個能拉多遠。
不是簡單平均 — 平均值太容易被一個壞來源拉走
過濾。 非有限值和格式錯誤的值,在接觸到任何下游環節之前就先丟掉。這個先後順序很重要:只要有一個無窮值活著進入中位數或加權和,整個結果就被污染了。 鉗制到中位數。 先在各來源之間取中位數,再把每個來源鉗制到圍繞中位數的一條偏離帶之內。偏離帶按商品設定,市場越深的地方越窄: 來源的報價落在偏離帶之外,不會被丟棄,而是被拉到偏離帶的邊緣上。這個區別很重要:丟棄會讓攻擊者得以縮小樣本;鉗制則讓每個來源都仍然計入,同時限定任何一個來源能把結果拉出多遠。 先按品質加權,再設上限。 鉗制後的各來源按加權平均合併,而不是等權。權重隨報價品質上升——價差越窄,權重越高——也隨穩定性上升;穩定性由近期成交量與更長期的日均值對比衡量,因此一家成交量異常飆升的場所不會藉此獲得影響力。 隨後權重按來源等級設上限,這樣無論某家場所的報價看起來多好,都無法單獨主導結果: 以不同貨幣計價的商品,在上述所有步驟之前先換算到統一的計價貨幣,這樣中位數取的是可比的數字,而不是混在一起的計價單位。
這裡的每一個常數都是政策決定,不是自然常數。偏離帶、等級劃分和權重上限都是配置項;某家場所的行為變了,或者新增一個來源,要調整的就是這些旋鈕。

認證它

sidecar 產出的指數價格,只是單個驗證者的看法。要把它變成網路可以據以結算的東西,這一步發生在共識裡。 驗證者從自己的 sidecar 取回價格,並在簽署之前先驗證——包括按配置的門檻檢查新鮮度,這樣 sidecar 一旦卡住,產出的是「沒有提交」,不是一份過時的提交。接著驗證者對價格資料簽署,把已簽署的提交當成一條共識網路訊息 gossip 給其他驗證者。 認證價格按紀元(epoch)和輪次組裝,並隨區塊提案攜帶。因此,提交區塊內交易的那些簽章,同時也提交了這些交易據以結算的價格——不存在單獨的預言機交易,也不存在價格從發布到被使用之間的窗口。 拿不出本輪有效的價格觀測,驗證者就無法提議區塊。 價格可用性是出塊的前提條件,不是執行時期望能找到的輸入。

指數價格與標記價格

認證出來的價格是指數價格,也就是網路對外部市場的看法。它不是交易實際成交的價格。 內核再從指數價格導出標記價格,經過平滑和限幅,讓指數上一次短暫的脫節不會連鎖引發強平。保證金、強平和資金費實際使用的是標記價格。交易側的說明見標記價格和指數價格。

它保證什麼,不保證什麼

保證的是:一筆交易據以結算的價格,在提交這筆交易的那一輪已經由驗證者法定人數認證過,而且任何執行路徑都不可能讀到另一個價格。 不保證的是這個價格對不對。如果指數所依據的那些交易場所本身就錯了——例如其中幾家協同拉動,或者一次全市場範圍的脫節——鉗制和加權只能限定單個來源把結果推出多遠,無法憑空造出市場當時並沒有的資訊。
價格是交易系統影響最大的外部輸入。這裡的抗操縱性是程度問題,不是有或沒有的二元屬性。仍然暴露在外的部分,見風險揭露。

後續閱讀

IntentionBFT

認證如何綁進提交區塊的那同一批簽章。

清算所

保證金、強平和資金費拿這個價格做什麼。

標記價格

指數如何變成推動部位的那個數字。

風險揭露

價格風險還留在哪裡,可能帶來多大代價。