[SKKRYPTO] DEX Uniswap 1

Kimkyokkr
SKKRYPTO
Published in
10 min readNov 13, 2023

이번 글에서 다루는 Uniswap은 DEX (Decentralized Exchange)입니다. 그리고 DEX는 Defi(Decentralized Finance 탈중앙화 금융)의 일종입니다. 또한, Defi는 기존과 형태가 달라졌다고 해도 본질적으로 ‘금융’입니다. 따라서 Uniswap, DEX를 이해하기 위해서 금융의 기본 구조에 파악하는 것은 필수적이라고 생각합니다. 이 글에서는 금융산업의 관점에서 DEX의 구조를 제대로 잡고, 여기서 잡은 프레임을 기반으로 Uniswap의 세부 구조에 대해 탐구해보도록 하겠습니다.

DEX 산업의 비즈니스 구조

그렇다면, ‘금융’은 무엇일까요? 한자로 보면, 금융은 금 (金 쇠 금)과 융 (融 화할 융)이 결합된 단어로, 돈이 여러 상태로 변한다는 의미입니다. 돈이 변한다는 것은 곧 돈이 돌아다닌다는 의미일 것입니다. 하지만 우리의 일상 생활에서도 돈은 계속 돌아다닙니다. 우리가 마트에 가서 돈을 지불하는 것도 돈이 돌아다니는 것입니다. 그런데 특별히 은행이나 증권, 대부 관련 분야에 ‘금융’이라는 단어를 붙인 이유는 무엇일까요? 바로 이곳은 ‘돈’, ;유동성’ 그 자체에 대한 수요와 공급이 존재하는 곳이기 때문입니다. 돈이 충분히 많은 사람 혹은 집단이 돈이 필요한 사람에게 돈을 다양한 형태로 제공하는 것이 금융산업의 가장 기본 골자입니다.

이런 게 금융이라면, 서로 알아서 돈을 주고 받고 이자도 주고 받으면 되는데, 은행업, 증권업과 같은 금융산업은 왜 탄생하게 되었을까요? 돈이 많은 사람은 ‘나에게 안정적으로 이자를 줄 수 있으면서도 돈이 필요한 사람’을 찾기가 힘들고 돈이 필요한 사람은 ‘돈이 많은 사람’을 찾는 데 많은 비용이 듭니다. 이런 문제에 대한 해결을 금융기관이 할 수 있었던 것입니다. 이런 관점에서 접근하면, 금융 산업 구조의 본질을 파악할 수 있습니다.

아래 그림의 윗 부분은 현재 금융산업의 가장 기본적인 구조를 보여줍니다. 자금 공급자, 즉 돈이 넘쳐나는 사람이, 자금 수요자, 돈이 필요한 사람에게 중앙 거래소(금융기관)를 거쳐 자금을 제공하는 구조입니다. 중앙 거래소는 가격대 형성, 자금 공급자에 대한 인센티브 인센티브, 사용자 인터페이스 마련 등을 통해 수요자와 공급자의 매칭을 도와 거래비용을 낮춰줍니다. 주식을 하면 흔히 볼 수 있는 창, 호가창은 대표적인 가격대 형성을 통한 매도자 매수자 매칭의 도구라고 할 수 있습니다.

주식시장과 코인시장에서 흔히 볼 수 있는 호가창, 즉 Order Book

탈중앙화를 지향하는 블록체인 쪽도 중앙화된 거래소에 의해 돌아가고는 합니다. 흔히 사용하는 업비트는 대표적인 중앙 거래소입니다. Defi는 이런 중앙화된 기존 시스템을 탈중앙화시키고자 하는 맥락에서 등장합니다. ‘중앙화된’ 기존의 금융기관을 없애자는 것입니다. DEX는 그중에서도 중앙 거래소를 없애고자 하는 것입니다. 하지만 그림에서 볼 수 있듯이 그럴 경우 해결해야 할 문제가 생깁니다. 기존에 금융기관에서 하고 있던 기능, 즉 가격대 형성, 인센티브 제공, 사용자 인터페이스 마련을 누군가는 해야 한다는 것입니다.

Defi가 바꾸는 거래소 구조 변화 개요

Uniswap은 현재 가장 규모가 큰 DEX로서, 지금까지 이런 문제에 대응하는 방향으로 발전했습니다. 이런 틀을 바탕으로 Uniswap의 시스템과 변화에 대해 이해하면, 한층 이해가 수월할 것입니다.

Uniswap의 전반적인 구조

금융의 틀은 크게 봤을 때 자금의 수요자 — 공급자 — 그것을 매칭시키는 시스템, 이런 틀로 이루어져 있습니다. 그리고 시스템의 핵심 기능은 가격대 형성, 인센티브 제공, 사용자 인터페이스 마련입니다.

Uniswap의 기본 구조도 이에 비추어 이해해볼 수 있습니다. Uniswap 구조에서 자금 공급자에 해당하는 이들을 Liquidity Provider (LP), 즉 유동성 공급자입니다. 직관적입니다. 그리고 Uniswap의 수요자는 Trader 혹은 User입니다. Trader는 주로 자본 이익을 위해, User는 Swap (A라는 토큰을 B라는 토큰으로 교환하는 것)이 필요하기에 Uniswap을 사용합니다. 이런 수요자와 공급자를 매칭하는 공간을 Liquidity Pool, 즉 유동성 풀이라고 합니다. 유동성 풀에서는 특정한 토큰이 Pair를 이루어 해당 토큰 간의 교환거래가 이뤄니다. LP는 해당 유동성 풀에 토큰을 공급해 유동성 풀을 유지하는 역할을 합니다. 그리고 이 Pool에서는 중앙 거래소와 달리 중앙 기관이 없이 거래가 이뤄집니다.

Uniswap 기본 구조
Uniswap 홈페이지 갈무리

Uniswap의 V3 백서는 Uniswap 시스템에서 몇 가지 포인트를 강조하고 있습니다. 집중화된 유동성(Concentrated), 유연한 수수료 정책, 거버넌스 수수료, 가격 오라클 등이 그것입니다. 이는 모두 거래소의 핵심 기능과 연결됩니다. 집중화된 유동성은 사용자들이 일정한 가격 범위와 가격 틀 내에서 거래를 할 수 있게 하기 위한 시스템이고, 수수료는 시스템의 유지와 인센티브 수단이며, 가격 오라클은 가격의 균형을 잡아주는 역할을 합니다.

Uniswap 3.0 백서의 일부 내용 갈무리

Uniswap은 이를 통해 가격대 형성, 인센티브 제공, 사용자 인터페이스 마련의 기능을 제공합니다. 그리고 이런 요소를 통틀어 AMM, 즉 자동화된 마켓 메이커라고 할 수 있습니다. 이게 Uniswap System의 핵심입니다. 중앙 거래소가 개입하지 않고 Automated된 시장 풀을 형성하는 것이 DEX 기능의 가장 본질적인 부분이기 때문입니다.

하지만 Uniswap이 DEX를 구현하는 과정에서 처음부터 위에서 언급한 수단들을 활용했던 것은 아닙니다. 처음에는 단순한 가격 결정 기능부터 시작했습니다. 그리고 이후 여러 문제가 나타나자 해당 문제를 해결하기 위해 여러 수단을 사용하면서 서서히 거래소의 기능을 원활하게 제공하는 방향으로 발전했습니다. 이제부터 그런 발전 과정에 대해 살펴보도록 하겠습니다.

V1 / CPMM 가격 결정 메커니즘

환율을 생각해봅시다. 달러와 원을 교환하고자 합니다. 환전소를 가야 합니다. 여기서 환전소는 항상 고민을 해야 합니다. 어떤 교환비로 교환해줘야 할까? 모든 거래소가 고민하는 요소일 것입니다. Uniswap의 V1은 AMM, 특별히 CPMM (Constant Product Market Maker) 이라는 방식을 통해 해당 문제를 해결하는 알고리즘을 만들면서 세상에 나왔습니다.

아래 그림은 고등학교 때 모두 봤던 그림일 것입니다. k가 고정된 채, x와 y가 변할 때 좌표평면에 아래 그림과 같은 점이 찍힙니다. CPMM은 이런 유리함수의 원리를 근간으로 가격을 결정합니다. k가 고정되어 있는 상수이기에 “Constant Product”라는 이름이 가지고 있는 것입니다.

Demos를 통해그린 유리함수

이제 A와 B를 어떤 특정한 자산이라고 설정하겠습니다. 이때 x의 크기는 자산 A의 양이고, y의 크기는 B의 양입니다. 각 자산의 유동성 크기를 의미합니다. 그렇다면 k는 총 유동성 크기가 됩니다. 정리하면, CPMM 시스템은 총 유동성의 크기가 고정되어 있을 때 A와 B 중 무엇이 더 희소한지에 의해 교환비율, 가격이 결정되는 시스템입니다. k가 고정되어 있을 때 x가 감소하면, y의 크기가 커집니다. 이에 따라 x의 가치가 상승하고, y의 가치는 하락합니다.

쉽게 예시를 들어 설명하겠습니다. X 토큰과 Y 토큰을 거래하는 Pool이 있습니다. 해당 Pool에는 현재 X가 10, Y가 100만큼 있습니다. Constant는 1000이 되죠. 여기서 Constant는 1000으로 고정시키겠습니다. 한 Buyer가 1X를 Y로 바꾸고 싶어 합니다. 이때 1X가 들어가면, X가 11로 늘어납니다. 하지만 Constant는 고정되어 있습니다. 그러면 X와 Y의 교환비율은 11:90.9로 조정됩니다. 따라서 최종적으로 1X를 아래 Liquidity Pool에서 Y로 바꾸면 원래 있던 100에서 남은 90.9를 뺀 9.1Y를 받습니다.

이게 기본적인 Uniswap의 가격 결정 메커니즘입니다. 희소성에 기반한 상대가치를 통해 교환비율이 결정되는 방식입니다. 중앙의 개입 없이 알고리즘으로 이런 가격 메커니즘이 작동합니다. 그렇다면 여기서 의문이 들 수 있습니다. Pool 내에서 가격은 이렇게 결정될 수 있지만, 실제로 Pool 외부에서 유통되는 토큰은 외부 시장에서 다른 상대가치로 거래되고 있을 수 있는데, 그러면 시장가격과 Pool 내부 가격에 차이가 발생할 수 있지 않냐는 의문입니다.

타당한 지적입니다. 실제로 금융시장에서는 이런 것을 활용한 트레이딩이 존재합니다. 본질적인 형태가 같지만 시장에 따라 다른 가격에 거래가 되고 있을 때, 둘의 차이를 이용해 싼 시장에서 사서 비싼 시장에서 파는 식으로 트레이딩을 하는 것입니다. 이를 차익 거래 (Arbitrage)라고 합니다.

Uniswap의 아비트라지 구조

Uniswap에서도 같은 현상이 발생합니다. 차익거래자(Arbitrage Trader)가 Uniswal의 유동성 풀과 외부 시장 중 가격이 낮은 곳에서 토큰을 사서 반대쪽에 파는 식입니다. 위의 다이어그램은 차익거래자가 어떤 방식으로 매매하는지를 보여줍니다. 차익거래자는 Uniswap의 token pair price와 시장의 가격을 지속적으로 체크하면서 차익 거래의 기회를 잡아내 트레이딩을 합니다.

하지만 이런 차익거래의 기회는 시장에서 매우 드물게 발생합니다. 역설적으로, 차익 거래자의 존재가 차익 거래의 기회를 줄입니다. 차익 거래자가 양쪽 시장에서 토큰을 사고 팔면서 차익 거래를 하면, Uniswap 내부 Pool과 외부 시장의 가격이 균형을 이루는 방향으로 가게 되기 때문입니다. 따라서 차익거래도 Uniswap의 가격 결정 시스템의 일부로 보아야 합니다.

하지만 차익거래 말고도 의문은 남아 있습니다. 교환이 이뤄지기 위해서는 유동성 풀이 형성이 되어야 하고, LP가 풀을 형성할 때 해당 유동성 풀의 교환비율이 정해져야 합니다. 하지만 V1에는 이에 대한 기준과 시스템이 존재하지 않습니다. 이를 다른 말로 바꿔서 표현하면, 가격대 형성이 원활히 이뤄지지 못할 수 있습니다. 거래소의 기본 기능에 문제가 있는 것입니다.

위의 사례로 돌아가보면, Buyer가 교환에 나서기 전까지 교환비율은 10:1이었지만, 교환을 하려고 X를 지불하자 교환비율이 변했습니다. 이렇게 교환비율이 변함에 따라 생기는 변화량을 “슬리피지”라고 합니다. 슬리피지가 크면, 교환비율의 변동폭이 크다는 의미이므로 User가 사용할 때 불편함을 겪을 수밖에 없을 것입니다. 이 역시 가격대 형성의 문제입니다.

또한, LP와 Uniswap의 사용자 인터페이스를 개선하는 개발자에 대한 인센티브도 보이지 않습니다. 가격 결정 메커니즘이 존재할 뿐, 거래소의 기본적인 역할을 할 수 없는 구조입니다. V2와 V3는 이런 문제를 해결하기 위해 Uniswap의 여정이었습니다. 이런 맥락에서, 다음 글에서 설명할 내용이 어떤 문제를 해결하는 것인지 떠올리면서 읽어 본다면, 내용이 조금 복잡해도 맥락을 제대로 잡아가면서 읽을 수 있을 것입니다.

--

--