﻿---
title: "TWAPオラクル"
description: "TWAPオラクルは、プロトコル固有の累積観測値から時間加重基準価格を導出します。v2の算術価格とv3の平均ティックでは、数学、履歴、流動性、価格操作の境界が異なります。"
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>

## 直接の回答

時間加重平均価格オラクルは、指定期間の累積観測値から基準価格を導出します。すべてに共通する一つの計算式ではありません。Uniswap v2はプールの各方向について線形の限界価格を累積するため、端点の差から算術平均TWAPを求めます。Uniswap v3は対数価格座標であるティックを累積するため、算術平均ティックは相対価格の幾何平均に対応します。

結果が意味を持つのは、チェーン、プール、実装、手数料ティア、トークン順序、基準/気配方向、小数桁、端点、経過時間、蓄積済み履歴、丸め規則を特定した場合だけです。読み取りの成功は、公正価値や約定可能な流動性を証明しません。長い窓は一時的な歪みを薄める一方で遅行性を高め、持続的な価格操作、集中流動性の空白、提案者やシーケンサーの支配、リオーグ、または利用側の抽出可能価値が操作コストを上回る状況を防げません。

観測値の鮮度と市場の鮮度は別の概念です。今計算した平均でも、古い価格局面を意図的に残します。取引が活発なプールでも流動性が薄く、外部市場から乖離している場合があります。利用側には履歴確認、流動性と乖離の検査、処理別の上限、明示的な縮退・停止動作が必要です。

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

## 仕組み

1. チェーンとブロック、ファクトリーとプールアドレス、プロトコルのバージョンと手数料ティア、`token0`と`token1`、小数桁、基準/気配方向、利用処理、窓、リスクにさらす価値を固定します。
2. 累積対象と単位を特定します。v2の線形な`price0Cumulative`または`price1Cumulative`、v3の`tickCumulative`、あるいは別プロトコルが文書化した統計量です。実装をまたいで平均計算を流用してはいけません。
3. 端点タイムスタンプ、正の経過時間、初期化済みの最古履歴、現在の観測カーディナリティ、補間または反実仮想の規則を確認します。`observationCardinalityNext`は目標容量であり、蓄積済み履歴ではありません。
4. v2では累積価格の変化を経過秒数で割り、固定小数点単位とトークン小数桁を正規化します。気配方向はそれぞれ独立に計算します。逆方向の算術TWAPは、通常、順方向TWAPの逆数ではありません。
5. v3では文書化された観測インターフェースを呼び、累積ティックの変化を窓で割ります。負で割り切れない商は`OracleLibrary`と同様に負の無限大方向へ丸め、`price = 1.0001^tick`により平均ティックを正規化された気配値へ変換します。
6. 現在のレンジ内流動性、調和流動性、広いレンジの流動性、手数料ティア別流動性、外部市場の流動性を測定します。単一・複数ブロックの経路、手数料、裁定、順序付け、検閲、解消損、リオーグ、遅行性、利用側の抽出可能価値をストレステストします。
7. 明示した鮮度と乖離の上限内で、TWAPをスポットおよび独立した基準値と比較します。履歴、流動性レンジ、プール更新、チェーン状態を監視し、履歴不足、乖離、停止、フォールバック、清算、復旧の手順を演習します。

Uniswap v2は二方向の累積値を保存し、時間とともに更新します。Uniswap v3は循環バッファーに観測値を保存し、観測値間を補間したり、現在時点の反実仮想累積値を構成したりできます。こうして構成した端点はプロトコル上の正当な計算値ですが、その時点で取引が成立した証拠ではありません。容量を増やしても将来の観測用領域が増えるだけで、過去の履歴は遡って補完されません。

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

## 計算例

- **v2の累積価格。** `C_start = 1,000,000 price-seconds`、`C_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.01`と`0.0025`で、その算術TWAPは`0.00625`、その逆数は`160`であり`250`ではありません。平均と逆数を取る順序は交換できません。
- **負の平均ティック。** `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`とも互いとも異なります。いずれの数値だけでも、操作コストや約定可能数量は示しません。

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

## リスク

- チェーン、ファクトリー、プール、手数料ティア、実装、更新状態を取り違える。
- 基準/気配または`token0`/`token1`の方向を逆にする。
- トークン小数桁、固定小数点尺度、気配値の正規化を誤る。
- v2の算術価格とv3の幾何平均価格を同じ統計量として扱う。
- 逆方向の算術TWAPを順方向TWAPの逆数として計算する。
- 累積値の端点、経過時間、窓の境界、現在ブロックを誤る。
- ゼロ、負値、ラップアラウンド、実装固有のタイムスタンプ計算を誤る。
- 要求した履歴が初期化済みの最古観測値より古い。
- `observationCardinalityNext`を蓄積済みの`observationCardinality`と誤認する。
- 補間または反実仮想の観測値を実際の取引と誤認する。
- 負の平均ティックを負の無限大でなくゼロ方向へ丸める。
- ティック変換、整数範囲、オーバーフロー、気配値の丸めが安全でない。
- 現在のレンジ内または調和流動性が保護対象のエクスポージャーに対して薄すぎる。
- 広いレンジの厚みがない、除去された、または操作分析から漏れている。
- 流動性がプール、手数料ティア、チェーン、相関市場に分散している。
- 短い窓が単一ブロック、アトミック、一時的な操作に敏感なままである。
- 長い窓が真の再評価、ペッグ乖離、流動性移動に遅行する。
- 複数ブロックの提案者、シーケンサー、検閲、混雑、MEV、リオーグにより価格修正が妨げられ、支配が強まる。
- 乖離や厚みを確認せず、TWAPを鮮度の高い公正価値または任意数量の約定可能価格とみなす。
- 利用側のエクスポージャーが操作コストを上回り、フォールバック、サーキットブレーカー、停止、清算、復旧動作も安全でない。

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

## よくある誤解

- **「TWAPは常に価格の算術平均である。」** v3はティックを平均するため、相対価格の幾何平均になります。
- **「逆方向の気配値は常に順方向TWAPの逆数である。」** 線形価格を方向別に平均する場合、この対称性は成立しません。
- **「窓を長くすれば価格操作は不可能になる。」** 一時的な歪みへの感応度と引き換えに遅行性が増し、持続的支配や弱い流動性の影響は残ります。
- **「カーディナリティを増やすと履歴が直ちに増える。」** 将来の容量が増えるだけで、観測値はその後に初期化される必要があります。
- **「鮮度の高いオラクル読み取りが成功すれば、公正で約定可能な市場価値が証明される。」** インターフェースの成功は、経済的な鮮度、厚み、独立性、利用側エクスポージャーの安全性を証明しません。

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

## 関連トピック

- [自動マーケットメーカー](/ja/crypto/amm/)
- [オラクル攻撃](/ja/crypto/oracle-attack/)
- [オラクル価格の陳腐化](/ja/crypto/oracle-price-staleness/)

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

## 出典

- [Uniswap v2 Core](https://app.uniswap.org/whitepaper.pdf) - Uniswap（参照日：2026-08-13）
- [Oracles](https://developers.uniswap.org/docs/protocols/v2/concepts/oracles) - Uniswap Developers（参照日：2026-08-13）
- [Uniswap v3 Core](https://uniswap.org/whitepaper-v3.pdf) - Uniswap（参照日：2026-08-13）
- [Price Oracles](https://developers.uniswap.org/docs/protocols/v3/concepts/price-oracles) - Uniswap Developers（参照日：2026-08-13）
- [Oracle.sol](https://github.com/Uniswap/v3-core/blob/main/contracts/libraries/Oracle.sol) - Uniswap v3 Core（参照日：2026-08-13）
- [OracleLibrary.sol](https://github.com/Uniswap/v3-periphery/blob/main/contracts/libraries/OracleLibrary.sol) - Uniswap v3 Periphery（参照日：2026-08-13）
- [Uniswap v3 TWAP Oracles in Proof of Stake](https://blog.uniswap.org/uniswap-v3-oracles) - Uniswap Labs（参照日：2026-08-13）
- [SC03:2026 Price Oracle Manipulation](https://scs.owasp.org/sctop10/SC03-PriceOracleManipulation/) - OWASP Smart Contract Security（参照日：2026-08-13）

Source: https://wiki.fcontext.com/ja/crypto/oracle-twap/index.mdx
