Crypto Currency

유니스왑 V1/V2 All-In-One: AMM(x*y=k), 비영구적 손실, 슬리피지, TWAP

유니스왑의 기본

유니스왑에서 사람들은 두 개의 토큰을 같은 가치비율로 묶어 LP token 이라는 unique한 토큰을 구매합니다. 즉, LP token을 구매하는 행위입니다. 그리고 나서 이 LP token을 스테이킹=deposit 하여 유니스왑 DEX에 묶어둡니다.

 

이렇게 LP token을 deposit한 사람들(이하 농부들)은 total LP 에 일부분의 지분을 보유하게 됩니다. 그리고 total LP의 가치의 따라서 나의 자산도 변화합니다.

 

예를 들어, ETH와 USDT를 5:5 가치비율로 가지고 있는 사람은, 그 가격 변화에 100% 영향을 받습니다. 하지만 그 두개를 묶어 LP token을 구매한 사람은 그 가격 변화에 100%로 영향받지 않습니다.

 

 

LP에 1%의 지분을 가지고 있는 사람이 있다고 해 봅시다. ETH의 가격이 $120으로 상승합니다. 그러면 1%의 지분을 가지고 있는 사람의 자산은 $19.1가 됩니다. 이것이 유니스왑에서 말하는 비영구적 손실(Impermenant Loss)입니다. 왜 비영구적이냐 하면, 아직 LP token을 팔지 않았으니까요. 만약 LP token을 다시 팔고, 0.91ETH와 109.54USDT를 받는다면 이 손실은 영구적이 되는 것입니다. 즉, 비영구적 손실이라는 말은 그냥 미실현 손익입니다.

 

  1. 외부에서의 가격 변화 -> 재정거래자들의 스왑 -> LP에 pair된 토큰간 비율 변화, LP token의 가치 변화
  2. 수요와 공급에 따른 스왑 -> 내부에서의 가격 변화 -> LP에 pair된 토큰간 비율 변화, LP token의 가치 변화

방금은 1번에 대한 이야기를 하였는데, 유니스왑 시스템을 설명하기 위해서는 2번의 방식이 적절합니다. 그리고 가장 먼저 알아야 할 것이 유니스왑의 AMM, x * y = k 입니다.

 

유니스왑의 AMM

유니스왑의 자동화된 마켓 메이커, AMM은 다음의 공식에 따라 교환비율(토큰의 상대적 가격)을 결정합니다.

  • x * y = k (x, y는 LP에서 보관(reserve)되어 있는 토큰의 수량, k는 상수)

ETH-CAKE LP에 ETH가 10개, CAKE가 500개 있다고 해 봅시다. 그리고 어떤 사람이 ETH 1개를 판매하고 CAKE를 얻는 Swap을 했다고 해 봅시다. 그럼 LP pair(이하 LP)에는 ETH가 한 개 늘어날 것이고, CAKE는 줄어들 것입니다. 

 

스왑 후 풀은 다음과 같이 변화합니다.

 

 

x * y = k 공식에 대입해 보면, 기존의 k(constant product k) 값이 5,000 이었으므로 ⑥ × ⑦ = 5,000 으로 유지되고 있는 것을 볼 수 있습니다.

 

큰 규모의 거래일수록, 유동성이 낮을 수록 높은 슬리피지

그리고 ETH를 팔면서 얻은, ⑦ETH 한개당 얻은 CAKE가 줄어드는 것을 볼 수 있습니다. 바로 이것이 슬리피지(Slippage)입니다. 유니스왑에서는 'Price Impact'라고 하고, 엄밀한 정의로는 다를 수 있지만 실질적으로 같은 개념입니다.

슬리피지는 AMM의 특성에 따라 그 크기가 달라지기도 합니다. 유니스왑의 AMM은 CPMM(Contant Product Market Maker)인데, AMM의 세 종류는 다음과 같습니다. 이 링크와 이 링크에서도 설명하고 있습니다.

 

CPMM(Constant Product Market Maker)

1. CPMM(Contant Product Market Maker)

x*y=k 의 수식으로 토큰 가격비율을 결정. 상대적으로 높은 슬리피지. 악의적인 공격자가 있어도 한 토큰이 완전히 붕괴되지는(0이 되지는) 않음.

 

CSMM(Constant Sum Market Maker)

2. CSMM(Constant Sum Market Maker)

x+y=k 의 수식으로 토큰 가격비율을 결정. 제로 슬리피지에 강점. 그러나 악의적인 공격자에 의해 한 토큰이 완전히 0이 될 수 있음.

 

3. CMMM(Constant Mean Market Maker)

3. CMMM(Constant Mean Market Maker)

(xyz)^(⅓)=k 의 수식으로 토큰 가격비율을 결정. 즉, 세 개의 토큰을 사용하고 CPMM과 CSMM을 섞어놓은 것.

 

유니스왑은 아시다시피 1번의 CPMM 방식입니다. 이 CPMM은 CSMM에 비해서 슬리피지가 클 수밖에 없는데, 다음의 그래프(x*y=10, x+y=10)를 보면 

 

x*y=10, x+y=10

 

A 토큰이 2개에서 4개로 늘어난다고 했을때, 2*A에 대한 비용CPMM의 경우 5개의 B토큰, CSMM의 경우 4개의 B토큰인 것을 볼 수 있습니다. 즉, 2개의 A토큰을 사기 위한 비용은 CSMM보다 CPMM의 경우에 더 큽니다.

 

이 슬리피지는 유동성과도 관련이 있는데, 만약 k가 10이 아니고 100이라면, 

 

x*y=100, x+y=100

 

A토큰을 2개 사고 파는 것 쯤에는 슬리피지가 거의 발생하지 않을 것입니다. 즉, 유동성에 따라서도 슬리피지가 달라집니다. ETH_LP와 CAKE_LP가 크면 클수록 슬리피지는 줄어들게 될 것입니다.

 

큰 거래일수록 높은 슬리피지 (출처:Crypto Testers)

 

즉, 크면 큰 거래일수록, 그리고 CSMM 보다는 CPMM의 방식에서 슬리피지가 더 커지는 것을 볼 수 있습니다.

 

k값의 변동

방금 k가 10인 경우와 100인 경우에서 볼 수 있었듯, 유동성이 커지는 등의 요인으로 인해서 k값이 증가할 수 있습니다. 이는 아까 말한 k=constant product=상수라는 말과 대치되는 말인데요, x*y=k 모델은 거래(contract)가 발생할 때 상대 가격 결정에 대한 모델이지, 근본적인 메커니즘에 대한 이야기가 아니기 때문입니다. 농부들이 증가하면 언제든 k가 증가할 수 있고, 농부들이 감소하거나 토큰 유통량 증가와 같은 사건이 있으면 k는 감소할 수 있습니다.

 

아무튼, 이 경우(Swap)에는 지불한 수수료가 LP로 다시 들어가기 때문입니다.

 

 

위 표에서 볼 수 있듯이, ETH를 판매하여 지불한 수수료(판매한 ETH*0.3%)는 다시 LP로 들어갑니다. 그러면서 CAKE_LP의 수는 유지됩니다.

 

즉 다음의 순서와 같습니다. 수수료를 제외한 ETH/CAKE로 교환비율이 결정되고 k가 일정하게 계산됩니다. 그 거래(Swap 등)가 끝나고 나서 수수료가 LP에 들어갑니다. 그러면서 k가 변화합니다.

 

즉, 수수료는 LP token을 deposit한 농부들에게 직접적으로 지급되는 것이 아니라, k값을 변화시킴으로써 간접적으로 지급된다는 것입니다.

 

업비트와 바이낸스와 같은 거래소에서 거래량이 매우 부족한 종목들을 보면 호가창이 비어있거나 그 수량이 매우 적은 경우를 보실 수 있으실 겁니다. 거래소들은 그러한 유동성을 위해서 Market Taker보다 Maker에게 더 적은 수수료를 제공합니다. 아무튼 슬리피지는 이렇게 호가창이 비어 유동성이 부족한 경우에 발생합니다.

 

유니스왑에서도 마찬가지입니다. 즉, ETH와 CAKE를 5:5 가치비율로 구매해서 LP token을 deposit 하는 것은 호가를 제공하는 행위입니다. 사람들이 더 많이 마켓메이킹을 많이 할 수록 = 호가를 제공할 수록 = 유동성이 높아질 수록, 슬리피지는 낮아집니다.

 

이러한 스왑 외에도 LP token을 deposit하는 규모가 늘어날 수록, 토큰의 발행과 소각 등의 이유로 결론적인 k값은 변화합니다. 이 링크에 이 부분에 관해서 설명되어 있으니 참고하시길 바랍니다.

 

유니스왑 V2에서의 가격결정

유니스왑 V2에서는 V1에서의 x*y=k보다 더욱 보완된 형태를 사용합니다. 

 

Uniswap V2 TWAP

 

유니스왑 V2에서는 LP token의 가격을 블록이 만들어지는 시작점에서 정합니다. 그리고 그 가격은 그 전 블록들에 의해 결정됩니다. 그리고, 그 전 블록들의 가격들에 그 블록들이 만들어지고서부터 얼마나 시간이 흘렀는지를 반영(가중)합니다. 이것이 TWAP 입니다.

 

그러면 이 가격을 결정하는 것에 얼마나 전까지의 블록을 반영할 것인가를 물을 수 있는데, 유니스왑에서 거래하려고 하는 사람은 이 기간을 정할 수 있습니다. 기간을 짧게 정한다면 가격은 최신 데이터일 것이고, 기간을 길게 정한다면 상대적으로 오래된 데이터일 것입니다.

 

그렇다면 왜 최신 데이터를 사용하지 않는지를 물을 수 있는데, 유니스왑 V2에서 이런 시스템을 도입한 이유와 같습니다. 최신 데이터는 공격자(attacker)에 의해 쉽게 조작될 수 있고, 누적된 데이터는 조작되기 힘들 것이기 때문입니다. 즉 시세 조작을 막기 위해서 누적 시간의 평균 가격 개념을 도입한 것입니다.

 

가격 결정 공식

맨 처음에 보았던 표를 가져와 보겠습니다.

 

 

이 a, b, c는 어떻게 구할 수 있을까요? 유니스왑V2 docs에는 다음과 같이 나와 있습니다.

 

  • ETH 제공량(ETH_LP) * USDT 제공량(USDT_LP) = constant product k (= 상수)
  • ETH_price = USDT_LP / ETH_LP
  • ETH_LP = √(k / ETH_price)
  • USDT_LP = √(k * ETH_price)

부대비용은 생각하지 않고 간단히 구해보겠습니다.

  • a = ETH_LP = √(k / ETH_price) = √(1,000,000 / 120) = 91.28
  • b = USDT_LP = √(k * ETH_price) = √(1,000,000 * 120) = 10954.45
  • c = b * 2 = 21908.5

출처 및 참고


 

무료 계정 만들기 | Binance

지금 바이낸스에서 계정을 등록하십시오

accounts.binance.com

 

Join me on TradingView, this place is awesome.

If you eventually grab a paid plan, we each get $30 as a bonus!

kr.tradingview.com