안녕하세요. 스마트컨트렉트 개발자 개발이 체질의 최원혁입니다.
이번 게시글에서 소개해드릴 DeFi Series는 Time Weighted Average Price(TWAP) 알고리즘입니다.
TWAP란 풀어서 'Time Weighted Average Price' 이며 직역하면 '시간가중평균가격'입니다. 시시각각 변하는 가격을 주기적으로 기록하여 평균을 계산하는 공식으로, 주로 디지털 거래소 또는 탈중앙화 거래소(DEX)에서 디지털 자산의 가격을 조회할 때 사용됩니다.
Example
암호화폐 거래소에서 MTK코인의 가격을 1초마다 기록하고 있습니다. 위 그래프를 설명드리자면, time(0~6)일 때 MTK의 가격은 price로 기록되고 있습니다. 여기서 TWAP란 time동안의 평균 price을 말합니다.
위 그래프를 TWAP로 가격의 평균을 내면 MTK의 6초 동안 평균 가격은 116.666.... 이 나옵니다. 아주 간단한 공식이지만, 개발자는 자동으로 돌아가는 알고리즘을 코딩으로 구현해야 합니다.
Algorithm
현재 T0시간부터 Tn시간까지 코인의 가격을 기록하는 그래프가 있습니다. TWAP란 time동안의 평균 price입니다.
위와 같은 공식으로 T0 ~ Tn까지 기록된 모든 가격을 더한 후, 총시간을 나눠주면 평균 가격이 나타나게 됩니다.
순차적인 범위 안에서 규칙적으로 더해지기에, 이를 수열의 합(시그마)으로 바꿔 표현할 수 있습니다.
추가로, 만약 TWAP의 시간(time)이 처음지점(T0)부터가 아닌 중간지점(Tk)부터의 TWAP를 구해야 할 경우, 공식은 어떻게 바뀌는지 알아보겠습니다.
처음 시작점(T0)을 중간 지점(Tk)으로 바꿔주면, 공식은 위와 같이 변합니다. 하지만 수열의 합(시그마)의 일반항(i=k)는 두 가지 변수를 가지기에, 일반항 i를 정수로 바꿔줘야 계산할 수 있습니다. 새로운 공식으로 재정의 해보겠습니다.
시간 Tk~T0까지의 TWAP는 (전체시간 Tn~T0의 가격 총합(cumulative) - Tk~T0의 가격 총합(cumulative))/ Tk ~ Tn입니다.
즉, 중간지점 Tk부터 현재시점 Tn까지의 TWAP는 위와 같이 최종적으로 정의할 수 있습니다.
Uniswap V2 TWAP
실제로 위와 같은 TWAP 공식은 Uniswap V2에서 실제로 Solidity로 구현했던 알고리즘으로, 실시간 디지털 자산의 가격을 조회하는 Price Oracle Contract를 구현하기 위해 사용됐습니다.
하지만 Uniswap V3로 업데이트하면서, 가스비 측면을 고려하여 자산의 가격이 아닌 Tick을 저장하는 방식으로 바뀌었습니다.
❓Uniswap V3의 TWAP는 Uniswap V3 Price Oracle에서 자세히 다뤄보겠습니다.
지금까지 디지털 자산 거래소에서 자주 사용되는 Time Weighted Average Price(TWAP) 알고리즘에 대해 알아봤습니다.
감사합니다.
댓글