Skip to content
所有選擇權指南
DeFi 價格參考8 min read

DeFi 價格預言機如何聚合並發布價格?

了解預言機如何聚合市場觀察、heartbeat 與偏差門檻如何觸發更新、使用端如何核對單位及資料新鮮度,以及這些控制無法保證甚麼。

本指南內容預言機提供參考值,並非實際成交價

簡短摘要

DeFi 價格預言機把鏈外參考值帶進智慧合約。常見推送式資料饋送會先在鏈外合併多個觀察結果,再把報告發布到鏈上,讓協議讀取最新答案。偏差門檻與 heartbeat 會影響何時發送更新;`decimals`、報價單位、`updatedAt`,以及部分 L2 的排序器狀態,則影響使用端應否採用該答案。這些控制可減低某些風險,但不能證明價格準確、對所有用途都夠新,或每宗交易都安全。

預言機提供參考值,並非實際成交價

預言機把區塊鏈以外的資訊帶入只能根據鏈上狀態執行的程式。借貸協議可以用資產對貨幣的價格資料饋送為抵押品估值;衍生工具合約也可以採用指定參考值結算或觸發風險限制。合約讀到的是鏈上狀態內的數字,不能直接查看所有外部交易所的掛盤。

「價格」可以代表多種不同量度。資料饋送可能表示某資產相對報價貨幣的價值、協議定義的兌換率,或其他明確指定的數量。它未必是大額持倉真正賣出的價格。流動性池的即時兌換比率,可能與中心化交易所的最後成交價不同。DEX 兌換指南解釋池內報價與實際成交為何有差異;標記價格與最後成交價指南說明另一類市場價格分別。

預言機亦有不同架構。推送式資料饋送會定時把答案寫進合約,使用端讀取最後發布的數值;拉取式設計則可在使用者或應用程式提出要求時提供簽名報告。本文集中介紹常見 EVM 推送式價格資料饋送,並以 Chainlink 文件所述的介面為例,並非表示每個 DeFi 協議都用同一服務商或更新規則。

多個觀察如何變成鏈上答案

在 Chainlink 的 Offchain Reporting 設計中,預言機節點會在鏈外交換觀察結果,並就同一份報告達成共識。達到法定數量的節點簽署報告;提交者透過交易把報告送上鏈;aggregator 核實簽名後,提供答案、輪次識別碼及時間戳。文件所述設計會發布已回報觀察值的中位數。這減少逐一把每項觀察結果寫成鏈上交易的需要,同時保留鏈上簽名核實。詳情可參閱 Offchain Reporting 文件。

使用端合約一般不會重新執行整個聚合流程,而是向資料饋送代理合約呼叫 latestRoundData(),讀取目前輪次資料。Chainlink 建議使用所選資料饋送的代理位址;代理背後的 aggregator 可能更換。EVM 讀取指南及 API 參考列出介面,也說明資料饋送位址會因網路而不同。

聚合只屬資料品質的一部分。不同節點營運者仍可能依賴相同交易所、資料服務商或市場慣例。只要仍有足夠有效觀察,中位數有助減低單一極端值的影響,但不能替流動性不足的市場製造深度、修正錯誤的資產標籤,也不能證明該參考價切合某個協議的實際用途。

無文字場景呈現市場觀察值經節點網路匯入價格資料饋送,再通過驗證閘門進入抵押品金庫。
協定讀取前會先聚合觀察值;價格新鮮度與排序器狀態是兩項獨立檢查。

Heartbeat 與偏差門檻控制發布節奏

不少推送式資料饋送同時採用偏差門檻及 heartbeat。偏差門檻是相對上次發布答案的百分比變動,達到條件便可能觸發新報告;heartbeat 則按時間觸發,即使價格沒有變動到門檻,也可能要求更新。每個資料饋送的資產、網路、偏差門檻及 heartbeat 等設定,都要查閱目前的 Data Feeds 目錄及資料饋送位址頁。

這些設定因資料饋送而異,並非「每隔 N 秒必定更新」的承諾。若價格只輕微變動,可能要等 heartbeat 條件到期才有新報告。若快速波動越過門檻,系統或會較早要求更新,但收集資料、傳送報告及交易納入區塊,仍涉及運作及網路步驟。Heartbeat 說明的是觸發條件,不代表市場參考值永不過期,亦不保證更新在指定一刻寫上鏈。

門檻也不會替協議決定可安全承受多少價格變動。抵押品價格變得較快的借貸市場,可能需要更嚴格的資料年齡上限或不同的風險處理;採用變化較慢參考值的應用則可能另有要求。協議應自行界定可接受的資料年齡和相應處理方式,不應把資料饋送的更新觸發條件當成自己的安全政策。

解讀答案、精度及報價單位

latestRoundData() 會回傳 roundId、answer、startedAt、updatedAt 及 answeredInRound。API 參考指出 answeredInRound 已棄用。answer 是定點數值的整數表示,未必可直接當作美元金額閱讀。應查看資料饋送的 decimals() 和描述,再按相應網路及資產對解讀。例如,假設 BTC/USD 資料饋送以 8 位資料饋送小數返回 6,725,000,000,000,換算後就是每 BTC 67,250.00000000 美元。

資料饋送的小數位與代幣的小數位表示不同單位。ERC-20 數量可以有 18 位代幣小數,而價格答案可能只有 8 位資料饋送小數。合約相乘前,必須各自按正確單位縮放。假設所有資料饋送都用 8 位小數,或把代幣的小數位套用到預言機答案,都可能令估值錯開多個數量級。

資產對的方向與比例同樣重要。BTC/USD 表示每個 bitcoin 值多少美元;一個 BTC 乘上該答案才是美元價值。USD/BTC 的單位則相反。推算交叉匯率時,兩個資料饋送都要按各自精度縮放,再以正確方向相除;Chainlink 的價格計價例子以 BTC/USD 及 EUR/USD 推導 BTC/EUR。亦要確認位址、資產對、鏈和代幣,均符合預期抵押品或負債。

過期資料檢查由應用程式訂定

updatedAt 記錄最近一輪更新時間。使用端可把它與目前區塊時間比較,拒絕超過應用程式設定的最長有效時間的答案。視乎資料饋送及協議,亦可要求更新時間非零、正價格資產的答案大於零,或答案介乎預設範圍。有效範圍要配合產品;硬編碼上下限也可能隨市場變化而不再安全。

假設某借貸市場接受 4 個單位的抵押代幣,抵押係數為 75%。資料饋送有 8 位小數,最後答案是 200,000,000,000,即每個代幣 $2,000。介面顯示的借款上限為 4 × $2,000 × 75% = $6,000。假設市場已跌至 $1,820,跌幅 9%,而這個假設資料饋送的偏差門檻為 10%、heartbeat 為 60 分鐘。兩項假設條件可能都未要求新報告。按 $1,820 計算,同一公式得出 $5,460;舊答案會令本例借款上限高估 $540。

如果應用程式拒絕超過 5 分鐘的價格,而目前輪次已在 20 分鐘前更新,便可暫停新借款,不再使用 $2,000 的答案。這項檢查不會更新資料饋送,只改變資料超出應用程式年齡限制時可執行的操作。借款、提款、清算和還款可以採用不同處理方式,因為暫停所有操作也可能造成傷害。以上數字和觸發設定均為說明用途的假設,並非現行資料饋送參數或風險建議。

L2 排序器檢查處理另一類中斷風險

在 L2 網路上,使用者一般經排序器提交交易。排序器中斷或恢復期間,使用者可能無法如常交易,交易亦可能延遲,待市場情況改變後才執行。L2 預言機答案看來仍然很新,不代表應用程式的執行路徑正常,亦不表示每位使用者都能平等地採取行動。

Chainlink 把 L2 Sequencer Uptime Feed 文件化為獨立的狀態資料饋送。按其介面,answer == 0 代表排序器運作中,answer == 1 代表排序器停機。startedAt 記錄狀態轉變時間;示例使用端會檢查狀態,並在排序器恢復後等候應用程式設定的寬限期,才使用價格資料饋送。必須核實所用 L2 的實際位址和網路行為。可參閱 L2 Sequencer Uptime Feed 指南。

寬限期讓使用者和系統有時間恢復,但不保證市場資料已更新。它不代表所有待處理交易已完成、價格現在準確,或應用程式可以同時安全地重新開放所有操作。不同 L2 的排序器、強制交易、訊息傳遞及復原機制各有不同,協議應按所用網路文件處理,不要假設所有 rollup 都以同一方式中斷。

這些控制無法保證價格正確或結果公平

Quorum、中位數、偏差觸發、heartbeat、資料年齡上限和排序器狀態檢查,各自只回答一個有限問題。它們無法保證來源市場有足夠流動性、觀察結果指向正確資產、資料服務商彼此獨立,或中位數適合某個交易規模。新時間戳仍可配上錯誤或受操縱的數值;市場平靜時,舊值也可能暫時接近市價。

任何更新觸發條件都不能消除市場跳空。兩次發布之間價格可以急變,資料饋送可以無法使用,區塊鏈可以擠塞,而合約也可能在單位縮放、資產對選擇、過期檢查或清算邏輯出錯。有些資料饋送對特定數據可能只倚賴單一來源或服務商。Chainlink 的資料饋送質素指南要求整合方評估來源流動性與依賴關係,並為過期、延遲、缺失或異常值設計處理方式。

斷路器和範圍限制可限制部分操作,卻預測不了每種合理市場狀況。範圍太窄可能拒絕正常價格變動;太寬則可能攔不住危險變化。預言機控制不能消除智慧合約、治理、流動性、跨鏈橋、抵押品或清算風險。穩定幣的預言機價格亦不等同持有人能否按面值贖回;穩定幣脫錨指南說明這些額外機制。

依賴價格前先追蹤完整路徑

評估協議時,先確認所用鏈、資料饋送代理、資產對、報價貨幣、答案精度及合約位址。把資料饋送描述與目標資產核對,並查看支援位址清單,不要直接複製另一網路的位址。若用途需要仔細監察,應檢視資料饋送模型、近期觀察結果或更新紀錄。Chainlink 指出不同網路的 aggregator 可以不同,亦應檢查合約程式碼及設定。

接着追蹤答案如何被使用:正確換算代幣數量和價格單位、查看 updatedAt、釐定過期界線,並找出無效答案會被拒絕、暫停操作,抑或只影響特定功能。在 L2 上,亦要找出 uptime 資料饋送、狀態定義、復原時間、寬限期,以及排序器延遲交易的處理方式。按實際合約邏輯檢查資料過期及停機/恢復兩種情境。

使用者評估借貸或交易協議時,應查閱文件和已部署合約的實際行為,不要因為熟悉某個預言機名稱便假設所有風險都已覆蓋。要問清哪個價格用於估值、借款、清算或結算;資料饋送過期或無法使用時會怎樣;誰可更改風險參數。真正影響帳戶的是協議內價格資料的完整路徑,而不只是介面標籤。

常見問題

Q1Heartbeat 是否代表價格必定在這段時間內更新?

不是。Heartbeat 是資料饋送更新設計中的時間觸發條件,不保證發布或納入區塊的時間精確,也不代表答案時刻都貼近即時市場。應查看 updatedAt,並按用途制定新鮮度規則。

Q2採用中位數的預言機資料饋送仍會出錯嗎?

會。中位數可減輕部分離群觀察的影響,但不能修正共同來源問題、流動性不足或受操縱的市場、錯誤資產對,或有缺陷的使用端程式。聚合只是整體風險設計的一項控制。

Q3L2 排序器 uptime 資料饋送等同價格過期檢查嗎?

不是。Uptime 資料饋送回報排序器狀態及轉變時間;價格過期檢查則把價格輪次的 updatedAt 與目前時間比較。應用程式可能需要兩種檢查及恢復後的寬限期。

資料來源與延伸閱讀

回報問題

我們會準備一封包含本文連結的電子郵件。寄出後,Mark 才會收到你的回報

快速檢查

讀完指南後,用 3 道題檢查一下

問題 1 / 3

問題 01

BTC/USD 資料饋送以 8 位小數回傳 `6,725,000,000,000`,換算後是多少?

選擇答案即可查看解釋

期權術語表