跳到正文

預言機價格陳舊

當預言機價格記錄的更新時間早於特定操作允許的最長時限時,該價格對該使用端而言即屬陳舊;安全處理還須驗證資料源、排序器、備援機制及受控復原。

更新於

僅供教育參考,不構成投資建議;投資可能產生損失。

直接答案

age = consumerClock - sourceTimestamp 超過該操作設定的 maxAge 時,預言機數值對特定使用端操作而言即屬陳舊。價格沒有變化仍可能是即時的,而剛發布的數值仍可能在經濟上錯誤。使用端必須先拒絕缺失或未來的時間戳及無效答案,再採用針對資料源、資產、鏈、市場時段及操作的驗收政策。

心跳與偏差門檻值是發布觸發條件,並非即時性保證或服務水準協議。觸發後報告仍可能延遲,市場變動也可能低於偏差門檻值,而某項操作要求更嚴格的最長時限。拉取式預言機還有另一項邊界:呼叫者可能須先提交經驗證的更新再讀取,合約則必須拒絕早於其規定時限的更新。

在 L2 上,排序器狀態與復原寬限期構成獨立門檻。通過該門檻並不能證明資產價格即時、L2 已最終確認或所有使用者均有平等存取機會。備援價格及最後有效價格是受控降級模式,不是真相;每個來源與復原路徑都需要明確單位、時間戳、獨立性、權限、允許操作及對帳規則。

運作機制

  1. 固定鏈、區塊與時鐘、使用端合約與操作、資料源代理與彙總器、資產對與小數位、介面版本、備援設定及升級狀態。
  2. 透過已部署介面讀取精確回應,並處理回復或無資料狀態。先驗證答案、狀態或適用的信賴區間,以及 sourceTimestamp != 0sourceTimestamp <= consumerClock,然後再做減法。
  3. 記錄心跳、偏差、市場時段與發布設定,再為每項操作獨立設定 maxAge。明確規定邊界,例如接受 age <= maxAge,拒絕 age > maxAge
  4. 在支援的 L2 部署上,驗證排序器資料源的初始化與狀態,依文件規定的欄位計算復原後經過時間,執行設定的寬限期,再單獨檢查價格即時性。
  5. 追蹤複合價格、比率價格與備援價格的每個必要組成部分。統一方向與單位,並以最陳舊的必要依賴項限制有效即時性,而非採用最新時間戳。
  6. 按操作定義正常、降級及暫停狀態。新增借款、鑄造或槓桿可以安全關閉,同時允許還款或增加擔保品;以陳舊價、備援價及復原價測試曝險、流動性及清算執行者容量。
  7. 監控來源與代理變更、更新延遲、拒絕率、排序器狀態、跨來源偏差及市場時段;演練中斷、備援失敗、跳價復原、集中清算、MEV、壞帳核算及恢復正常模式。

對 Chainlink 風格的介面,latestRoundData() 可以提供輪次識別碼、帶正負號答案、開始時間、更新時間及舊版輪次欄位。目前 API 將 answeredInRound 標為已棄用,因此不能把歷史上的不等式檢查表述為目前通用規則;必須檢查特定代理、彙總器及實作。時間戳表示文件所述資料源狀態的更新時間,並不代表該數值可按任意規模成交。Solidity 的 block.timestamp 是共識約束下的目前區塊時間戳,不是外部掛鐘預言機。

計算範例

  • 最長時限邊界。consumerClock = 1,800,000,000sourceTimestamp = 1,799,999,100,則 age = 900 seconds = 15 minutesmaxAge = 600 seconds 的政策會因超出 300 seconds 而拒絕;maxAge = 1,200 seconds 的政策則接受,並留有 300 seconds 餘裕。因此,同一資料源數值可對一項操作有效,對另一項操作陳舊。
  • 觸發條件並非即時性。 上次發布價格為 100.00,偏差觸發值為 1%,心跳為 3,600 seconds。經過 2,700 seconds 後,市場觀察價 100.80 僅偏離 0.8%,兩個教學觸發條件均未觸發。價格達到 101.20 時偏差為 1.2%,可能啟動發布,但在有效新報告上鏈前,使用端仍會讀到 100.00
  • L2 雙重門檻。 排序器資料源回報正常,startedAt = 1,799,996,400consumerClock = 1,800,000,000grace = 3,600 seconds,所以經過時間恰為 3,600 seconds。若政策在 elapsed <= grace 時阻止操作,該操作仍被阻止,到 3,601 seconds 才符合條件。是否最終可執行仍取決於獨立的價格時間戳、答案及使用端的其他檢查。
  • 復原斷崖。 擔保品為 10 ETH、債務為 12,000 USD、清算門檻值為 75% 時,陳舊的 2,000 USD/ETH 價格給出 healthFactor = 10 * 2,000 * 0.75 / 12,000 = 1.25。復原後的 1,400 USD/ETH 價格給出 0.875。依這些教學輸入,該帳戶變為符合清算條件,但實際執行仍取決於協定規則、流動性、清算執行者、燃料費、排序及鏈可用性。

風險

  • 鏈、資料源、代理、彙總器、資產對或介面版本錯誤。
  • 使用端讀取不帶時間戳或文件所述狀態的答案。
  • 未拒絕缺失的零時間戳、未來時間戳或減法下溢。
  • 對資產、操作、市場時段或波動性而言,最長時限過於寬鬆。
  • 最長時限過嚴,造成阻斷服務或阻止降低風險。
  • 把心跳視為保證的發布期限或服務水準協議。
  • 未觸發偏差門檻值時,低於門檻的漂移或基差持續累積。
  • 已觸發的報告因來源、簽署者、網路、燃料費、中繼或鏈故障而延遲。
  • 把已棄用或特定實作的輪次檢查普遍套用。
  • 資料源、代理、彙總器、心跳、偏差或介面設定變更未被發現。
  • 忽略休市、假日、暫停交易或結轉資料的語義。
  • 複合或比率價格看似即時,但必要組成部分之一已陳舊。
  • L2 排序器狀態被忽略、未初始化、延遲或從錯誤網路讀取。
  • 復原寬限期缺失、設定錯誤或存在差一邊界錯誤。
  • 排序器狀態通過,但資產價格仍陳舊或不可用。
  • 混淆 L1 時間、L2 區塊時間、來源觀察時間、發布時間與掛鐘時間。
  • 拉取式更新缺失、過舊、被選擇性提交、格式錯誤或資金不足。
  • 備援價或最後有效價格陳舊、高度相關、尺度不同或形成循環依賴。
  • 開放式失敗允許不安全操作,而一律關閉會阻止還款、增加擔保品或有序復原。
  • 復原跳價、清算聚集、MEV、流動性不足、暫停競態或壞帳對帳導致次生損失。

常見誤解

  • 「心跳保證每個間隔都有即時更新。」 它只是更新觸發設定,來源或鏈故障仍會延遲發布。
  • 「近期時間戳證明價格正確且可成交。」 它只證明文件所述更新時間;來源品質、單位、信賴區間、市場深度及使用端邏輯仍是獨立問題。
  • 「一個最長時限適用所有資料源與操作。」 資產、市場時段、鏈,以及借款、清算、交易及結算操作有不同延遲與活性需求。
  • 「排序器復原就能立即恢復所有操作。」 復原寬限期與價格即時性是獨立門檻,協定或鏈安全政策還可能增加更多條件。
  • 「備援機制或讓所有函式回復總是最安全。」 薄弱的備援機制會錯誤定價風險,而無差別失敗會阻止使用者還款或改善擔保率。

相關主題

來源

導覽

搜尋知識庫...