﻿---
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의 역수로 계산합니다.
- 잘못된 누적값 끝점, 경과 시간, 구간 경계 또는 현재 블록을 사용합니다.
- 0, 음수, 래핑 또는 구현별 타임스탬프 계산을 잘못 처리합니다.
- 요청한 이력이 초기화된 가장 오래된 관측값보다 이전입니다.
- `observationCardinalityNext`를 채워진 `observationCardinality`로 오해합니다.
- 보간되거나 반사실적인 관측값을 실제 거래로 오해합니다.
- 음의 평균 틱을 음의 무한대 방향이 아니라 0 방향으로 반올림합니다.
- 틱 변환, 정수 범위, 오버플로 또는 호가 반올림이 안전하지 않습니다.
- 현재 범위 내 또는 조화 유동성이 보호 대상 익스포저에 비해 너무 얕습니다.
- 넓은 범위의 깊이가 없거나 제거됐거나 조작 분석에서 누락됩니다.
- 유동성이 풀, 수수료 티어, 체인 또는 상관 시장에 분산됩니다.
- 짧은 구간이 단일 블록, 원자적 또는 일시적 조작에 계속 민감합니다.
- 긴 구간이 실제 재평가, 페그 이탈 또는 유동성 이동을 늦게 반영합니다.
- 다중 블록 제안자, 시퀀서, 검열, 혼잡, MEV 또는 재구성 조건이 가격 회복을 방해하거나 통제를 강화합니다.
- 괴리와 깊이를 확인하지 않고 TWAP를 최신 공정 가치나 임의 규모의 체결 가능 가격으로 간주합니다.
- 소비자 익스포저가 조작 비용을 초과하고 대체 경로, 서킷 브레이커, 일시 중지, 청산 및 복구 동작도 안전하지 않습니다.

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

## 일반적인 오해

- **“TWAP는 항상 가격의 산술 평균이다.”** v3는 틱을 평균하므로 상대 가격의 기하 평균을 산출합니다.
- **“역방향 호가는 항상 정방향 TWAP의 역수다.”** 선형 가격을 방향별로 평균하면 이 대칭성은 성립하지 않습니다.
- **“관측 구간을 늘리면 가격 조작은 불가능해진다.”** 짧은 왜곡에 대한 민감도를 낮추는 대신 지연이 커지고, 지속적인 통제나 약한 유동성의 영향은 남습니다.
- **“카디널리티를 늘리면 이력이 즉시 늘어난다.”** 향후 용량만 증가하며 관측값은 이후에 초기화되어야 합니다.
- **“최신 오라클 조회가 성공하면 공정하고 체결 가능한 시장 가치가 입증된다.”** 인터페이스 성공은 경제적 최신성, 깊이, 독립성 또는 소비자 익스포저의 안전성을 입증하지 않습니다.

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

## 관련 주제

- [자동화 마켓 메이커](/ko/crypto/amm/)
- [오라클 공격](/ko/crypto/oracle-attack/)
- [오래된 오라클 가격](/ko/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/ko/crypto/oracle-twap/index.mdx
