Curve finance의 StableSwap

Jungwoo Pyo
BerryFi
Published in
13 min readFeb 28, 2022

Curve는 2022년 2월 현재 이더리움 메인넷에서 TVL 약 $15b를 차지하고 있는 디파이 프로토콜이다. 본 글에서는 Curve finance에서 제시한 StableSwap에 대한 내용을 소개한다. StableSwap은 스테이블코인들로 이루어진 LP pool에서의 price slippage를 최소로 줄이는 알고리즘이다. StableSwap의 식에 대한 수학적인 설명과, 간단한 예제를 통한 시뮬레이션을 통해 StableSwap의 원리에 대해 자세히 설명한다.

Author: Jungwoo Pyo

Audited By: 태헌이, 이동헌

AMM(Automated Market Maker)은 DEX(Decentralized Exchange)에서 사용하는 화폐 교환 프로토콜이다. LP pool(Liquidity Provider pool, 줄여서 LP로 통칭)에 교환을 하기 위한 두 자산을 예치하면, LP에서 정한 가격 결정 알고리즘에 의해 두 자산간의 교환이 가능하다.

유니스왑에서 처음 constant-product invariant를 적용한 DEX를 출시하였다. constant-product invariant는 단순히 공급된 두 자산의 양의 곱이 항상 일정해야 한다는 가격 결정 알고리즘이다. 이는 간단하면서도 매우 직관적이라, 현재 대부분의 DEX가 사용하는 가격 결정 알고리즘이 되었다.

constant-product based AMM의 한계

DEX LP를 통한 자산 간의 스왑은 중앙화된 거래소의 시장가를 활용하는 오라클을 사용하지 않고 실제 시장가와 관계 없이 거래하는 LP의 화폐 비율만을 고려하여 거래된다. 기존의 constant-product invariant를 사용하는 AMM에서 DEX LP를 구성하는 자산의 가치가 변동성이 있는 경우에는 별 문제가 되지 않는다.

하지만 가치의 변동성이 적어야 하는 스테이블코인 간의 거래에서 이러한 문제는 큰 price slippage를 야기하게 된다. 대부분의 DEX에서 constant-product invariant를 이용하기 때문에 발생하는 문제이다.

Uniswap이나 Bancor, Kyber network와 같은 대부분의 DeFi market에서는 LP를 통한 스왑 시 constant-product invariant를 기준으로 사용하게 된다. constant-product invariant는 스왑 이전과 스왑 후 해당 pool을 구성하는 두 코인의 수의 곱이 일정해야 한다는 가격 결정 방식이다.

constant-product invariant

constant-product invariant를 사용하는 것은 대부분의 가치가 변하는 자산에게는 적합한 방법일 수 있으나, 가치의 변동을 최소화해야 하는 스테이블코인에서는 적절하지 않다. LP에 막대한 유동성이 공급되어서 스왑을 수행해도 pool의 비율을 크게 변동시키지 않는 경우에는 상관없지만, 그렇지 않은 경우는 큰 price slippage가 발생하게 되기 때문이다.

Curve Protocol에서의 StableSwap

AMM-based market에서 스테이블코인의 용처는 다양해지고, 점점 사용이 증가하는 추세이다. 그러나 스테이블코인들을 다른 스테이블코인으로 변환하는 과정에서 가격 안정성과 유동성 측면에서 문제가 있어왔다. 디파이 프로토콜을 활용하는 사용자 입장에서는 스테이블코인의 가치 차이가 클수록 lending과 같은 기능을 사용하거나 다양한 종류의 디파이를 사용하는데 제약이 발생한다. 예를 들어, 사용자가 보유 중인 DAI를 예치하고 이를 담보로 USDC를 빌려 추가적인 수익 창출 활동을 하려고 한다. 해당 시점에서 DAI와 USDC의 가격 차이가 크게 발생한다면, 사용자는 DAI로 USDC를 스왑하는것을 부담스럽게 생각하게 되고 다양한 프로토콜의 사용이 제한될 것이다.

AMM 상에서 스테이블코인 간의 스왑 슬리피지를 최소화할 필요성이 대두되었고, Curve는 외부 오라클을 사용하지 않고 스테이블코인 간의 스왑을 용이하게 하는 StableSwap이라는 방식을 제안했다.

스테이블코인 간 스왑시 조금의 손실도 발생하지 않는 이상적인 방식은 무엇일까? 바로 constant-sum invariant(x+y=const)를 적용하는 것이다. 이것은 LP를 이루는 두 코인의 가치가 동일하고 변하지 않는다는 가정이 성립해야 하며, LP size의 절반을 넘는 규모의 스왑이 발생했을 경우 LP가 하나의 코인만 남아 pool이 유지되지 않는 극단적인 상황이 발생할 수 있기 때문에 실사용이 어렵다.

따라서 실제로 적용해볼 수 있는 최적의 시나리오는 constant-product와 constant-sum 두 방식을 모두 취하는 것이다. 대다수의 스왑은 LP를 구성하고 있는 스테이블코인들의 비율이 비슷하게 유지되는 middle-ground 영역에서 발생한다. 따라서 해당 영역에서 발생하는 스왑에 constant-sum과 유사한 invariant를 적용하고, LP 자산의 비율을 크게 어긋나게 하는 큰 규모의 스왑에 대해서는 constant-product와 유사한 invariant를 적용하는 것이다.

그림 1. 여러 invariant에 따른 x와 y 자산의 가격

Curve에서는 위와 같은 형태의 invariant 식을 얻기 위해 amplification coefficient 파라미터를 활용한 새로운 invariant를 제시하였다.

이를 설명하기 위해 먼저 constant-sum과 constant-product invariant를 일반화해보겠다. 2개의 코인으로 구성된 LP가 아닌 n개의 코인으로 LP를 구성한다고 가정했을 때 초기 LP의 balance는 다음과 같이 표현해볼 수 있다.

여기서 상수 D는 LP를 구성하는 coin들이 서로 같은 가치를 가질 때의 전체 양이고, x_ii번째 코인의 양을 뜻한다.

Curve whitepaper에서 얘기하는 amplified의 의미는, 어느 정도의 밸런스를 갖춘 LP에서의 곡률을 의미한다. 곡률이 클수록 곡선은 더욱 휘어지게 되고, 0으로 갈수록 직선에 가까운 형태가 된다.

Curve의 invariant를 정의하기 위해 whitepaper에서는 constant-sum은 zero slippage invariant이기 때문에 infinite leverage와 대응되는 개념이며, constant-product invariant는 zero leverage 라는 가정을 하였다. 여기서 infinite leverage의 의미는, constant-sum invariant를 적용한 LP는 constant-product invariant를 적용한 LP의 크기를 무한대로 확장한 것과 다름 없어져서 스왑 규모에 상관없이 zero-slippage를 보장한다는 뜻이다.

Curve에서는 Leverage의 값을 𝜒로 표기하였다. 𝜒로 명명하면서 𝜒가 0일 때는 constant-product가 되고, 𝜒가 infinite로 갈 때에는 constant-sum의 형태를 띠게 하는 invariant formula를 다음과 같이 정의했다.

𝜒는 dimensionless parameter이여야 하기 때문에 코인의 수에 따른 dependency를 없애주어야 한다. 따라서 dimension의 영향을 없애기 위해 위의 식처럼 기존의 invariant 식의 양변에 D^(n-1)를 곱해주었다.

여기서 𝜒가 상수인 상태의 invariant를 그대로 사용할 시 constant-product와 비슷한 문제가 발생하는데, 사용비율이 크게 벗어나는 스왑을 수행할 경우 LP 페어 자산의 균형이 깨져서 자산의 가격을 표시해주지 못한다는 문제가 있다. LP는 어떤 경우에도 pair 자산이 전부 존재하는 경우에는 가격을 표시해 주어야 한다.

Dynamic Amplification Coefficient

Curve에서는 이 문제를 해결하기 위해 𝜒를 dynamic한 값으로 바꾸었는데, LP의 비율이 동일할 때는 특정 상수 A와 같아지나, 자산의 비율이 극단적으로 깨지는 경우에는 0에 가깝게 떨어지도록 설정하였다. 여기에서 설정한 A가 바로 amplification coefficient이다.

dynamic한 𝜒를 위의 식에 대입하면 다음과 같은 invariant를 얻게 된다.

Amplification Coefficient의 직관적인 해석

위에서 수식을 통해 설명하였듯이, A가 커진다는 것은 레버리지 계수인 𝜒의 upper bound가 커지는 것을 의미하며, 이는 곧 constant-sum의 영역을 확대하는 것을 의미한다.

그림 1에서 살펴보았듯이, stable LP에서 StableSwap의 invariant는 두 페어 자산이 균형잡힌 경우에는 constant-sum과 유사하게 일정 범위 안에서 dy/dx의 값이 거의 비슷하게 유지(직선 형태)되다가 범위를 벗어날 때 급격하게 변동하는 양상을 보인다. constant-sum의 영역을 확대하는 것은 그림 1에서 직선 형태의 범위를 확장하는 것이고, 결국 조금 더 넓은 범위에 대해 안정된 가격비를 적용하는 것을 뜻한다.

따라서 stable LP의 규모에 따라서 다음과 같이 A를 설정하는 것이 적절하다고 볼 수 있다.

LP의 규모가 작을 때

  • A의 값을 비교적 작게 설정
  • 페어 자산이 balanced된 상황에서 일반적인 스왑에 대해 가격비가 안정화된 스왑을 제공한다.
  • massive swap에 대한 경우 constant-product 쪽의 레버리지가 상대적으로 크기 때문에 일반적인 constant-product invariant를 사용하는 pool과 유사하게 동작하여 페어 자산의 imbalance를 방지한다.

LP의 규모가 클 때

  • A의 값을 크게 설정
  • 페어 자산이 balanced된 상황에서 마찬가지로 가격비가 안정화된 스왑을 제공한다.
  • massive swap의 경우라 하더라도 LP의 규모가 크기 때문에 constant-sum의 레버리지를 상대적으로 크게 적용할 수 있어서 가격비가 안정화된 스왑을 제공하는 범위를 확장할 수 있다.

간단한 예제를 통한 StableSwap과 constant-product의 비교

간단한 스왑 시뮬레이션을 통해 StableSwap이 constant-product에 비해 얼마나 가격 안정성을 가지는지 확인해보았다. 환경 세팅은 다음과 같다.

  • LP를 구성하는 coin의 수는 편의상 2종류로 고정(n=2)
  • 초기 LP의 liquidity는 X coin 10000개, Y coin 10000개로 구성됨
  • X coin을 LP에 투입하여 B coin을 얻는데, 투입하는 X의 수를 100개부터 시작하여 100개 단위로 증가시키며, 15000개까지 수행한다.
  • A(Amplification coefficient)는 constant-product와의 비교를 수행할 때는 50, A에 따른 StableSwap의 return을 확인할 때는 1, 5, 10, 50, 100, 1000에 대해 수행

시뮬레이션으로 확인해볼 부분은 다음과 같다.

  • Swap의 규모에 따른 두 invariant의 return 비교 및 slippage 차이
  • Amplification coefficient의 크기에 따른 StableSwap의 return 변화

1. Swap의 규모에 따른 두 invariant의 return 비교

작은 규모의 swap부터 massive swap까지 다른 invariant에 따라 얻게 되는 교환비가 얼마나 차이나는지 확인해 보았다. swap의 규모는 LP pool의 0%부터 75%까지 0.5% 단위로 증가시키면서 시뮬레이션을 수행했다. StableSwap의 경우 amplification coefficient의 값은 50으로 설정했다.

그림 2. StableSwap과 constant-product의 swap return 비교
  • 상대적으로 swap의 규모가 적을 때는 StableSwap과 constant-product가 얻게 되는 Y coin의 수가 큰 차이를 보이지 않았다.
  • 투입하는 X coin의 수가 증가할수록 StableSwap을 통해 얻을 수 있는 Y coin의 수가 점점 늘어났고, X 10000개를 투입할 때(초기 LP pool 생성 때 투입한 X와 같은 양)는 교환받게 되는 Y의 수량이 약 2배 가까운 차이를 보였다.
  • 적은 규모의 swap일 때는 어떤 invariant를 사용하든 price slippage가 크지 않았지만, massive swap의 경우는 constant-product는 매우 큰 price slippage가 발생한 반면 StableSwap은 거의 일정한 비율의 교환비를 보여주었다.

2. Amplification coefficient의 크기에 따른 StableSwap의 return 변화

StableSwap에서는 위에서 설명하였듯이 Amplification coefficient의 값 조절을 통해 안정화된 교환비를 제공할 수 있는 범위를 결정하게 된다. A의 값에 따라 small amount of swap 부터 massive swap에 이르기까지 교환비의 차이가 어느 정도 발생하는지 시뮬레이션 해보았다.

그림 3. Amplification coefficient에 따른 StableSwap의 swap return 비교
  • swap의 규모가 작으면 전체적으로 좋은 교환비를 제공했다.
  • swap의 규모가 커질수록 A 값이 큰 StableSwap이 교환비 측면에서 훨씬 높은 안정성을 보였다.
  • A=1000에서 초기 LP pool 공급량(X 10000개, Y 10000개)을 넘어서는 swap이 발생할 경우 최대한 교환비를 지키기 위해 LP에 존재하던 모든 Y coin을 return으로 주게 되는데, 한쪽 자산만 남게 되어 LP pool이 깨질 수 있다.

시뮬레이션 관련 코드는 아래에서 확인할 수 있다.

마치며

모든 것에는 trade-off가 있다. constant-product invariant를 가격 결정 알고리즘으로 사용한 AMM은 탈중앙화된 블록체인에서 두 페어 자산의 스왑을 가능하게 했지만, LP의 규모가 작거나 pool에 비해 규모가 큰 swap이 발생할 경우 자산의 교환비를 지키지 못해 큰 price slippage가 발생한다는 문제가 있었다. 이는 스테이블코인 간 스왑에 치명적인 단점으로 작용했다. Curve의 StableSwap은 여기에 constant-sum과 constant-product의 하이브리드 형태인 새로운 방식의 invariant를 제시하였고, 특정 범위 안에서 거의 일정한 교환비로 swap을 제공할 수 있게 되었다. 하지만 이 역시 큰 규모의 swap에서는 교환비를 지키기 위해 LP 자산의 균형을 깰 수 있다는 단점이 존재한다. 따라서 가장 이상적인 스테이블코인 페어 LP의 운용방법은 페어 풀의 규모를 크게 설정하고 StableSwap을 사용하는 것이지만, 여건이 되지 않을 경우 각 invariant의 장단을 파악하여 적절히 취사선택하는 것이 필요하다.

--

--

BerryFi
BerryFi

Published in BerryFi

Crypto Research Group Focusing on DeFi Projects

Jungwoo Pyo
Jungwoo Pyo

Written by Jungwoo Pyo

Crypto Researcher & Software Engineer | Common Computer | Decipher

No responses yet