CFMM

이한길·2023년 9월 14일
0

디파이

목록 보기
5/6

1. CFMM

AMM(Automated Market Maker): 오더북 없이 자동으로 시장가격을 조성하여 자산을 거래할 수 있도록 해주는 알고리즘을 AMM(자동 시장조성자)이라고 한다.

CFMM(Constant Function Market Maker): 두 자산 X,YX,Y를 거래할 때, 자산들의 수량 x,yR0x,y∈\R_{≥0}에 대한 2변수 함수로 환율을 결정해주는 AMM을 CFMM(상수함수 시장조성자)이라고 한다.

  • 풀에 보유한 자산의 양이 풀에 있는 다른 자산의 양의 잘 정의된 함수에 의해 완전히 설명된다는 특성을 가진 마켓메이커이다. 그 결과 자산과 유동성 모두 상대 가격이 주어지면 알려져 있고 고정된다.

2. 구성요소

시장 참여자

거래자(Trader): DEX에서 두 자산 X,YX,Y를 거래하려는 참여자를 거래자 또는 유동성 수요자(Liquidity Taker; LT)라고 한다.

  • 서비스 이용의 대가로 DEX에 수수료를 지불한다.

유동성 공급자(Liquidity Provider; LP): DEX에서 거래자들이 수월한 거래를 할 수 있도록 유동성을 공급해주는 참여자를 유동성 공급자라고 한다.

  • 서비스 기여의 대가로 DEX에게 보상을 받는다.

DEX 상태

DEX는 유동성을 모아놓은 풀과 유동성 공급자들의 공급량 비율을 상태로 관리한다.

유동성 풀(Liquidity Pool): 유동성 공급자들이 예치한 두 자산 X,YX,Y의 예치금(Reserve) x,yR0+x,y∈\R_{≥0}+을 모아놓은 곳을 유동성 풀이라고 한다.

(x,y)R02(x,y)∈\R_{≥0}^2

LP 지분 가중치(Liquidity Provider Share Weights): 유동성 공급자들에게 기여에 비례한 보상을 주기 위해, 해당 풀에 자산을 예치한 m명의 유동성 공급자들에 대하여, 전체 예치금 대비 개인 예치금 비율에 따라 가중치를 부여한 테이블을 LP 지분 가중치라고 한다.

w=(w1,w2,...,wm)R0m\mathbf{w}=(w_1,w_2,...,w_m)∈\R_{≥0}^m

  • wi0w_i≥0.
  • i=1mwi=1\displaystyle\sum_{i=1}^{m}w_i=1.
  • 예치금의 변동에 따라 가중치 변동 또는 LP명단 추가 및 삭제가 이루어질 수 있다.

제안

거래 제안(Proposed Trade): 거래자가 두 자산 X,YX,Y를 거래하기 위해 DEX에 제시한, 지불하려는 자산의 수량과 수령하려는 자산의 수량의 쌍을 거래 제안이라고 한다.

{(Δx,Δy) if XY(Δx,Δy) if YX\left\{\begin{matrix} (Δ_x,-Δ_y) & \text{ if } X\to Y\\ (-Δ_x,Δ_y) & \text{ if } Y\to X \end{matrix}\right.

  • 둘 중 한 자산을 지불하면, 다른 한 자산은 수령해야한다.

예치금 업데이트: 제안된 거래 실행 후 업데이트된 풀의 예치금.

{(x+,y+)=(x+Δx,yΔy) if XY(x+,y+)=(xΔx,y+Δy) if YX\left\{\begin{matrix} (x^+,y^+)=(x+Δ_x,y-Δ_y) & \text{ if } X\to Y\\ (x^+,y^+)=(x-Δ_x,y+Δ_y) & \text{ if } Y\to X \end{matrix}\right.

유동성 변경 제안(Proposed Liquidity Change): 유동성 공급자가 풀에 유동성을 공급하거나 제거하기 위해 DEX에 제시한, 공급하려는 두 자산의 수량 (Δx,Δy)(Δ_x,Δ_y) 또는 제거하려는 두 자산의 수량 (Δx,Δy)(-Δ_x,-Δ_y)의 쌍을 유동성 변경 제안이라고 한다.

{(Δx,Δy) if (X,Y)0(Δx,Δy) if 0(X,Y)\left\{\begin{matrix} (Δ_x,Δ_y) & \text{ if } (X,Y)\to 0\\ (-Δ_x,-Δ_y) & \text{ if } 0\to (X,Y) \end{matrix}\right.

거래함수

수수료 적용 계수: 수수료 비율을 제한 지불하려는 자산의 계수.

γ=(1fee rate)(0,1]γ=(1-\text{fee~rate})\in(0,1].

수수료 적용 예치금 업데이트:

{(x,y)=(x+γΔx,yΔy) if XY(x,y)=(xΔx,y+γΔy) if YX\left\{\begin{matrix} (x^*,y^*)=(x+γΔ_x,y-Δ_y) & \text{ if } X\to Y\\ (x^*,y^*)=(x-Δ_x,y+γΔ_y) & \text{ if } Y\to X \end{matrix}\right.

거래함수(Trading Function): 두 자산 X,YX,Y를 거래할 때, 자산들의 수량 x,yR0x,y∈\R_{≥0}에 대한 2변수 실함수 k:R02Rk:\R_{≥0}^2\to\R를 거래함수라고 한다.

k(x,y)=kk(x,y)=k, x,y,kR0∀x,y,k∈\R_{≥0}.

등위함수(Level Function): 거래함수 kk는 함숫값에 따라 등위곡선을 그리며, 함숫값을 k=κik=\kappa_i로 고정했을 때의 등위곡선을 지불하려는 자산의 수량에 대한 수령하려는 자산의 1변수 함수 ki:R0Rk_i:\R_{≥0}\to\R로 나타낸 것을 등위함수라고 한다.

{(x,y)R02k(x,y)=κi}{y=ki(x) if XYx=ki(y) if YX\{(x,y)∈\R_{≥0}^2\,|\,k(x,y)=\kappa_i\}\Rightarrow \begin{cases} y=k_i(x) & \text{ if } X\to Y \\ x=k_i(y) & \text{ if } Y\to X \end{cases}

3. 거래

가격

시장가: 현재 시장가는 현재 지점의 순간변화율이다.

Y/XY/X 환율: XX로 표시한 YY의 가격.
PY/X(κi)={1ki(x) if XYki(y) if YXP_{Y/X}(\kappa_i)=\begin{cases} \displaystyle-\frac{1}{k_i'(x)} & \text{ if } X\to Y \\ \\ -k_i'(y) & \text{ if } Y\to X \end{cases}

X/YX/Y 환율: YY로 표시한 XX의 가격.
PX/Y(κi)={ki(x) if XY1ki(y) if YXP_{X/Y}(\kappa_i)=\begin{cases} -k_i'(x) & \text{ if } X\to Y \\ \\ \displaystyle-\frac{1}{k_i'(y)} & \text{ if } Y\to X \end{cases}

실제가격: 거래 시 실제가격은 현재 지점과 거래 후 지점의 평균변화율이다.

Y/XY/X 환율: XX로 표시한 YY의 가격.
PˉY/X(κi)={Δxki(x+Δx)ki(x) if XYki(y+Δy)ki(y)Δy if YX\bar{P}_{Y/X}(\kappa_i)=\begin{cases} \displaystyle-\frac{Δ_x}{k_i(x+Δ_x)-k_i(x)} & \text{ if } X\to Y \\ \\ \displaystyle-\frac{k_i(y+Δ_y)-k_i(y)}{Δ_y} & \text{ if } Y\to X \end{cases}

X/YX/Y 환율: YY로 표시한 XX의 가격.
PˉX/Y(κi)={ki(x+Δx)ki(x)Δx if XYΔyki(y+Δy)ki(y) if YX\bar{P}_{X/Y}(\kappa_i)=\begin{cases} \displaystyle-\frac{k_i(x+Δ_x)-k_i(x)}{Δ_x} & \text{ if } X\to Y \\ \\ \displaystyle-\frac{Δ_y}{k_i(y+Δ_y)-k_i(y)} & \text{ if } Y\to X \end{cases}

슬리피지: 슬리피지는 시장가와 실제가격의 차이, 즉 순간변화율과 평균변화율의 차이 tanθ\tan\,\theta이다.

Y/XY/X 슬리피지: SY/X(κi)=PY/X(κi)PˉY/X(κi)S_{Y/X}(\kappa_i)=P_{Y/X}(\kappa_i)-\bar{P}_{Y/X}(\kappa_i)
X/YX/Y 슬리피지: SX/Y(κi)=PX/Y(κi)PˉX/Y(κi)S_{X/Y}(\kappa_i)=P_{X/Y}(\kappa_i)-\bar{P}_{X/Y}(\kappa_i)

  • 등위함수의 그래프의 임의의 구간이 볼록할수록 슬리피지가 커지고, 직선에 가까울수록 슬리피지가 작아진다.

거래 조건

거래 조건(Trade Condition): 거래자가 제안한 거래를 실행할 수 있는 조건은 거래 전후 kk값에 변동이 없어야 한다는 것이다.

k(x,y)=k(x,y){k(x+γΔx,yΔy)=k(x,y) if XYk(xΔx,y+γΔy)=k(x,y) if YXk(x^*,y^*)=k(x,y)\Leftrightarrow \begin{cases} k(x+γΔ_x,y-Δ_y)=k(x,y) & \text{ if } X\to Y \\ k(x-Δ_x,y+γΔ_y)=k(x,y) & \text{ if } Y\to X \end{cases}

4. 유동성 공급

유동성 변경 조건

유동성 변경 조건(Liquidity Change Condition): 현재 kk값이 κi\kappa_i이고, 유동성 공급 또는 제거 후 kk값이 κi+1\kappa_{i+1}라고 할 때, 유동성 공급자가 제안한 유동성 변경을 실행할 수 있는 조건은 변경 전후 가격에 변동이 없어야 한다는 것이다.

PX/Y(κi+1)=PX/Y(κi)PY/X(κi+1)=PY/X(κi)P_{X/Y}(\kappa_{i+1})=P_{X/Y}(\kappa_i)\Leftrightarrow P_{Y/X}(\kappa_{i+1})=P_{Y/X}(\kappa_i).

비영구적 손실

비영구적 손실(Impermanent Loss; IL): 유동성 풀에 예치된 자산의 가격 변동으로 인한 일시적 손실을 비영구적 손실이라고 한다.

유동성 풀에 두 자산 A와 B가 있다고 가정할 때, A의 가격이 상승하면 A의 수요가 늘어나 상대적으로 B의 양이 증가하고 A의 양이 감소.(CPMM 모델의 상수 곱 규칙을 유지하기 위함)
자산 A의 가격 상승으로 인해 유동성 공급자가 풀에서 자산을 인출할 경우, 가격 상승 전에 비해 A의 양이 줄어들고, B의 양은 증가.(각각의 수량이 변했지만 처음 예치 시점의 내 지분/전체 만큼의 비율로 인출해야 하기 때문에 총 가치는 달라질 수 있다)
만약 A를 단순히 보유만 했다면 얻을 수 있었던 이익에 비해, 유동성 풀에서 인출 시 얻게 되는 A의 양이 더 적기 때문에 손실이 발생.

임시 손실은 유동성을 풀에서 인출할 때까지는 "임시"적인 것으로, 가격이 다시 원래 상태로 돌아오면 손실이 회복될 수 있다.

지분

Reference
1. Guillermo Angeris, Constant Function Market Makers: Multi-asset Trades via Convex Optimization, 2022

profile
블록체인, 통계학, 수학, 인공지능 공부하고 있습니다

0개의 댓글