﻿---
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-cn/crypto/twap-window-selection/index.mdx
