유니스왑의 CPMM 모델 알아보기(2)-유동성 집중화

Kevin Lee
bsp-asset
Published in
8 min readMar 3, 2022

본 글은 단순 정보 제공을 목적으로 하고 있으며 투자 권유를 목적으로 한 것이 아닙니다. 본 글의 내용에 대해서는 보증을 하지 않습니다. 실제로 투자를 진행할 때에는 본 글에 전면적으로 의거하여 투자 판단을 내리는 것을 삼가하여 주시기 바랍니다. 투자에 관한 결정은 본인의 판단에 달려 있습니다.

지난 글에 이어서, 이번 글에서는 유니스왑 V3부터 사용되는 개선된 CPMM 모델, 유동성 집중화에 대해 알아보도록 하겠습니다 :)

유니스왑 v2의 단점, 그리고 유동성 집중화

유니스왑 v2까지는 유동성 공급 범위를 설정하지 않고 유동성을 공급하였습니다. 이것은 토큰 X와 Y를 예치하면 어느 가격 범위에서든 유동성이 공급되는 것을 의미합니다. 이 유동성은 토큰 X와 Y가격에 상관없이 계속해서 비율이 변하며 공급되었습니다.

하지만, 대부분의 거래는 현재 가격과 그렇게 멀리 떨어지지 않은 곳에서 일어납니다. X토큰의 현재 가격이 1usdt라면, X토큰은 주로 1usdt 주위에서 거래가 일어날 것입니다. 갑자기 X토큰이 10usdt에서 거래가 일어날 일은 극히 드물 것입니다.

이것을 생각했을 때, 유동성 공급자가 공급할 유동성을 특정 가격 근처에 집중시키고 그 외 가격대는 유동성 공급을 집중시키지 않는다면 좋지 않을까요? 유니스왑 v3에서는 이러한 ‘유동성 집중화’가 가능합니다.

<유니스왑v3부터의 유동성 추가 페이지. 가격 범위를 설정할 수 있다. 출처 : uniswap.org>

위 그림은 유니스왑v3에서의 유동성 공급 페이지입니다. 그림의 오른쪽에서 볼 수 있듯 유동성 공급자는 가격 범위를 설정해 유동성을 공급할 수 있습니다.

가격 범위를 설정해 유동성을 공급하게 되면, 전 범위가 아닌 특정 범위에만 유동성을 집중해 공급하게 되므로 그 구간에서 거래가 일어났을 때 더 많은 수수료를 받을 수 있게 됩니다. 따라서 유동성 공급자들은 더 많은 수수료를 받기 위해 현재 가격 근처에 유동성을 집중시키고, 스왑 이용자들은 더욱 풍부한 유동성 환경에서 거래를 할 수 있게 되므로 서로에게 긍정적인 효과가 나타납니다.

그렇다면 유니스왑 v3는 어떠한 방법을 통해 가격 범위를 설정해 유동성 공급을 할 수 있도록 설계했을까요? 이를 수학적으로 알아보도록 합시다.

유동성 집중화가 포함된 CPMM 공식 유도하기

<유니스왑의 CPMM모델을 설명해주는 x * y = k 그래프>

위 그래프는 유니스왑의 x * y = k 그래프입니다.

여기서 그래프의 의미를 알아보면, 그래프 위의 특정 점(x, y)는 유동성 풀에서의 X토큰, Y토큰의 비율을 말합니다. 예를 들어, 그래프 위의 (100, 50) 점은 유동성 풀에 X토큰이 100개, Y토큰이 50개가 들어있다는 것입니다.

그래프 위의 특정 점의 기울기는 그 점에서의 교환 비율(가격)을 의미합니다. 가격이란 x를 풀에 넣을 때 y를 몇 개 받을 수 있는가를 말하는 것이고 이것은 dy/dx로 나타낼 수 있습니다. 그리고 이것은 그래프 위의 특정 점의 기울기입니다. 예를 들어, (100,50)점의 기울기가 2라면, X토큰과 Y토큰의 교환 비율은 2입니다. X토큰을 1개 내면 Y토큰을 2개 받을 수 있는 것이죠.

유니스왑에서 유동성 공급을 하게 되면, 내가 공급한 토큰의 개수는 그대로 있지 않습니다. 토큰 가격이 변화함에 따라 유동성 풀에 있는 토큰 개수도 x * y = k 그래프에 따라 변화하게 되고, 유동성을 공급했던 유저들의 토큰 개수도 자연스럽게 x * y = k에 따라 변화하게 됩니다.

그렇다면, 유동성 공급을 특정 지점에 집중하게 되면 기존에 전 범위에 걸쳐 유동성을 공급한 유저보다 내가 공급한 토큰의 비율이 훨씬 크게 변할 것입니다. 유동성 공급을 특정 지점에서 집중한다는 것은 특정 지점에서 더욱 많이 내 토큰을 소모해 상대방의 거래를 체결시켜 준다는 것이기 때문입니다.

즉, 유동성 공급을 집중시키게 되면 토큰 가격이 변화할 때 내가 공급한 X토큰, Y토큰 비율이 더욱 크게 변화하게 됩니다.

이것을 그래프로 나타내면 다음과 같습니다.

이렇게, 그래프를 x축, y축으로 평행이동시키면 토큰의 가격이 변화할 때 X토큰과 Y토큰의 비율이 더욱 크게 변하게 됩니다.

검은색 그래프의 (0,50)점과 빨간색 그래프의 (50,100)점을 비교해봅시다. 두 점에서의 기울기(토큰 가격)은 2로 동일합니다. 하지만 각 점에서의 X토큰, Y토큰의 비율은 (0개, 50개), (50개, 100개)로 크게 차이나는 것을 알 수 있습니다. 기존의 그래프에서는 공급한 토큰의 비율이 100/50 = 2였다면, 그래프를 하단으로 이동시켜 X토큰의 공급이 아예 없어졌기 때문입니다.

그 다음 검은색 그래프의 (50, 0)점과 빨간색 그래프의 (100, 50)점을 비교해보면, 두 점에서의 기울기는 0.5로 동일하지만 각 점에서의 X토큰, Y토큰의 비율은 (50개, 0개), (100개, 50개)로 차이가 납니다. 기존의 유동성 공급 방식에서는 X토큰, Y토큰이 (50개, 100개)에서 (100개, 50개)로 변화했지만 옮겨진 그래프에서는 (0개, 50개)가 (50개, 0개)로 변화했습니다. 옮겨진 그래프에서 X토큰 공급을 두 배로 늘려서 확인해 보면 같은 가격 변화에서 토큰 개수는 (100개, 0개)에서 (0개, 100개)로 훨씬 변화가 심합니다.

즉, 이렇게 기존의 x * y = k 그래프를 x축, y축 평행이동을 시키면 특정 범위에서 유동성을 집중적으로 공급하는 유동성 공급자에게 필요한 수식을 구할 수 있습니다. 그렇다면 이 수식은 어떻게 표현될까요?

앞서, 유니스왑의 유동성 공급 그래프는 다음과 같은 식을 따른다고 하였습니다.

k로 식을 계산해도 되지만, 유니스왑v3 백서에 있는 것처럼 k를 L로 변환해서 식을 구하도록 하겠습니다. K와 L의 관계는 다음과 같습니다.

따라서, 𝑥 × 𝑦 = 𝑘 와 𝑘 = 𝐿^2식을 합쳤을 때 L과 x,y의 관계는 다음과 같습니다.

교환 비율, 즉 가격 p는 이전에 확인했듯이 아래 식으로 표현할 수 있습니다.

여기서 𝑑𝑦/𝑑𝑥 를 다르게 표현해보도록 하겠습니다.

𝑥 × 𝑦 = 𝑘 이므로 이 식을 y에 대해 정리하면 𝑦= 𝑘 / 𝑥입니다.

여기서, 이 함수를 미분하면 다음과 같습니다.

이 말은, x를 알 수 있으면 기울기, 즉 교환비를 알 수 있다는 것입니다. 그런데, 이 x는 𝑥 × 𝑦 = 𝑘 를 따르므로 𝑥 = 𝑘/𝑦 로 표현할 수 있습니다. 따라서, 위 dy/dx에 관한 식에 𝑥 = 𝑘/𝑦를 넣어 주면 식을 다음과 같이 정리할 수 있습니다.

즉, 가격 p를 다음과 같이 편리하게 계산할 수 있습니다.

앞서 구한 식인

에 p에 대한 식을 대입해 정리하면 다음과 같은 결과를 확인할 수 있습니다.

<x, y를 L과 p로 나타낸 식>
<x*y=k그래프의 평행이동. 출처 : uniswap v3 whitepaper>

이제는 이 값을 이용해 그래프를 평행이동하도록 하겠습니다. 가격 범위 pa, pb에서 유동성을 공급한다면, 토큰 가격이 pa, pb에 도달했을 때 둘 중 하나의 토큰만 보유하고 있어야 합니다. 각 pa, pb에서 유동성을 집중적으로 공급하였기 때문에 그 범위를 넘어서는 부분에서는 더 이상 유동성을 공급할 수 없습니다. 유동성을 공급하지 못한다는 말은, 두 토큰 중 하나만 보유하고 있어 유동성 공급이 불가능하다는 것이고, 즉 그래프상 pa, pb 점에서 각각 y=0, x=0을 만족하여야 합니다.

그렇다면, 위 그래프에서 a점에서의 y값만큼 그래프를 아래로 평행이동시키고, b점에서의 x값만큼 그래프를 왼쪽으로 평행이동시키면 원하는 식을 얻을 수 있습니다.

a점에서의 y값은 위에서 구한

식의 y를 이용해 구할 수 있습니다.

b점에서의 x값을 똑같은 방식으로 구하게 되면 b점에서의 x값은 다음과 같습니다.

특정 함수의 (x1, y1)만큼의 평행이동은 다음과 같이 나타낼 수 있습니다.

위의 x, y값을 여기에 대입해 주면, 다음과 같은 식을 얻을 수 있습니다.

<유니스왑 v3, 유동성 집중화에 사용되는 CPMM 식>

위와 같은 공식을 이용해서, 특정 범위를 설정해 그 범위 내에서 집중적으로 유동성 공급을 할 수 있습니다. 또한, 그 범위 안에서 내 자산의 비율 또한 알 수 있습니다.

함께 리서치를 진행한 Donggun LEE에게 감사의 말씀 전합니다 :)

--

--

Kevin Lee
bsp-asset

Prev. a41 Researcher | Korea Univ. | Blockchain Valley