﻿---
title: "预言机攻击"
description: "预言机攻击利用可操纵、过时、缩放错误或配置错误的外部数据，使协议以不安全的数值借贷、铸造、赎回、结算或清算。"
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.

# 预言机攻击

> 仅供教育参考，不构成投资建议；投资可能产生损失。

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

## 直接答案

预言机攻击利用协议的数据信任边界，让价格、汇率、指数、资产净值或状态输入触发经济上不安全的操作。攻击者可能操纵流动性薄弱的场所、攻破报告方或密钥、利用聚合或更新规则，也可能借助借入资金，利用消费方缺失的新鲜度、单位、范围和回退检查。即使预言机运营方没有恶意，过时或配置错误的数据源也可能造成同样损失，因此事件分析必须区分攻击路径与故障模式。

决定性比较并非显示价格是否剧烈波动，而是影响合约实际采用数值的成本与风险，是否低于借贷、铸造、赎回、结算或清算可提取的可执行价值。闪电流动性可以为原子路径融资，但它既不会制造有缺陷的信任边界，也不是利用漏洞的必要条件。

预言机数值也不一定是可执行市场价格。每次审查都必须将数值绑定到链、区块、数据源或池地址、基础与报价资产方向、小数位数、时间戳、聚合方式、市场规模及消费函数。有效签名只证明谁依某种方案报告了数据；它本身不证明数据新鲜、来源独立、市场深度充足或经济上正确。

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

## 运作方式

1. 锁定部署：链、区块、消费合约与函数、资产合约、数据源代理或池、聚合器、基础与报价资产、小数位数、管理员和升级状态。
2. 映射从交易所、池或报告方，经聚合、签名、代理或适配器、回退机制到消费逻辑的完整信任路径；记录共享的场所、运营方、密钥和治理，不能把不同标签直接当作独立来源。
3. 精确复现链上读取：答案、轮次元数据、时间戳、适用的置信度或状态、小数归一化、报价方向反转、排序器状态与宽限期、最大数据年龄、偏差界限，以及零值或负值处理。
4. 建立消费方敞口账本：抵押品系数、清算阈值、借贷与供应上限、可用流动性、债务、铸造或赎回限额、关闭因子、清算奖励，以及该数值可启用的所有操作。
5. 按可执行规模模拟操纵，纳入储备、活跃流动性、观察值、窗口和加权约定、费用、套利、区块排序、闪电或自有资金、平仓损失、gas、MEV 及竞争清算方。
6. 测试控制措施与故障状态：独立来源、TWAP 观察容量、限额、熔断器、暂停权限、时间锁、过时或偏离的回退数据、报告方或密钥丢失、L2 排序器停机、真实价格跳空，以及 fail-open 与 fail-closed 行为。
7. 监控并核对 canonical 数据轮次、代理与配置变更、来源偏差、协议操作、清算、坏账、暂停和恢复决策；流动性、资产上线、升级或市场状态改变后重新分析。

现货 AMM 读数往往能在单笔交易内改变。时间加权平均要求跨观察值持续影响，可能提高攻击成本，但其安全性取决于具体算术或基于 tick 的约定、窗口、观察容量、流动性分布及区块控制。中位数能排除部分异常值，但上游场所相关或法定人数不足仍会损害安全性或活性。心跳和偏差设置决定某些数据源何时发布；消费方仍须制定自己的新鲜度与有效性政策。

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

## 计算示例

- **恒定乘积现货。** 忽略一个池的费用，其储备为 `1,000,000 ABC` 和 `1,000,000 USDC`，因此 `k = 10^12`。目标边际价格 `9 USDC/ABC` 要求储备变为 `3,000,000 USDC` 与 `333,333.333333 ABC`：交易者投入 `2,000,000 USDC`，获得 `666,666.666667 ABC`。最终边际价格为 `3,000,000 / 333,333.333333 = 9`，平均成交价为 `2,000,000 / 666,666.666667 = 3 USDC/ABC`。相比之下，投入 `5,000,000 USDC` 后储备为 `6,000,000` 与 `166,666.666667`，边际价格是 `36`，不是 `9`。实际费用、套利、集中流动性和平仓会改变账本。
- **TWAP 约定。** 十个等权一分钟观察值中，九个价格为 `100`，一个为 `160`。教学用算术 TWAP 为 `(9 * 100 + 160) / 10 = 106`，仅比 100 高 `6%`，即使最后现货高出 `60%`。若其他九个仍为 100，要使算术平均达到 `130`，被操纵的观察值必须是 `400`。Uniswap v3 的 tick 均值采用几何口径，并非这个算术示例，因此消费方必须复现已部署约定。
- **中位数与法定人数。** 七个归一化观察值为 `[99, 100, 100, 101, 101, 500, 600]`；中位数为 `101`，因此两个极端报告无法让结果偏离诚实值簇。若接受结果需要五个实时报告，而三个诚实报告方离线，就只剩 `4 < 5`：抗异常值不等于可用性，回退行为也成为安全模型的一部分。
- **过时数据与错误清算。** 一个八位小数的数据源返回原始值 `140,000,000,000`，即 `1,400`，但数据年龄为 `17 minutes`，超过消费方上限 `15 minutes`，因此应拒绝。若仍用该过时数值计算 `10 ETH`、`75%` 清算阈值和 `12,000` 债务，健康因子为 `10 * 1,400 * 0.75 / 12,000 = 0.875`；按新鲜价格 `2,000` 计算则为 `1.25`。之后修正价格不会撤销已经完成的清算。

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

## 风险

- 链、资产、数据源、代理、池或消费方地址错误。
- 基础与报价资产方向反转，或计价单位不一致。
- 数据源、代币和内部定点数的小数归一化错误。
- 接受过时数据，或误把心跳和偏差触发条件当作新鲜度保证。
- 接受不完整轮次、无效状态、零值、负值、封顶值或越界答案。
- 流动性薄弱的单一场所现货价格控制庞大协议敞口。
- TWAP 窗口过短、观察稀疏、加权错误或读取方向错误。
- 误解观察容量、初始化、插值或回退行为。
- 集中或即时流动性使池总价值无法反映攻击成本。
- 多个数据源共享相同交易所、数据商、运营方、密钥或控制平面。
- 报告方、交易所、API、签名方、网络或法定人数故障破坏更新或完整性。
- L2 排序器停机，或恢复宽限期缺失、设置错误，暴露过时状态。
- 回退数据过时、循环依赖、相关、缩放不同或语义不兼容。
- 闪电流动性与原子可组合性使短暂影响可用于获利。
- 预言机更新排序、抢跑、夹击、尾随交易或清算 MEV 改变收益。
- 抵押品系数、清算阈值、限额、奖励和可用流动性放大小幅错误。
- 治理方、管理员、guardian、多签或签名密钥被攻破，改变信任路径。
- 代理、聚合器、适配器、升级、存储或配置错误选择了错误数值。
- 熔断器或 fail-closed 逻辑在压力期冻结正常借贷、还款或清算。
- 暂停、恢复、账户核对、坏账分配或跨协议隔离失败。

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

## 常见误区

- **“每次预言机攻击都会攻破预言机网络。”** 很多故障利用薄弱来源、过时数值、错误单位、不安全适配器或消费逻辑，而报告网络仍按配置运行。
- **“多个或去中心化数据源保证价格正确。”** 来源独立性与质量、法定人数、新鲜度、单位、聚合和消费方检查仍不可少。
- **“TWAP 让操纵不可能发生。”** 它改变影响所需的时长与成本；薄弱窗口、稀疏观察、浅流动性或区块控制仍可能被利用。
- **“禁止闪电贷就能消除预言机风险。”** 闪电贷只是一种融资方式；自有资金、信用、跨协议借贷、报告方被攻破和配置错误仍然存在。
- **“价格恢复就会撤销损失。”** canonical 借贷、铸造、赎回、结算和清算会继续有效，除非协议另有获授权的恢复流程。

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

## 相关主题

- [预言机](/zh-cn/crypto/oracle/)
- [借贷协议](/zh-cn/crypto/lending-protocol/)
- [清算](/zh-cn/crypto/liquidation/)

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

## 来源

- [SC03:2026 Price Oracle Manipulation](https://scs.owasp.org/sctop10/SC03-PriceOracleManipulation/) - OWASP Smart Contract Security（访问日期：2026-08-13）
- [Chainlink Data Feeds](https://docs.chain.link/data-feeds) - Chainlink Documentation（访问日期：2026-08-13）
- [Data Feeds API Reference](https://docs.chain.link/data-feeds/api-reference) - Chainlink Documentation（访问日期：2026-08-13）
- [L2 Sequencer Uptime Feeds](https://docs.chain.link/data-feeds/l2-sequencer-feeds) - Chainlink Documentation（访问日期：2026-08-13）
- [Uniswap v2 Core](https://app.uniswap.org/whitepaper.pdf) - Uniswap Labs（访问日期：2026-08-13）
- [Price Oracles](https://developers.uniswap.org/docs/protocols/v3/concepts/price-oracles) - Uniswap Developers（访问日期：2026-08-13）
- [Oracles](https://aave.com/docs/aave-v3/smart-contracts/oracles) - Aave Protocol Documentation（访问日期：2026-08-13）
- [Flash Loans](https://aave.com/docs/aave-v3/guides/flash-loans) - Aave Protocol Documentation（访问日期：2026-08-13）

Source: https://wiki.fcontext.com/zh-cn/crypto/oracle-attack/index.mdx
