﻿---
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-tw/crypto/oracle/)
- [借貸協定](/zh-tw/crypto/lending-protocol/)
- [清算](/zh-tw/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-tw/crypto/oracle-attack/index.mdx
