교육 목적으로만 제공되며 투자 조언이 아닙니다. 투자에는 손실이 발생할 수 있습니다.
직접 답변
시간 가중 평균 가격 오라클은 지정된 구간의 누적 관측값에서 기준 가격을 도출합니다. 모든 구현에 적용되는 하나의 공식이 아닙니다. Uniswap v2는 풀의 각 방향에 대한 선형 한계 가격을 누적하므로 양 끝점의 차이로 산술 TWAP를 구합니다. Uniswap v3는 로그 가격 좌표인 틱을 누적하므로 산술 평균 틱은 상대 가격의 기하 평균으로 변환됩니다.
체인, 풀, 구현, 수수료 티어, 토큰 순서, 기준/호가 방향, 소수 자릿수, 끝점, 경과 시간, 채워진 이력 및 반올림 규칙을 확정해야만 결과에 의미가 있습니다. 조회 성공은 공정 가치나 실제 체결 가능한 유동성을 입증하지 않습니다. 긴 구간은 짧은 왜곡을 희석하지만 지연을 늘리며, 지속적인 조작, 집중 유동성 공백, 제안자나 시퀀서의 통제, 재구성 또는 소비자 측 추출 가능 가치가 조작 비용을 초과하는 상황을 막지 못합니다.
관측값의 최신성과 시장의 최신성은 별개입니다. 지금 계산한 평균도 의도적으로 오래된 가격 국면을 포함할 수 있습니다. 활발한 풀도 유동성이 얕거나 외부 시장과 괴리될 수 있습니다. 따라서 소비자는 이력, 유동성 및 괴리를 점검하고, 행위별 한도를 설정하며, 성능 저하나 일시 중지 시의 동작을 명시해야 합니다.
작동 방식
- 체인과 블록, 팩토리와 풀 주소, 프로토콜 버전과 수수료 티어,
token0와token1, 소수 자릿수, 기준/호가 방향, 소비자 행위, 관측 구간 및 위험 노출 가치를 확정합니다. - 누적 대상과 단위를 확인합니다. v2의 선형
price0Cumulative또는price1Cumulative, v3의tickCumulative, 혹은 다른 프로토콜이 문서화한 통계량입니다. 구현 간에 산술을 그대로 옮겨 쓰지 않습니다. - 끝점 타임스탬프, 양의 경과 시간, 초기화된 가장 오래된 이력, 현재 관측 카디널리티, 보간 또는 반사실 규칙을 확인합니다.
observationCardinalityNext는 목표 용량이지 이미 채워진 이력이 아닙니다. - v2에서는 누적 가격 변화를 경과 초로 나누고 고정소수점 단위와 토큰 소수 자릿수를 정규화합니다. 각 호가 방향은 독립적으로 계산해야 하며, 역방향 산술 TWAP는 일반적으로 정방향 TWAP의 역수가 아닙니다.
- v3에서는 문서화된 관측 인터페이스를 호출하고 누적 틱 변화를 구간으로 나눕니다. 음수인 몫이 정확히 나누어지지 않으면
OracleLibrary처럼 음의 무한대 방향으로 내림한 후price = 1.0001^tick을 사용해 평균 틱을 정규화된 호가로 변환합니다. - 현재 범위 내 유동성, 조화 유동성, 넓은 범위의 유동성, 수수료 티어별 유동성 및 외부 시장 유동성을 측정합니다. 단일·다중 블록 경로, 수수료, 차익거래, 순서 지정, 검열, 포지션 해소 손실, 재구성, 지연 및 소비자 측 추출 가능 가치를 스트레스 테스트합니다.
- 명시적인 최신성 및 괴리 한도 아래에서 TWAP를 현물 및 독립 기준과 비교합니다. 이력, 유동성 범위, 풀 업그레이드 및 체인 상태를 모니터링하고, 이력 부족, 괴리, 일시 중지, 대체 경로, 청산 및 복구 절차를 연습합니다.
Uniswap v2는 두 방향의 누적값을 저장하고 시간에 따라 갱신합니다. Uniswap v3는 순환 버퍼에 관측값을 저장하고 관측값 사이를 보간하거나 현재 시점의 반사실 누적값을 구성할 수 있습니다. 이렇게 구성한 끝점은 프로토콜 계산상 유효하지만, 해당 시점에 거래가 체결되었다는 증거는 아닙니다. 용량을 늘리면 향후 관측 공간만 생기며 과거 이력은 소급하여 채워지지 않습니다.
계산 예시
- 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및 서로와 다릅니다. 어느 숫자만으로도 조작 비용이나 체결 가능 규모를 알 수 없습니다.
위험
- 체인, 팩토리, 풀, 수수료 티어, 구현 또는 업그레이드 상태를 잘못 선택합니다.
- 기준/호가 또는
token0/token1방향을 뒤집습니다. - 토큰 소수 자릿수, 고정소수점 스케일 또는 호가 정규화를 잘못 적용합니다.
- v2 산술 가격과 v3 기하 가격을 같은 통계량으로 취급합니다.
- 역방향 산술 TWAP를 정방향 TWAP의 역수로 계산합니다.
- 잘못된 누적값 끝점, 경과 시간, 구간 경계 또는 현재 블록을 사용합니다.
- 0, 음수, 래핑 또는 구현별 타임스탬프 계산을 잘못 처리합니다.
- 요청한 이력이 초기화된 가장 오래된 관측값보다 이전입니다.
observationCardinalityNext를 채워진observationCardinality로 오해합니다.- 보간되거나 반사실적인 관측값을 실제 거래로 오해합니다.
- 음의 평균 틱을 음의 무한대 방향이 아니라 0 방향으로 반올림합니다.
- 틱 변환, 정수 범위, 오버플로 또는 호가 반올림이 안전하지 않습니다.
- 현재 범위 내 또는 조화 유동성이 보호 대상 익스포저에 비해 너무 얕습니다.
- 넓은 범위의 깊이가 없거나 제거됐거나 조작 분석에서 누락됩니다.
- 유동성이 풀, 수수료 티어, 체인 또는 상관 시장에 분산됩니다.
- 짧은 구간이 단일 블록, 원자적 또는 일시적 조작에 계속 민감합니다.
- 긴 구간이 실제 재평가, 페그 이탈 또는 유동성 이동을 늦게 반영합니다.
- 다중 블록 제안자, 시퀀서, 검열, 혼잡, MEV 또는 재구성 조건이 가격 회복을 방해하거나 통제를 강화합니다.
- 괴리와 깊이를 확인하지 않고 TWAP를 최신 공정 가치나 임의 규모의 체결 가능 가격으로 간주합니다.
- 소비자 익스포저가 조작 비용을 초과하고 대체 경로, 서킷 브레이커, 일시 중지, 청산 및 복구 동작도 안전하지 않습니다.
일반적인 오해
- “TWAP는 항상 가격의 산술 평균이다.” v3는 틱을 평균하므로 상대 가격의 기하 평균을 산출합니다.
- “역방향 호가는 항상 정방향 TWAP의 역수다.” 선형 가격을 방향별로 평균하면 이 대칭성은 성립하지 않습니다.
- “관측 구간을 늘리면 가격 조작은 불가능해진다.” 짧은 왜곡에 대한 민감도를 낮추는 대신 지연이 커지고, 지속적인 통제나 약한 유동성의 영향은 남습니다.
- “카디널리티를 늘리면 이력이 즉시 늘어난다.” 향후 용량만 증가하며 관측값은 이후에 초기화되어야 합니다.
- “최신 오라클 조회가 성공하면 공정하고 체결 가능한 시장 가치가 입증된다.” 인터페이스 성공은 경제적 최신성, 깊이, 독립성 또는 소비자 익스포저의 안전성을 입증하지 않습니다.
관련 주제
출처
- Uniswap v2 Core - Uniswap (접속일: 2026-08-13)
- Oracles - Uniswap Developers (접속일: 2026-08-13)
- Uniswap v3 Core - Uniswap (접속일: 2026-08-13)
- Price Oracles - Uniswap Developers (접속일: 2026-08-13)
- Oracle.sol - Uniswap v3 Core (접속일: 2026-08-13)
- OracleLibrary.sol - Uniswap v3 Periphery (접속일: 2026-08-13)
- Uniswap v3 TWAP Oracles in Proof of Stake - Uniswap Labs (접속일: 2026-08-13)
- SC03:2026 Price Oracle Manipulation - OWASP Smart Contract Security (접속일: 2026-08-13)