유니스왑(Uniswap)이란?

단, 토큰 페어 간의 교환이 원활하게 이루어지기 위해서는 충분한 양의 토큰이 존재해야 할 것이다. 유니스왑에서는 이와 같이 토큰의 공급을 유도하기 위해 토큰 교환이 이루어질 때마다 부과되는 소정의 수수료를 유동성 공급자(Liquidity Provider)에게 인센티브로 지급하고 있다. 유동성 공급자들은 동일한 가치만큼 토큰을 공급해야 하며 공급되는 토큰 페어는 각 페어 별로 풀(Liquidity Pool)에 개별적으로 보관된다.

교환비율의 조정 원리
중앙화 거래소(CEX, Centralized Exchange)에서는 구매자와 판매자의 모든 매수 및 매도 주문을 기록한 전자 목록인 오더 북(Order Book) 혹은 호가 창에 의해 가상 자산의 가격과 교환비가 결정된다. 그런데 오더 북이란 특정 주체에 의해 관리되어야 하는 것으로 탈 중앙화를 추구하는 DEX의 철학과는 부합하지 않는다. 이에 따라 오더 북의 역할을 DEX에서는 AMM(Automated Market Maker)이 하게 된다. AMM 이란 개인들이 토큰을 교환할 때 수학공식에 의해 자산의 가격이 자동으로 결정되도록 하는 알고리즘을 말하며 기본적으로 유동성 풀을 기반으로 작동한다. 유니스왑에서는 AMM의 종류 중 하나인 CPMM(Constant Product Market Maker)를 사용하며 공식은 하기와 같다.
공식: X * Y = K
- X: 유동성 풀 안에 있는 토큰 X의 수량
- Y: 유동성 풀 안에 있는 토큰 Y의 수량
- K: 상수
X와 Y 값은 각각 유동성 풀에 존재하는 토큰 가치의 비중을 나타내며 두 비중의 곱에 의해 풀의 유동성이 결정되고 이를 K 값으로 나타낸다. CPMM의 핵심 원리는 토큰의 수량 변동과 상관없이 이 K 값이 항상 일정해야 한다는 것이다. 트레이더가 X와 Y 토큰을 교환할 때 어떤 일이 발생하는지 하기의 예시를 통해 알아보자.
사례: X = 10, Y = 500, K = 5000, 교환 수수료 0.25%

풀에는 현재 X 토큰 10개, Y 토큰 500개가 들어있고 X 토큰 1개의 가치는 Y 토큰 50개의 가치와 같다. 따라서 누군가가 X 토큰을 1개를 가지고 Y 토큰과 교환하고자 할 경우 소정의 수수료(0.25%)를 지불하고 Y 토큰을 50개 정도 수령할 수 있는 상황이다.
김람다는 X 토큰을 1개를 Y 토큰으로 교환하려고 한다. 이때 X의 수량은 10에서 11로 변하게 되며 K 값은 일정하게 유지되어야 하므로 Y의 값이 변해야 한다. 단, X 토큰을 교환하는 시점에서 0.25%에 해당하는 수수료를 지불하게 되므로 수수료를 제외한 토큰의 수량인 0.9975(1-0.0025)개에 해당하는 Y 토큰을 수령하게 된다.
X = 10.9975(10+1-0.0025), K = 5,000 —> Y = 5,000/10.9975 ≒ 454.65
결과적으로 유동성 풀 안에 들어있는 Y 토큰의 수량은 454.65개로 변하므로 김람다는 45.35(500-454.65)개의 토큰을 수령하게 된다. 토큰 교환이 이루어진 후에 교환 시점에서 발생한 수수료인 0.0025 X 토큰은 유동성 공급자(Liquidity Provider)에게 바로 지급되지 않고 유동성 풀에 다시 들어간다. 그리고 이 인센티브는 향후에 유동성 공급자가 자신이 공급한 토큰을 회수하는 시점에서 받을 수 있다. 따라서 수수료가 다시 풀로 들어올 경우 X, Y, K의 값은 하기와 같다.
X = 11, Y = 454.65, K ≒ 5,001
만약 김람다가 X 토큰을 1개 더 Y 토큰과 교환할 경우 X, Y, K의 값은 하기와 같다.
X = 11.9975(11+1-0.0025), K = 5,001 —> Y = 5,001/11.9975 ≒ 416.84
교환 시점에서 발생한 수수료가 다시 유동성 풀로 들어온 후 X, Y, K의 값은 하기와 같다.
X = 12, Y = 416.84, K ≒ 5,002
이번 교환에서는 김람다가 Y 토큰을 37.81(454.65-416.84)개 수령하게 되는데 이를 통해 유동성 풀 안에서 특정 토큰의 수량이 많아질 경우 그 가치가 하락하는 것을 확인할 수 있다. 즉 처음에는 X 토큰 1개로 50개의 Y 토큰을 받을 수 있었으나 1개가 추가되면서 45.35개, 1개가 더 추가되면서 37.81개가 되었다. 이와 같은 상황이 지속될 경우 더 적은 Y 토큰으로 X 토큰을 구입할 수 있다는 것을 의미하므로 Y 토큰으로 X 토큰을 교환해 수익을 실현하려는 차익거래의 수요(arbitrageurs)가 증가하게 된다. 그리고 이 차익거래는 X 토큰과 Y 토큰의 교환비가 적정한 수준으로 도달할 때까지 이어질 것이고 결과적으로 두 토큰 페어의 비율은 기존 유동성 풀의 교환비에 맞춰지게 된다.

혹자는 토큰의 교환이 이루어지면서 K의 값이 변하는 것에 의문을 제기할 수 있다. 그러나 K 값이 소폭 상승하는 이유는 토큰을 교환하는 시점에서 지불한 수수료가 유동성 공급자(Liquidity Provider)에게 바로 지급되지 않고 유동성 풀로 다시 들어오기 때문이다. 예컨대 위의 사례에서 토큰 교환이 이루어지는 시점에서 계속해서 0.0025 X 토큰 만큼의 수수료가 발생하게 되는데 이 수수료는 유동성 풀에 계속해서 보관되므로 K 값이 증가하게 된다.
유동성 공급자에 대한 보상체계
유동성 공급자(Liquidity Provider)는 자신이 제공한 유동성을 회수할 때 그 시점까지 쌓인 수수료를 보상으로 받을 수 있다. 이때 받게 될 보상은 세 가지 변수에 의해 정해지며 공식은 하기와 같다.
공식: Sum(토큰 교환 수수료율 x 내가 제공한 유동성의 비중 x 건당 거래금액)
토큰 교환 수수료율이란 토큰 페어 별로 교환 시 발생하는 수수료를 말한다. 이 수수료는 교환 시점에서 발생하며 토큰 페어 별로 수수료가 다르게 산정되어 있다.

내가 제공한 유동성의 비중이란 유동성 풀(Liquidity Pool) 전체에서 내가 공급한 토큰의 비중을 말한다. 즉, 특정 풀에 내가 공급하고 있는 토큰의 양을 나타내는 용어로 나의 토큰이 풀에서 차지하고 있는 지분이다.
건당 거래금액이란 교환되는 토큰의 총 가치를 말하는 것으로 토큰을 더 많이 교환할수록, 그리고 더 비싼 토큰을 교환할수록 커진다. 예컨대 토큰을 1개 교환할 때보다는 10개 교환할 때, ETH보다는 BTC를 교환할 때 건당 거래금액이 증가하게 된다.
한계점
토큰을 교환하는 사람들은 슬리피지의 최소화를 위해 유동성 풀이 큰 것을 선호할 것이고 유동성 공급자(Liquidity Provider)들은 토큰 교환이 자주 발생하여 수수료가 많이 나오는 토큰 페어를 선호할 것이다. 이에 따라 현재 유니스왑의 TVL과 24시간 거래량을 보면 특정 토큰 페어들에 치우쳐 있는 상태이다.
현재 가장 인기가 많은 토큰 페어는 USDC, USDT, DAI와 같은 스테이블 코인과 더불어 ETH, BTC이다. 이 토큰들의 페어 중 상위 5개의 유동성 풀 TVL은 유니스왑 전체 TVL의 50% 이상을 차지하고 있다. 24시간 거래량 또한 마찬가지로 상위 5개가 전체 거래량의 50% 이상을 차지하고 있다. 즉, 특정 토큰 페어에만 수요가 쏠려 있으며 다른 토큰들의 교환이 제대로 이루어지지 않고 있는 상황이다. 유니스왑이 ETH를 포함한 모든 ERC-20 토큰의 스왑을 목적으로 만들어진 서비스라는 것을 감안하면 서비스 범위가 일부 토큰으로 국한되고 있다는 한계를 보이고 있는 것으로 해석할 수 있다.