본문으로 이동

TWAP 오라클

TWAP 오라클은 프로토콜별 누적 관측값에서 시간 가중 기준 가격을 도출합니다. v2 산술 가격과 v3 평균 틱은 수학, 이력, 유동성 및 조작 경계가 서로 다릅니다.

업데이트

교육 목적으로만 제공되며 투자 조언이 아닙니다. 투자에는 손실이 발생할 수 있습니다.

직접 답변

시간 가중 평균 가격 오라클은 지정된 구간의 누적 관측값에서 기준 가격을 도출합니다. 모든 구현에 적용되는 하나의 공식이 아닙니다. Uniswap v2는 풀의 각 방향에 대한 선형 한계 가격을 누적하므로 양 끝점의 차이로 산술 TWAP를 구합니다. Uniswap v3는 로그 가격 좌표인 틱을 누적하므로 산술 평균 틱은 상대 가격의 기하 평균으로 변환됩니다.

체인, 풀, 구현, 수수료 티어, 토큰 순서, 기준/호가 방향, 소수 자릿수, 끝점, 경과 시간, 채워진 이력 및 반올림 규칙을 확정해야만 결과에 의미가 있습니다. 조회 성공은 공정 가치나 실제 체결 가능한 유동성을 입증하지 않습니다. 긴 구간은 짧은 왜곡을 희석하지만 지연을 늘리며, 지속적인 조작, 집중 유동성 공백, 제안자나 시퀀서의 통제, 재구성 또는 소비자 측 추출 가능 가치가 조작 비용을 초과하는 상황을 막지 못합니다.

관측값의 최신성과 시장의 최신성은 별개입니다. 지금 계산한 평균도 의도적으로 오래된 가격 국면을 포함할 수 있습니다. 활발한 풀도 유동성이 얕거나 외부 시장과 괴리될 수 있습니다. 따라서 소비자는 이력, 유동성 및 괴리를 점검하고, 행위별 한도를 설정하며, 성능 저하나 일시 중지 시의 동작을 명시해야 합니다.

작동 방식

  1. 체인과 블록, 팩토리와 풀 주소, 프로토콜 버전과 수수료 티어, token0token1, 소수 자릿수, 기준/호가 방향, 소비자 행위, 관측 구간 및 위험 노출 가치를 확정합니다.
  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는 순환 버퍼에 관측값을 저장하고 관측값 사이를 보간하거나 현재 시점의 반사실 누적값을 구성할 수 있습니다. 이렇게 구성한 끝점은 프로토콜 계산상 유효하지만, 해당 시점에 거래가 체결되었다는 증거는 아닙니다. 용량을 늘리면 향후 관측 공간만 생기며 과거 이력은 소급하여 채워지지 않습니다.

계산 예시

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

관련 주제

출처

탐색

위키 검색...