跳到正文

TWAP 預言機

TWAP 預言機依特定協議的累積觀測值推導時間加權參考價;v2 算術價格與 v3 平均 tick 在數學、歷史、流動性及操縱邊界上均不相同。

更新於

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

直接答案

時間加權平均價格預言機依指定期間內的累積觀測值推導參考價。它不是一套通用公式。Uniswap v2 累積池中兩個方向的線性邊際價格,因此以端點差計算算術 TWAP;Uniswap v3 累積對數價格座標 tick,因此算術平均 tick 映射為相對價格的幾何平均值。

只有鎖定鏈、池、實作、費率級距、代幣順序、基準/報價方向、小數位數、期間端點、經過時間、已填入歷史及捨入規則,結果才有意義。成功讀取不代表公允價值或可成交深度。較長期間可稀釋短暫扭曲,卻會增加落後程度,也無法抵禦持續操縱、集中流動性缺口、提議者或排序器控制、重組,或可提取價值高於操縱成本的使用方。

觀測值時效與市場時效並不相同。現在算出的平均值可能刻意保留舊價格狀態;活躍池仍可能流動性薄弱或偏離外部市場。因此,使用方須檢查歷史、流動性與價格偏離,設定符合特定操作的限額,並明定降級或暫停行為。

運作機制

  1. 鎖定鏈及區塊、工廠與池地址、協議版本和費率級距、token0token1、小數位數、基準/報價方向、使用方操作、期間及風險價值。
  2. 確認累積對象與單位:v2 的線性 price0Cumulativeprice1Cumulative、v3 的 tickCumulative,或其他協議明文規定的統計量。不得在不同實作間套用同一平均方法。
  3. 核對端點時間戳、正的經過時間、最早已初始化歷史、目前觀測容量,以及內插或反事實規則。observationCardinalityNext 是目標容量,不是已填入的歷史。
  4. 對 v2,以累積價格變化除以經過秒數,再將固定點單位及代幣小數位數標準化。兩個報價方向須分別計算;反向算術 TWAP 通常不等於正向 TWAP 的倒數。
  5. 對 v3,呼叫協議規定的觀測介面,以累積 tick 變化除以期間;若負商無法整除,應如 OracleLibrary 般向負無窮大捨入,再以 price = 1.0001^tick 將平均 tick 轉成標準化報價。
  6. 衡量目前區間內、調和、寬區間、各費率級距及外部市場的流動性。壓力測試單區塊與多區塊路徑、費用、套利、排序、審查、平倉損失、重組、落後及使用方可提取價值。
  7. 在明確的時效和偏離界限下,將 TWAP 與現貨及獨立參考值比較;監控歷史、流動性區間、池升級和鏈上狀況,並演練歷史不足、偏離、暫停、備援、清算及復原路徑。

Uniswap v2 儲存兩個方向的累積值,並隨時間推進。Uniswap v3 在循環緩衝區儲存觀測值,可以在觀測點間內插,也可建構目前的反事實累積值。這些建構端點符合協議運算規則,但不證明當時確有成交。提高容量只為未來觀測值保留空間,不會回填更早歷史。

計算範例

  • v2 累積價格。C_start = 1,000,000 price-secondsC_end = 1,360,000 price-seconds,且 elapsed = 3,600 seconds,則 TWAP = (1,360,000 - 1,000,000) / 3,600 = 100 quote/base。端點、方向、縮放尺度和時間戳都是結果的一部分。
  • 倒數陷阱。 正向價格先以 100 持續 900 seconds,再以 400 持續 900 seconds,其算術 TWAP 為 250。反向現貨價分別為 0.010.0025;反向算術 TWAP 為 0.00625,其倒數是 160,並非 250。求平均與取倒數不能交換順序。
  • 負平均 tick。tickCumulativeDelta = -39,601,期間為 3,600 seconds。Solidity 有號除法截斷後得到有餘數的 -11,但 v3 輔助程式庫向下取整為 meanTick = -12。相對幾何價格為 1.0001^-12 = 0.998800779636。正負號或捨入錯誤會系統性改變報價方向。
  • 稀釋與落後。 池價先以 100 持續 1,740 seconds,再以 400 持續 60 seconds,觀測期間為 1,800-second。v2 式算術 TWAP 為 (100 * 1,740 + 400 * 60) / 1,800 = 110;v3 式幾何平均為 100^(29/30) * 400^(1/30) = 104.7294122821。兩者都不同於目前現貨價 400,彼此也不相同;任何一個數值本身都不能說明操縱成本或可成交規模。

風險

  • 鏈、工廠、池、費率級距、實作或升級狀態錯誤。
  • 基準/報價或 token0/token1 方向顛倒。
  • 代幣小數位數、固定點尺度或報價標準化錯誤。
  • 將 v2 算術價格與 v3 幾何價格視為同一統計量。
  • 以正向 TWAP 的倒數計算反向算術 TWAP。
  • 使用錯誤的累積端點、經過時間、期間邊界或目前區塊。
  • 未妥善處理零值、負值、回繞或實作特有的時間戳運算。
  • 要求的歷史早於最早已初始化觀測值。
  • observationCardinalityNext 誤認為已填入的 observationCardinality
  • 將內插或反事實觀測值誤認為實際成交。
  • 將負平均 tick 向零而非向負無窮大捨入。
  • tick 轉換、整數範圍、溢位或報價捨入不安全。
  • 活躍區間內或調和流動性不足以涵蓋受保護曝險。
  • 操縱分析忽略寬區間深度缺失或流動性撤出。
  • 流動性分散於不同池、費率級距、鏈或相關交易場所。
  • 短期間仍容易受到單區塊、原子式或瞬時操縱影響。
  • 長期間會落後於真實重新定價、脫鉤或流動性遷移。
  • 多區塊提議者、排序器、審查、壅塞、MEV 或重組狀況妨礙價格修復或強化控制。
  • 未檢查偏離及深度,便將 TWAP 視為具時效的公允價值或任意規模的可成交價。
  • 使用方曝險高於操縱成本,而備援、熔斷、暫停、清算及復原機制並不安全。

常見迷思

  • 「TWAP 一律是價格的算術平均值。」 v3 平均的是 tick,因此得到相對價格的幾何平均值。
  • 「反向報價一定等於正向 TWAP 的倒數。」 分別平均線性價格時並不具備這種對稱性。
  • 「期間越長,就越不可能受到操縱。」 它只是以更大落後換取較低的短暫扭曲敏感度,持續控制或流動性不足仍可影響結果。
  • 「提高容量會立即產生更多歷史。」 它僅增加未來容量,後續仍須逐步初始化觀測值。
  • 「預言機成功讀取且具時效,就證明市場價值公允並可成交。」 介面成功不能證明經濟時效、深度、獨立性或使用方曝險安全。

相關主題

資料來源

導覽

搜尋知識庫...