﻿---
title: "如何選擇 TWAP 視窗"
description: "選擇 TWAP 回看視窗時，應檢驗操縱成本、市場深度、價格滯後、觀測資料可用性及協議風險曝險，而不是照搬一個通用時長。"
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 如何選擇 TWAP 視窗

> 僅供教育參考，不構成投資或安全建議。設計不當的價格預言機可能導致錯誤清算、無足額抵押借款和協議損失。

<a id="answer"></a>

## 直接答案

不存在普遍安全的 TWAP 視窗。應選擇**在特定資金池和協議中足以使有利可圖的操縱變得不現實的最短視窗**，再確認真實價格跳變時的滯後仍可接受。視窗變長通常迫使攻擊者更久地影響市場，但也會讓舊價格更久地留在平均值中。它無法彌補流動性稀薄、相關價格路徑上缺少集中流動性、風險曝險過大或整合錯誤。

選窗是一項風險預算工作，不是從 5 分鐘、30 分鐘或 1 小時等預設值中任選其一。協議應記錄來源池與平均演算法、可容忍的最大價格誤差和回應延遲、可提取經濟價值、建模攻擊成本、可用觀測歷史及備援行為。流動性、激勵、出塊方式、抵押品上限或市場結構變化後都要重新評估。

<a id="mechanism"></a>

## 運作原理

累加器型預言機會隨時間記錄價格。對於算術累加器，從 `t1` 到 `t2` 的平均值為：

`TWAP(t1,t2) = (cumulativePrice(t2) - cumulativePrice(t1)) / (t2 - t1)`

Uniswap v2 累加每個區塊開始時測得的價格，由外部使用者保存兩個累加值。Uniswap v3 保存累計 tick 觀測值，因此把平均 tick 轉換成價格後得到時間加權**幾何**平均價格。平均方式、報價方向、觀測容量、捨入和更新行為都是預言機規格的一部分；整合方不能假設所有 TWAP 都是現貨採樣值的算術平均。

按以下流程選擇：

1. **定義使用方的損失函數。** 記錄價格如何改變借款額度、清算、鑄造、贖回或結算，並為上漲和下跌市場分別設定最大可容忍延遲與誤差。
2. **測量可執行流動性。** 對攻擊者必須穿越的整條價格路徑建模儲備、手續費和活躍區間內流動性。僅憑 TVL 和近期成交量無法證明抗操縱能力。
3. **限定攻擊者收益。** 納入抵押品上限、借款上限、清算獎勵、已有部位、跨協議組合性和暫停前可獲得的利潤。安全裕度應以總可提取價值為基準，而非單一使用者的交易額。
4. **建模可行攻擊。** 測試單區塊和多區塊扭曲、閃電資金、提議者控制或排序優勢、套利與反向交易、壅塞和退出成本。研究表明，在更強的攻擊者模型下，攻擊成本隨視窗線性成長的簡單假設可能失效。
5. **掃描候選視窗。** 對每個時長模擬歷史跳變和對抗性價格路徑；既允許有利可圖操縱，或使協議使用不可接受陳舊價格的視窗都應淘汰。
6. **加入獨立控制。** 使用風險曝險上限、相對獨立參考價的偏差或合理性檢查、陳舊度限制、保守抵押率，以及經過測試的暫停或備援方案。這些措施不能把不安全的資料源變安全，但能在假設失效時限制損失。

結論只適用於特定資金池、手續費級距、鏈、預言機實作、資產對和協議狀態。照搬另一協議的 30 分鐘視窗，並不會複製它的流動性和損失上限。

<a id="example"></a>

## 範例

假設使用簡化的算術 TWAP，市場價格從 `100` 瞬間變為 `70`，之後維持在 `70`。變動 15 分鐘後查看 30 分鐘滾動視窗，其中兩個價格各占 15 分鐘：

`(15 x 100 + 15 x 70) / 30 = 85`

30 分鐘後，舊的 `100` 觀測值完全離開視窗，TWAP 才到 `70`。5 分鐘視窗會在 5 分鐘後到達 `70`，但攻擊者需要維持扭曲的時間也更短。對借貸市場而言，當可執行市場價接近 `70` 時仍按約 `85` 估值抵押品，可能延誤清算並形成壞帳；其他用途可能接受較慢的數值。

本例只說明滯後，不估算操縱成本；`85` 也不適用於幾何平均預言機。真實審查必須用準確的預言機演算法回放資金池觀測、活躍流動性、手續費、區塊順序和協議部位。

<a id="risks"></a>

## 風險與控制

- **視窗過短：** 少量被扭曲區塊就可能使結果偏移到攻擊有利可圖的程度。應增強抗操縱能力、改善來源市場、減少曝險或採用更多元的參考價。
- **視窗過長：** 預言機會明顯滯後於真實跳變，價格下跌時延誤清算，上漲時低估抵押品。應測量最壞滯後並採用保守風險參數。
- **流動性誤判：** 名義 TVL 可能不活躍、過度集中、單邊分布，或不在攻擊路徑上。應使用相關 tick 和價位上的可執行深度及活躍流動性。
- **觀測故障：** 歷史不足、觀測陳舊、容量未初始化、時間戳錯誤、資金池或報價方向選錯都會使計算失效。應回復交易或進入有文件說明的安全狀態，不要靜默替換資料。
- **攻擊者模型失效：** 閃電流動性、多區塊提議者影響、交易排序和跨協議利潤會降低淨攻擊成本。應對假設做壓力測試，不能把「手續費乘以分鐘數」當成證明。
- **治理與市場漂移：** 流動性遷移、手續費級距變化、新增抵押品、調高上限、升級或換鏈後，原本通過測試的視窗也可能失效。應持續監控輸入並設定複審門檻。
- **備援失敗：** 獨立價格源可能有不同的市場涵蓋、精度、延遲或故障模式。必須明確何時暫停、拒絕、限額或切換，並在鏈上測試該路徑。

部署前應公開單位、報價方向、平均演算法、視窗、最低可用歷史、來源池標準、風險上限和故障行為。上線後同時監控 TWAP 相對參考價的偏差，以及原攻擊成本模型使用的經濟輸入。

<a id="misconceptions"></a>

## 常見誤區

- **「視窗越長越安全。」** 它可能延長攻擊所需時間，卻也增加滯後，且不能修復薄弱流動性或不完整的攻擊者模型。
- **「30 分鐘 TWAP 是業界安全保證。」** 時長只是一個參數；安全性還取決於資金池深度、活躍流動性、手續費、出塊方式、預言機演算法和風險曝險。
- **「閃電貸無法影響 TWAP。」** 閃電貸消除了單筆交易內的資金限制；攻擊能否成功取決於採樣方式、攻擊者能否影響足夠多的視窗，以及能否利用周邊協議邏輯。
- **「高 TVL 就代表高操縱成本。」** 只有相關價格路徑上可執行的流動性，才直接抵抗建模中的交易。
- **「TWAP 就是目前市場價。」** 它是特定市場歷史鏈上狀態的平均值，因此有意滯後，也未必代表更廣泛市場。

<a id="related"></a>

## 相關主題

- [流動性池](/crypto/liquidity-pool/)
- [加密貨幣強平](/crypto/liquidation/)
- [預言機攻擊](/crypto/oracle-attack/)
- [預言機價格陳舊](/crypto/oracle-price-staleness/)
- [TWAP 預言機](/crypto/oracle-twap/)

<a id="sources"></a>

## 來源

- [Uniswap v2 Core](https://docs.uniswap.org/whitepaper.pdf) - Uniswap（存取日期：2026-08-21）
- [Uniswap v3 Core](https://app.uniswap.org/whitepaper-v3.pdf) - Uniswap（存取日期：2026-08-21）
- [Uniswap v3 TWAP Oracles in Proof of Stake](https://blog.uniswap.org/uniswap-v3-oracles) - Uniswap Labs（存取日期：2026-08-21）
- [TWAP Oracle Attacks: Easier Done than Said?](https://doi.org/10.1109/ICBC54727.2022.9805499) - IEEE（存取日期：2026-08-21）

Source: https://wiki.fcontext.com/zh-tw/crypto/twap-window-selection/index.mdx
