본문 바로가기
Block Chain/DeFi Series

[DeFi Series] Uniswap 기본 개념 파헤치기 || DEX | AMM | CPMM | Liquidity | Slippage | LP Token ||

by 개발이 체질인 나그네 2022. 12. 15.
반응형

안녕하세요. 스마트컨트렉트 개발자 개발이 체질의 최원혁입니다.

DeFi Series로 소개해드릴 내용은 Uniswap 기본 개념입니다.

Uniswap은 암호화폐 시장의 대표적인 탈중앙화 거래소이며, Uniswap이 만들어낸 여러 가지 개념은 DeFi를 대표하는 개념으로 통용될 정도로 중요합니다. 

이번 게시글에선 Uniswap을 통해 DEX,AMM,CPMM,Liquidity,Slippage에 대한 개념을 배워 보겠습니다.

 


 

What is Dex Uniswap ?

유니스왑은 이더리움 네트워크를 대표하는 DEX입니다. DEX란 탈중앙화 거래소(Decentralized Exchange)의 준말로 암호화폐를 거래할 수 있는 DeFi 플랫폼입니다. 암호화폐 거래소하면 대표적으로 업비트,빗썸, 바이낸스 등에서 거래를 경험해보셨을 겁니다.

하지만 이러한 거래소는 중앙화 거래소(Centralized Exchange)의 개념입니다. 즉, 블록체인 상에서 스마트컨트렉트에 의해 작동하는 시스템이 아닌, 거래소가 정한  프로세스와 인터페이스에 의해 작동하는 시스템입니다.

 

WEB3는 블록체인의 탈중앙화 가치관을 가진 탈중앙화 거래소를 만들기 위해 끊임없이 노력해왔습니다. 그 과정에서 여러 Dapp이 만들어지고, 없어지기를 반복했습니다. 혼란스러운 상황 속에서 혁신적인 알고리즘으로 Uniswap이 등장하며 탈중앙화 거래소를 대표하는 DEX 플랫폼이 되었습니다. 기존의 거래소가 적용했던 오더북 알고리즘을 벗어나, 자동화 마켓메이커(Automated Market Maker : AMM)라는 새로운 알고리즘을 통해 사용자들의 거래를 자동으로 채결하는 프로세스를 만들었습니다.

 

 


What is AMM & CPMM

기존의 거래소는 암호화폐를 사는 사람(매수자)과 파는 사람(매도자)을 매칭 시켜주는 오더북(Order Book) 알고리즘을 고집했습니다. 오더북은 사용자들의 공급과 수요에 의해 자연스럽게 가격이 형성하여 거래소는 거래 매칭 수수료를 받아가는 구조입니다. 때문에 거래소가 가지는 위험부담이 적고 굳이 노력하지 않아도 거래의 장이 형성되기에, 기존의 거래소는 오더북 알고리즘을 선호했습니다. 하지만 오더북은 거래소의 매칭으로 거래가 성사되기에, 사용자와 사용자가 직접 거래하는 구조는 아닙니다. 즉, 중앙화 된 거래소를 뜻합니다. 

 

유니스왑은 기존의 거래소와 달리 AMM 기반의 탈중앙화 거래소를 만들었습니다. AMM이란 자동화 마켓메이커(Automated Market Maker)로, 매수자와 매도자 간의 거래를 스마트컨트렉트를 활용하여 탈중앙화된 방식으로 자동화한 것을 의미합니다. AMM은 거래되는 암호화폐의 가격을 결정하는 알고리즘이며, 유니스왑은 AMM 모델 중 CPMM(Constant Product Market Maker)이라는 모델 알고리즘을 Solidity로 구현하여 스마트컨트렉트를 만들었습니다. 

CPMM은 말 그래도 어떠한 값(Product)이 항상 고정값을 유지하는(Constant) 알고리즘입니다.

 

유니스왑은 두 가지의 토큰을 묶어서 거래의 장을 만듭니다.X 토큰과 Y 토큰을 페어로 만들어, X 토큰을 Y토큰으로 거래하거나, Y 토큰을 X 토큰으로 거래할 수 있습니다. 이때 거래를 하는 사람을 DEX에서 매수자 대신 트레이더라고 합니다.

이때 X/Y 페어를 유동성 풀(Liquidity Pool)이라 하며, DEX는 매도자 대신 유동성 풀을 제공하는 유동성 공급자가 있습니다.

CPMM 공식

CPMM을 구현한 공식은 X*Y = K(상수)가 전부입니다.

  • X : X/Y 유동성 풀에 제공된 X 토큰의 총 공급량
  • Y : X/Y 유동성 풀에 제공된 Y 토큰의 총 공급량
  • K : X/Y 유동성 풀의 계약 유동성(Contracted liquidity)

CPMM의 가장 큰 특징은 계약 유동성 K의 값이 항상 일정하게 유지되는 상수입니다.

  • dx : 트레이더가 지불하는 X 토큰의 양
  • dy : 트레이더가 거래될 Y 토큰의 양

X를 Y로 거래하기 전

트레이더가 X 토큰을 Y 토큰으로 거래하기 전, 계약 유동성(K)은 X*Y=K 입니다.

 

X를 Y로 거래한 후

하지만 트레이더가 X 토큰을 Y 토큰으로 거래를 하고 난 후, 계약 유동성은 (X + dx)(Y - dy) = K가 됩니다.

 

 


What is Liquidity

 

앞서 설명드렸던 것처럼 X 토큰과 Y 토큰을 페어로 묶은 거래의 장을 X/Y 유동성 풀(Liquidity Pool)이라고 합니다.

중앙화 된 거래소는 매수자와 매도자가 있고, 매도자가 자신의 토큰 가격을 정해 판매를 하면, 매수자가 구매하는 거래 구조였습니다.

하지만 유니스왑의 AMM은 매수자와 매도자 개념이 없습니다. 유동성 풀을 형성하는 유동성 제공자(Liquidity Provider)와 유동성 풀에서 토큰을 거래하는 트레이더(Trader)가 있습니다. 

유동성 제공자는 유동성 풀을 형성하기 위해 페어로 묶는 두 토큰 모두를 제공해야 합니다. 이 부분이 기존의 거래소와 유니스왑의 AMM의 익숙하지 않은 차이점입니다.

 

예를 들어 어떤 유동성 제공자가 Uniswap에 본인의 MTK 토큰과 USDT를 페어로 MTK/USDT 유동성 풀을 형성하려고 합니다.

*DEX에 본인의 새로운 토큰으로 유동성 풀을 최초로 생성하는걸 ICO에서 상장시키는 것과 같습니다.

이때 MTK는 최초의 유동성이기에, 아직 가격이 형성되어 있지 않습니다. 때문에 유동성 제공자의 페어 개수의 비율을 통해 가격이 형성됩니다.

 

MTK/USDT 유동성 풀 상장 정보 :

  • MTK/USDT 유동성 풀의 MTK의 총 공급량 : 1000 개
  • MTK/USDT 유동성 풀의 USDT의 총 공급량 : 10 개
  • MTK/USDT 유동성 풀의 계약 유동성(K) : 1000 * 10 = 10000
  • MTK/USDT 유동성 풀 비율 및 최초 가격 형성
    • MTK : USDT = 1000 : 10
    • 1 MTK = 0.01 USDT 
    • 1 USDT = 100 MTK

이때 한 트레이더가 1 USDT로 MTK를 구매하려고 Uniswap의 AMM 스마트컨트렉트에 트랜잭션을 보냅니다.

트레이더는 상장 정보를 통해 형성된 가격을 보고,  100 MTK가 자신의 지갑으로 들어왔을 거라 생각합니다. 하지만 결과는 91 MTK와 체결되었습니다. 

이는 CPMM 공식의 특징인 계약 유동성 K의 값이 항상 일정하게 유지되는 상수이기 때문입니다.

 

현재 MTK/USDT 유동성 풀의 계약 유동성(K)은 1000 * 10 = 10000입니다.

  • dx : 트레이더가 지불하는 USDT 토큰의 양
  • dy : 트레이더가 받게 될 MTK 토큰의 양

X를 Y로 거래한 후

거래 시, 변동되는 가격은 위 공식으로 재구성됩니다.

CPMM 거래 공식

트레이더는 1 USDT로 MTK를 거래하려 했기에, 예상과 다르게 공식에 대입한 결과 트레이더가 받게 될 MTK인 dy는 91개가 됩니다.

거래 과정을 예시로 우리는 해당 거래에  9개(100 - 91)의 슬리피지(Slippage)가 발생했다고 할 수 있습니다. 

 


What is Slippage

위 예시처럼 유동성 풀의 가격은 유니스왑의 CPMM에 따라 형성되기에, 지불하는 토큰의 양에 따라 거래량이 달라질 수 있습니다.

예상했던 수치와 실제로 체결된 거래의 수치의 차이를 슬리피지(Slippage)라고 합니다. 

슬리피지의 양이 너무 많아지면, 트레이더의 손실되는 금액 또한 많아집니다. 때문에 슬리피지를 줄이기 위해, 유동성 제공자는 유동성의 규모를 크게 형성해야 합니다.

 

MTK/USDT 유동성 풀 상장 정보 :

  • MTK/USDT 유동성 풀의 MTK의 총 공급량 : 10000000 개
  • MTK/USDT 유동성 풀의 USDT의 총 공급량 : 100000 개
  • MTK/USDT 유동성 풀의 계약 유동성(K) : 10000000 * 100000 = 1000000000000
  • MTK/USDT 유동성 풀 비율 및 최초 가격 형성
    • MTK : USDT = 10000000 : 100000
    • 1 MTK = 0.01 USDT 
    • 1 USDT = 100 MTK

유동성 제공자가 위와 같은 상장 정보로 MTK/USDT 유동성 풀을 형성했다면,

트레이더가 1 USDT를 거래한 후, 받게 되는 MTK의 개수는 99.9개가 됩니다.

91 < 99.9

그 전과 비교했을 때, 슬리피지가 줄어든 걸 확인할 수 있습니다.

이 처럼 유동성의 규모가 너무 작은 풀에서 거래를 하게 되면 높은 슬리피지를 통해 손해를 많이 볼 수 있으니 투자할 때, 항상 조심해야 합니다.

 

Uniswap Setting

DEX는 너무 큰 슬리피지 발생을 방지하기 위해 "슬리피지 허용 오차"를 설정할 수 있습니다. 만약 현재 형성된 가격으로 토큰을 거래할 때, 예상되는 토큰 거래량이 설정한 슬리피지 퍼센트의 범위를 벗어나 거래가 체결하게 되면, 스마트컨트렉트의 유효성 검사를 통해 트랜잭션이 Revert 될 수 있습니다.

 

 


What is LP Token

Uniswap interface

시장에서 상인들은 물건을 내놓고, 시민들은 정해진 가격을 지불하여 물건을 구매합니다. 시장의 유동성을 제공하는 건 상인이며, 트레이더는 고객입니다. 유니스왑은 여기서 시장의 역할을 합니다. 사용자와 사용자가 중앙화 된 중계인 없이 거래할 수 있는 인터페이스를 지원하는 것이 유니스왑을 역할입니다. 유니스왑의 AMM 구조는 유동성 제공자가 없으면 서비스가 운영되지 않습니다. 그래서 유니스왑에 유동성 풀을 제공하는 사람에게는 거래 시 발생하는 금액의 일부 수수료를 보상으로 받을 수 있는 시스템이 존재합니다.

 

기존의 거래소는 거래 수수료를 거래소가 가져갔지만, DEX는 중계인이 없기에, 거래 수수료 또한 사용자가 가져가는 구조입니다.

이때 유동성 제공자는 공급한 유동성의 양에 비례하여 LP 토큰을 지급받게 됩니다.

 

MTK/USDT 유동성 풀을 예시로 트레이더가 USDT로 MTK를 구매하게 되면, 유동성 풀 제공자는 트레이더가 가져가는 MTK 토큰의 일부를 수수료로 받게 됩니다. 이때 수수료로 받는 MTK 토큰을 LP Token이라고 합니다.

 

수수료는 위 사진처럼 유동성 풀을 형성할 때, 직접 설정할 수 있습니다. 

> Uniswap 수수료 권장 사항

각 수수료에 대해선 장단점이 있고, 스테이블 코인 또는 네이티브 토큰에 따라 적합한 수수료가 추천되고 있습니다. 위 링크를 통해 유니스왑에서 권장하는 수수료에 대해 확인할 수 있습니다.

 

 


지금까지 Uniswap을 통해 DEX와 DeFi에서 자주 등장하는 단어를 알아봤습니다.

감사합니다.

반응형

댓글