1. CFMM
AMM(Automated Market Maker): 오더북 없이 자동으로 시장가격을 조성하여 자산을 거래할 수 있도록 해주는 알고리즘을 AMM(자동 시장조성자)이라고 한다.
CFMM(Constant Function Market Maker): 두 자산 X,Y를 거래할 때, 자산들의 수량 x,y∈R≥0에 대한 2변수 함수로 환율을 결정해주는 AMM을 CFMM(상수함수 시장조성자)이라고 한다.
- 풀에 보유한 자산의 양이 풀에 있는 다른 자산의 양의 잘 정의된 함수에 의해 완전히 설명된다는 특성을 가진 마켓메이커이다. 그 결과 자산과 유동성 모두 상대 가격이 주어지면 알려져 있고 고정된다.
2. 구성요소
시장 참여자
거래자(Trader): DEX에서 두 자산 X,Y를 거래하려는 참여자를 거래자 또는 유동성 수요자(Liquidity Taker; LT)라고 한다.
- 서비스 이용의 대가로 DEX에 수수료를 지불한다.
유동성 공급자(Liquidity Provider; LP): DEX에서 거래자들이 수월한 거래를 할 수 있도록 유동성을 공급해주는 참여자를 유동성 공급자라고 한다.
- 서비스 기여의 대가로 DEX에게 보상을 받는다.
DEX 상태
DEX는 유동성을 모아놓은 풀과 유동성 공급자들의 공급량 비율을 상태로 관리한다.
유동성 풀(Liquidity Pool): 유동성 공급자들이 예치한 두 자산 X,Y의 예치금(Reserve) x,y∈R≥0+을 모아놓은 곳을 유동성 풀이라고 한다.
(x,y)∈R≥02
LP 지분 가중치(Liquidity Provider Share Weights): 유동성 공급자들에게 기여에 비례한 보상을 주기 위해, 해당 풀에 자산을 예치한 m명의 유동성 공급자들에 대하여, 전체 예치금 대비 개인 예치금 비율에 따라 가중치를 부여한 테이블을 LP 지분 가중치라고 한다.
w=(w1,w2,...,wm)∈R≥0m
- wi≥0.
- i=1∑mwi=1.
- 예치금의 변동에 따라 가중치 변동 또는 LP명단 추가 및 삭제가 이루어질 수 있다.
제안
거래 제안(Proposed Trade): 거래자가 두 자산 X,Y를 거래하기 위해 DEX에 제시한, 지불하려는 자산의 수량과 수령하려는 자산의 수량의 쌍을 거래 제안이라고 한다.
{(Δx,−Δy)(−Δx,Δy) if X→Y if Y→X
- 둘 중 한 자산을 지불하면, 다른 한 자산은 수령해야한다.
예치금 업데이트: 제안된 거래 실행 후 업데이트된 풀의 예치금.
{(x+,y+)=(x+Δx,y−Δy)(x+,y+)=(x−Δx,y+Δy) if X→Y if Y→X
유동성 변경 제안(Proposed Liquidity Change): 유동성 공급자가 풀에 유동성을 공급하거나 제거하기 위해 DEX에 제시한, 공급하려는 두 자산의 수량 (Δx,Δy) 또는 제거하려는 두 자산의 수량 (−Δx,−Δy)의 쌍을 유동성 변경 제안이라고 한다.
{(Δx,Δy)(−Δx,−Δy) if (X,Y)→0 if 0→(X,Y)
거래함수
수수료 적용 계수: 수수료 비율을 제한 지불하려는 자산의 계수.
γ=(1−fee rate)∈(0,1].
수수료 적용 예치금 업데이트:
{(x∗,y∗)=(x+γΔx,y−Δy)(x∗,y∗)=(x−Δx,y+γΔy) if X→Y if Y→X
거래함수(Trading Function): 두 자산 X,Y를 거래할 때, 자산들의 수량 x,y∈R≥0에 대한 2변수 실함수 k:R≥02→R를 거래함수라고 한다.
k(x,y)=k, ∀x,y,k∈R≥0.
등위함수(Level Function): 거래함수 k는 함숫값에 따라 등위곡선을 그리며, 함숫값을 k=κi로 고정했을 때의 등위곡선을 지불하려는 자산의 수량에 대한 수령하려는 자산의 1변수 함수 ki:R≥0→R로 나타낸 것을 등위함수라고 한다.
{(x,y)∈R≥02∣k(x,y)=κi}⇒{y=ki(x)x=ki(y) if X→Y if Y→X
3. 거래
가격
시장가: 현재 시장가는 현재 지점의 순간변화율이다.
Y/X 환율: X로 표시한 Y의 가격.
PY/X(κi)=⎩⎪⎪⎪⎨⎪⎪⎪⎧−ki′(x)1−ki′(y) if X→Y if Y→X
X/Y 환율: Y로 표시한 X의 가격.
PX/Y(κi)=⎩⎪⎪⎪⎨⎪⎪⎪⎧−ki′(x)−ki′(y)1 if X→Y if Y→X
실제가격: 거래 시 실제가격은 현재 지점과 거래 후 지점의 평균변화율이다.
Y/X 환율: X로 표시한 Y의 가격.
PˉY/X(κi)=⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧−ki(x+Δx)−ki(x)Δx−Δyki(y+Δy)−ki(y) if X→Y if Y→X
X/Y 환율: Y로 표시한 X의 가격.
PˉX/Y(κi)=⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧−Δxki(x+Δx)−ki(x)−ki(y+Δy)−ki(y)Δy if X→Y if Y→X
슬리피지: 슬리피지는 시장가와 실제가격의 차이, 즉 순간변화율과 평균변화율의 차이 tanθ이다.
Y/X 슬리피지: SY/X(κi)=PY/X(κi)−PˉY/X(κi)
X/Y 슬리피지: SX/Y(κi)=PX/Y(κi)−PˉX/Y(κi)
- 등위함수의 그래프의 임의의 구간이 볼록할수록 슬리피지가 커지고, 직선에 가까울수록 슬리피지가 작아진다.
거래 조건
거래 조건(Trade Condition): 거래자가 제안한 거래를 실행할 수 있는 조건은 거래 전후 k값에 변동이 없어야 한다는 것이다.
k(x∗,y∗)=k(x,y)⇔{k(x+γΔx,y−Δy)=k(x,y)k(x−Δx,y+γΔy)=k(x,y) if X→Y if Y→X
4. 유동성 공급
유동성 변경 조건
유동성 변경 조건(Liquidity Change Condition): 현재 k값이 κi이고, 유동성 공급 또는 제거 후 k값이 κi+1라고 할 때, 유동성 공급자가 제안한 유동성 변경을 실행할 수 있는 조건은 변경 전후 가격에 변동이 없어야 한다는 것이다.
PX/Y(κi+1)=PX/Y(κi)⇔PY/X(κi+1)=PY/X(κ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