본문으로 이동

TWAP 기간 선택 방법

TWAP 조회 기간은 보편적인 기본값이 아니라 조작 비용, 시장 깊이, 가격 지연, 관측 데이터, 프로토콜 위험 노출을 검증해 선택해야 합니다.

업데이트

교육 목적으로만 제공되며 투자 또는 보안 조언이 아닙니다. 잘못 설계된 가격 오라클은 부당 청산, 담보 부족 대출, 프로토콜 손실을 일으킬 수 있습니다.

직접 답변

모든 상황에 안전한 TWAP 기간은 없습니다. 해당 풀과 프로토콜에서 수익성 있는 조작을 비현실적으로 만드는 가장 짧은 기간을 선택하고 실제 가격 급변 시 지연도 허용 가능한지 확인해야 합니다. 기간이 길면 보통 공격자가 시장에 더 오래 영향을 줘야 하지만 과거 가격도 평균에 더 오래 남습니다. 얕은 유동성, 관련 가격 경로 밖의 집중 유동성, 과도한 위험 금액, 잘못된 통합을 보완하지는 못합니다.

5분, 30분, 1시간 같은 기본값 중 하나를 고르는 일이 아니라 위험 예산으로 결정해야 합니다. 소스 풀과 평균 방식, 허용할 최대 오차와 응답 지연, 추출 가능한 경제적 가치, 모델링한 공격 비용, 관측 이력, 장애 시 동작을 문서화합니다. 유동성, 인센티브, 블록 생성, 담보 한도, 시장 구조가 바뀌면 다시 평가합니다.

작동 방식

누적값 기반 오라클은 시간에 따라 가격을 기록합니다. 산술 누적값에서 t1부터 t2까지 평균은 다음과 같습니다.

TWAP(t1,t2) = (cumulativePrice(t2) - cumulativePrice(t1)) / (t2 - t1)

Uniswap v2는 각 블록 시작 가격을 누적하고 외부 사용자가 두 누적값을 저장합니다. Uniswap v3는 누적 tick 관측값을 저장하므로 평균 tick을 가격으로 바꾸면 시간 가중 기하평균이 됩니다. 평균 방식, 호가 방향, 관측 용량, 반올림, 업데이트 조건은 오라클 명세의 일부입니다. 모든 TWAP를 현물 표본의 산술평균으로 가정하면 안 됩니다.

다음 절차를 따릅니다.

  1. 사용자의 손실 함수를 정의합니다. 가격이 대출 한도, 청산, 발행, 상환, 결제를 어떻게 바꾸는지 기록하고 상승·하락 시 최대 허용 지연과 오차를 정합니다.
  2. 체결 가능한 유동성을 측정합니다. 공격자가 지나야 할 전체 가격 경로의 준비금, 수수료, 활성 범위 유동성을 모델링합니다. TVL과 최근 거래량만으로 조작 저항성을 증명할 수 없습니다.
  3. 공격자의 보상을 제한합니다. 담보·대출 한도, 청산 보너스, 기존 포지션, 다른 프로토콜과의 결합, 중단 전 이익을 포함합니다. 공격 비용은 한 사용자의 거래가 아니라 총 추출 가능 가치와 비교합니다.
  4. 가능한 공격을 모델링합니다. 단일·다중 블록 왜곡, 플래시 자금, 제안자 통제와 순서 우위, 차익거래와 백런, 혼잡, 청산 비용을 시험합니다. 강한 공격자 모델에서는 비용이 기간에 선형 비례한다는 단순 가정이 깨질 수 있다는 연구가 있습니다.
  5. 후보 기간을 전수 시험합니다. 각 기간에 과거 급변과 적대적 가격 경로를 재현하고, 수익성 있는 조작이나 허용 불가능한 낡은 가격을 만드는 후보를 제외합니다.
  6. 독립 통제를 추가합니다. 노출 한도, 독립 가격과의 편차·상식 검사, 신선도 제한, 보수적 담보율, 시험된 일시정지·대체 정책을 사용합니다. 위험한 소스를 안전하게 만들지는 않지만 전제가 무너질 때 손실을 줄입니다.

결론은 풀, 수수료 등급, 체인, 구현, 자산 쌍, 프로토콜 상태마다 다릅니다. 다른 프로토콜의 30분 기간을 복사해도 그 유동성과 손실 한도는 복사되지 않습니다.

예시

단순 산술 TWAP에서 시장 가격이 100에서 즉시 70으로 이동한 뒤 70에 유지된다고 가정합니다. 15분 뒤의 30분 이동 기간에는 두 가격이 각각 15분씩 들어갑니다.

(15 x 100 + 15 x 70) / 30 = 85

30분 후 과거 100 관측이 모두 빠져야 TWAP가 70에 도달합니다. 5분 기간은 5분 후 70에 도달하지만 공격자가 왜곡을 유지할 시간도 짧아집니다. 대출 시장에서 체결 가격이 70 부근인데 담보를 약 85로 평가하면 청산이 늦어져 부실채권이 생길 수 있습니다. 다른 용도는 느린 값을 허용할 수도 있습니다.

이 예시는 지연만 보여 주며 조작 비용을 추정하지 않습니다. 85는 기하평균 오라클에도 적용되지 않습니다. 실제 검토에서는 정확한 계산식으로 관측값, 활성 유동성, 수수료, 블록 순서, 포지션을 재현해야 합니다.

위험과 통제

  • 너무 짧은 기간: 소수의 왜곡된 블록만으로 공격이 수익화될 수 있습니다. 소스와 시장을 강화하고 노출을 줄이거나 더 분산된 기준가를 사용합니다.
  • 너무 긴 기간: 실제 급변을 크게 뒤따라 하락 시 청산을 늦추고 상승 시 담보를 과소평가합니다. 최악 지연을 측정하고 보수적인 위험 변수를 설정합니다.
  • 유동성 오측정: 표시 TVL이 비활성, 좁은 범위, 한쪽에 치우치거나 공격 경로 밖일 수 있습니다. 관련 tick과 가격의 체결 가능 깊이를 사용합니다.
  • 관측 실패: 이력 부족, 낡은 관측, 미초기화 용량, 잘못된 시간, 풀이나 호가 방향 오류는 계산을 무효화합니다. 조용히 대체하지 말고 revert하거나 문서화된 안전 상태로 전환합니다.
  • 공격자 모델 실패: 플래시 유동성, 다중 블록 제안자, 거래 순서, 교차 프로토콜 이익은 순비용을 낮춥니다. ’수수료 x 분’을 증명으로 보지 말고 스트레스 테스트합니다.
  • 거버넌스와 시장 변화: 유동성 이동, 수수료 변경, 신규 담보, 한도 확대, 업그레이드, 체인 변경 후 안전성이 달라집니다. 입력을 감시하고 재검토 기준을 둡니다.
  • 대체 경로 실패: 독립 피드도 시장 범위, 소수점, 지연, 장애 모드가 다릅니다. 중단·거부·제한·전환 조건을 명시하고 온체인에서 시험합니다.

배포 전 단위, 호가 방향, 평균 방식, 기간, 최소 이력, 소스 풀 기준, 위험 한도, 장애 동작을 공개합니다. 운영 중에는 기준가 편차와 공격 비용 모델의 경제 입력을 함께 감시합니다.

흔한 오해

  • “기간이 길수록 항상 안전하다.” 공격 시간은 늘 수 있지만 지연도 커지며 얕은 유동성이나 불완전한 모델은 해결하지 못합니다.
  • “30분 TWAP는 업계의 안전 보장이다.” 기간은 한 변수일 뿐이며 풀 깊이, 활성 유동성, 수수료, 블록 생성, 계산 방식, 위험 금액도 중요합니다.
  • “플래시 론은 TWAP에 영향을 줄 수 없다.” 거래 내 자본 제약을 없앱니다. 성공 여부는 표본 방식, 영향을 줄 수 있는 기간, 주변 로직에 달렸습니다.
  • “높은 TVL은 높은 조작 비용을 뜻한다.” 관련 가격 경로에서 체결 가능한 유동성만 모델 속 거래에 직접 저항합니다.
  • “TWAP는 현재 시장 가격이다.” 특정 시장의 과거 온체인 상태 평균이므로 의도적으로 늦고 넓은 시장을 대표하지 않을 수 있습니다.

관련 주제

출처

탐색

위키 검색...