信任最小化價格預言機的提案

本文為機器翻譯
展示原文

下面的預言機被設計成一種最小化信任和無需許可的方式來獲取任何人都可以使用的代幣價格。

預言機最基本的工作原理是讓報告者以相同的價格提交限價買入價和賣出價。任何人都可以與這些訂單進行掉期,只需支付少量費用(不接受部分成交)。如果在一定時間內無人接單,則表明價格合適,可用於結算。如果訂單被接單,則接受者需要提供兩種代幣作為抵押,暗示新的價格,然後計時器重新開始。

預言機在爭議期間使用指數級抵押品升級來增加操縱成本,併為用戶提供一些關於總結算時間和延遲成本的統計保證。平均而言,報告準確價格所需的資金可能遠低於根據報告價格結算的名義金額。其目標是取代目前集中式且可信的預言機中介機構,從而減少 DeFi 應用的故障點。

該設計依賴於 n 個自利參與者中的 1 個,這些參與者在經濟上與外部立場不一致,由預言機在截止日期之前將其交易納入其中。

該設計的一個明顯限制是審查制度(提交不良价格 → 審查爭議 → 獲利)。這嚴格限制了預言機在 Layer-2 上的安全保障,並且在 FOCIL 實現之前,我們必須在 Layer-1 上使用更長的結算時間,以降低攻擊者連續控制多個區塊的可能性。

下面是一個簡化的 Oracle 生命週期示例:

假設某個應用程序想要查詢 WETH 兌USDC的價格。在價格請求中,他們指定

  1. 代幣1:WETH
  2. 代幣2: USDC
  3. 代幣1金額:0.1 WETH
  4. 結算時間:10秒
  5. 乘數:1.5x
  6. 獎勵:0.001 ETH

預言機合約餘額現在為 0.001 ETH。

此價格請求會上傳到鏈上,任何人都可以報告價格。假設ETH的價格為 3000 美元。下一步,報告者提交一份初始報告,在與其他所有人的競爭中勝出,贏得 0.001 ETH 的獎勵。

由於應用程序使用預言機獲取價格,我們假設有兩個人處於相反的立場。這意味著,如果價格被報告得更高,一個人受益,另一個人受損,反之亦然。假設其中一個人完全被動,而另一個人主動,如果預言機認定 WETH 的價值低於預期,他將受益。因此,假設最初的報告者是這方的操縱者,因為他們能夠出價The Block中的其他人。

在初步報告中,他們明確指出:

代幣1金額:0.1 WETH
token2金額:150 USDC

預言機合約餘額現在為 0.001 ETH、0.1 WETH 和 150 USDC。

這些報告餘額暗示ETH價格為 1500 美元,而實際價格為 3000 美元。

假設無人對此報告提出異議,經過10秒的結算時間後,該報告可能會被結算並可供應用程序使用,但代價高昂。但是,提出異議是有利可圖的,因此我們假設在10秒結束前會有異議者出現。

在爭議中,他們明確指出:

代幣1數量:0.15 WETH
token2數量:450 USDC
tokenToSwap: USDC

他們決定與初始報告者的 150 USDC進行兌換,這意味著他們選擇USDC作為爭議中的兌換代幣。token1AmountNew 比初始報告者(使用價格請求的 1.5 倍乘數)的合約規則下報告的金額高出 50%。代幣流向如下:

預言機合約從爭議者那裡收取 150 USDC ,然後將其添加到初始報告者原來的 150 USDC中,並將其全部發送給初始報告者,總共向初始報告者發送 300 USDC 。

接下來,預言機合約從爭議者那裡收取 450 USDC和 0.05 WETH,並將其添加到報告中。

合約餘額現在為 0.001 ETH、0.15 WETH 和 450 USDC ,settlementTime 計時器重置為另外 10 秒。

假設操縱者妥協,並且10秒的結算時間過去了,任何人都可以來結算報告的價格。預言機價格為3000美元,而實際價格為3000美元。

在結算過程中,結算者只需指定要結算的報告。通常情況下,他們會收到價格請求者支付的ETH的結算者獎勵,但在本例中我們假設為 0。結算過程中的代幣流向如下:

初始報告者(操縱者)將從初始報告者獎勵中獲得 0.001 ETH 。這筆費用必須與競價超過其他所有人成為第一個初始報告者所產生的 Gas 成本相抵。

爭議者將獲得 450 USDC和 0.15 WETH 的回報。

現在所有ETH和代幣的合約餘額均為 0。如果我們將預言機整個生命週期(包括價格請求、初始報告、爭議和結算)的流量進行淨額計算,我們可以看到以下情況:

初始報告人:
USDC:+150
WETH:-0.1

爭議者:
USDC:-150
WETH:+0.1

假設ETH費用和初始報告者獎勵淨值接近於零。ETH 的真實價格為 3000 美元,因此操縱者損失 150 美元,爭議者獲利 150 美元,並且預言機價格公平地結算,可供應用程序使用。如果操縱者決定繼續通過質疑誠實爭議者的報告來操縱價格,他們的損失將呈指數級增長,且損失金額會隨著報告價格的誤差而增加。

Solidity 中的參考預言機實現有更多參數需要調整,例如交換費、升級暫停、爭議延遲、時間模式(秒與塊)等等,但簡化版本對於激勵機制如何運作是準確的。

對於給定的預言機實例,掉期費是一個重要參數。新的報告者需要向之前的報告者支付掉期費(以百分比表示),該費用在價格請求時設定。如果在指定的結算時間內,掉期費相對於背景市場波動過低,則由於重置計時器的爭議更為常見,結算總時間可能會延長。另一方面,如果掉期費過高,則會使預言機價格的被動用戶面臨套利損失,因為主動操縱者可能會試圖將價格結算在掉期費區間內,但遠離真實價格。

因此,總體 Oracle 實例完成時間和最終用戶的套利損失之間存在根本的權衡。

就完全被動的終端用戶所承受的最大套利損失而言,該數字嚴格小於每輪內部預言機掉期費總額加上 Gas 費,再加上報告者的跳躍損失。我們將其稱為有效掉期費 F(掉期費 + Gas 費 + 跳躍損失)。我們假設,如果價格超出 F,n 個自利參與者中的 1 個會提出異議。由於只有最終存續的價格才會對外部名義價格誤差產生影響,因此可提取的總價值 <= F。

無論價格朝哪個方向變動,跳躍損失都會對報告者造成成本。代幣價格可能會不連續地跳空超過 +/- F,當有人提出異議並修正價格後,報告者需要承擔與獨立掉期費相比的差額。乘數越高,報告者每輪承受的跳躍損失就越大,相對於上一輪報告的自然價格誤差而言。

升級暫停是另一個重要參數。超過此暫停時間,爭議可以繼續進行,但不再需要提供指數級增長的抵押品。這樣,您可以確保預言機實例不會升級到超出爭議網絡的可感知容量,同時仍然對操縱者施加高額懲罰。

完整的 Solidity 實現如下所示。需要注意的是,直接函數條目可能會添加外部合約重組/重放保護(例如,如果交易不在傳遞的區塊號和時間戳內,則回滾,或者結算必須使用匹配價格請求的 stateHash),這可能會有所幫助,但無法消除風險。

非常樂意聽取任何關於設計的反饋或批評,也樂意解答任何問題!我們希望為真正無信任的金融應用的開發做出貢獻。


來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論