[DEX Series] 1. 서로 다른 가치의 자산 거래

Daniel Hong
Decipher Media |디사이퍼 미디어
28 min readFeb 27, 2022

서울대학교 블록체인 학회 디사이퍼의 디파이 톺아보기 팀이 작성한 DEX 시리즈를 공개합니다. 저희는 DEX에 대해 자세하게 설명해놓은 한국어로 된 아티클이 없다는 문제의식에서 출발해, 암호화폐 시장을 크게 견인한 DEX를 탐구하여 앞으로 탈중앙화 금융이 나아갈 방향에 대해서 함께 고민해보고자 시리즈를 작성해보았습니다. 소개된 프로젝트는 DEX의 한 기능(AMM 알고리즘 등)의 기준을 세운 프로젝트들을 소개하였습니다.

[DEX Series]
1. 서로 다른 가치의 자산 거래
2. 동일한 가치의 자산 거래
3. 선물거래
4. MEV

Author
홍성수 of Decipher, ‘디파이 톺아보기’ Team
Seoul Nat’l Univ. Blockchain Academy Decipher(@decipher-media)
Reviewed By 정재환(Jay)

목차

  1. 탈중앙화거래소(DEX)의 등장배경
  2. AMM의 등장 및 개념
  3. 각 DEX의 AMM 모델 및 특징 분석(Bancor, Uniswap, Balancer)
  4. 맺는글

1. 탈중앙화 거래소(DEX)의 등장배경

기존의 플랫폼 경제의 문제점

플랫폼 경제(platform economy)는 플랫폼(platform)의해 촉진되는 경제 및 사회 활동이다(출처 : 위키백과)
세계경제포럼(World Economic Forum, WEF)에 따르면 2025년 디지털 플랫폼 매출액은 60조 달러이며, 향후 10년간 전세계 신규 부가가치의 70%가 디지털 플랫폼에서 창출될 것이라고 한다(출처 : https://froma.co/acticles/689)

플랫폼 경제모델은 IT기업이 사람들이 경제활동을 할 수 있는 플랫폼을 만들어주고 그 사이에서 이익을 취하는 형태의 경제모델입니다. 기존의 디지털 플랫폼의 대표적인 예로는 우버, 아마존, 페이스북, 구글 등이 있습니다. 급속도로 성장하게 된 플랫폼 경제는 현재 대표적인 경제 모델로 자리잡게 되었지만 빠르게 성장한만큼 많은 폐해도 나타가게 되었습니다. 승자독식의 플랫폼 경제에서 살아남은 거대 IT기업이 시장을 독과점하게 되면서 참여자에 대한 보상 이슈나, 초단기 근로자를 양산하는 등의 문제가 대두되었습니다. 정작 플랫폼에 기여하는 것은 시장참여자인데 플랫폼사업자들이 더욱 막대한 부를 취하게 되었으며, 직접고용 형태가 아닌 ‘인적용역'의 형태가 되어버린 플랫폼노동자의 권익문제에 대한 대책이 필요하다는 목소리가 나오게 되었습니다.

플랫폼 경제에서 프로토콜(Protocol) 경제로

프로토콜 경제란 개인 간 자발적으로 프로토콜(약속)을 정해 거래하는 형태로, 탈중앙화와 탈독점화를 통해 거래 비용을 절감하고 공정한 분배를 실현하는 플랫폼 생태계를 의미합니다
(출처 : KB지식비타민 연구보고서)

플랫폼 경제의 문제점을 해결하려는 프로토콜 경제에는 다음과 같은 특징이 있습니다.
(1) 정보 분산 — 기존 플랫폼 경제에서는 플랫폼사업자는 정보를 독점하고 정보를 통해서 수익을 올릴 수 있었습니다. 프로토콜 경제는 이러한 정보를 탈중앙화하고 분권화하여 누구나 평등하게 정보에 접근할 수 있도록 하는 특징이 있습니다.
(2) 중개비용 최소화 — 독과점에 성공한 플랫폼 사업자는 높은 수수료를 부과하면서 막대한 이익을 취할 수 있었습니다. 하지만 실질적으로 플랫폼 위에서 가치를 만들어낸 주체는 이용자였으므로, 이용자에 대한 적정한 보상이 필요하다는 인식이 생기게 되었습니다. 프로토콜 경제는 중개비용을 최소화하면서 실질적으로 가치를 만들어내는 이용자에게도 합당한 수준의 이익이 공정하게 분배되는 것을 목표로 합니다.
(3) 합의 규칙 — 거래 체결 내역의 검증을 중개기관 없이 네트워크 참여자가 직접 확인할 수 있는 상호 신뢰가 가능한 기술이 필요합니다.

프로토콜 경제에서 가장 큰 기반 기술은 블록체인입니다. 블록체인 기술을 통해 탈중앙화/탈분권화된 개방형 네트워크와 규칙의 투명성을 실현할 수 있게되었고, 기존 플랫폼이 정한 규칙을 따르지 않고 스마트계약을 통해 이용자끼리 규칙을 손쉽게 설정할 수 있기 때문입니다.

프로토콜 경제- 탈중앙화 거래소(DEX)의 등장

기존의 중앙화된 거래소(CEX; Centralized Exchange)는 시장을 만들어주고 그 사이에서 매수자/매도자의 거래수수료를 수취하는 구조를 통해 수익을 올릴 수 있었습니다. 거래소들은 이러한 독과점 형태로 막대한 부를 쌓을 수 있었습니다

거래소사업도 대표적인 플랫폼 사업의 형태였기 때문에, 블록체인 위에서 탈중앙화된 거래소(DEX; Decentralized Exchange)가 등장한 것도 당연한 수순이었습니다. 블록체인 기술을 이용해서 거래소도 탈중앙화된 프로토콜 경제모델로 바꾸려는 시도에서 탈중앙화 거래소가 출현하게 됩니다.

본 편에서는 탈중앙화 거래소를 어떻게 구현할 수 있었는지 AMM 모델에 대해서 집중적으로 분석하고, 각 탈중앙화 거래소의 특징/활용에 대해서 설명하겠습니다.

2. AMM(Automated Market Maker)의 등장 및 개념

AMM의 등장

오더북(호가창)이란 주식이나 암호화폐를 거래할 때, 특정 시장에 존재하는 구매자와 판매자의 모든 매수, 매도 주문을 기록해서 보여주는 화면입니다. 여기에 새롭게 자신의 호가를 추가하는 경우 Maker, 오더북 상에 현재 존재하는 주문을 선택해서 거래를 하는 경우 Taker가 되는 것입니다. 기존에 거래자들은 오더북에 기록되는 호가를 제출하고 특정 호가에 반대포지션을 취하고자 하는 거래자가 나타나면 거래가 체결되는 형태로 거래를 했습니다.

또한, 호가창에는 최소호가단위가 존재합니다. 거래소의 정책에 따라서 결정되는데, 보통 종목의 가격을 기준으로 10,000원 이하에서는 최소호가단위 얼마, 이상에서는 얼마 이렇게 정해지게 됩니다. 유동성이 풍부한 종목의 경우, 최소호가단위 간격으로 모든 호가에 주문이 걸려있게 되고 유동성이 부족한 경우 최우선매도호가와 최우선매수호가 사이에 간극이 생기기도합니다. 이 간극을 메워주는 것이 시장조성자(Market Maker) 혹은 유동성 공급자(Liquidity Provider)였습니다. 시장조성자 혹은 유동성 공급자는 거래소나 브로커와 계약을 맺어 거래의 유동성을 채워주는 역할을 했습니다. 거래의 유동성이 풍부해야 거래자들이 더욱 손쉽게 거래를 많이할 수 있기 때문입니다.

초기 이더리움 체인의 탈중앙화 거래소에서는 오더북을 운영하기가 어려웠습니다.
(1) 오더북에 매매 주문을 등록하거나 거래를 취소하는데 가스비를 지불해야했기 때문에 거래비용이 너무 크게 되었습니다. 중개자를 없애 비용을 효율화시켜 사용자들의 이익을 증대시키려고 나온 탈중앙화 거래소가 역설적이게도 더 많은 거래비용을 필요로 하는 것은 맞지 않는 이야기였습니다.
(2) 낮은 확장성 문제 때문에 속도가 매우 느렸고 주문을 생성하고 관리하기가 어려웠습니다.

오더북을 온체인에 올릴수 없었기 때문에 거래자들은 호가를 제출하는 형태의 매매를 할 수 없었습니다. 사람들은 이러한 문제점들로 이용자들이 탈중앙화 거래소를 이용하지 않게 되자 유동성이 줄어들었고, 사용자 편의가 낮아져 참여자가 더욱 줄게되는 악순환을 낳게 되었습니다. 오더북을 사용하지 않고 자동으로 매수자-매도자를 연결해주고 시장가로 호가를 형성해놓는 형태의 자동화된 시장조성자(Automated Market Maker; AMM) 개념이 등장하게 됩니다.

AMM의 개념

AMM이란 자동화된 시장조성자의 준말로서, 인센티브를 받고 호가를 채워주던 시장조성자를 없애고 거래할 수 있도록 해주었습니다. 대표적으로 1편에서 다룰 토큰 스왑 DEX의 경우 이용자들은 탈중앙화 거래소가 가지고 있는 유동성 풀이라는 바구니에 자신의 토큰을 넣게 되고, 다른 사람이 와서 팔고 싶은 토큰을 넣고 사고 싶은 토큰을 유동성 풀에서 빼간다라고 이해하시면 됩니다.

본격적으로 저희가 알아볼 AMM 모델이란 유동성 풀에 있는 ‘토큰들 간의 가격이 수학적으로 어떻게 형성’되는지, ‘유동성을 효율적으로 확보’하고 ‘슬리피지’불필요한 부분을 어떻게 줄일 수 있는지에 대한 연구입니다. DEX가 등장한 시간 순으로 Bancor, Uniswap, Balancer를 분석해보았습니다.

3. 각 DEX의 AMM 모델 및 특징 분석(Bancor, Uniswap, Balancer)

Bancor의 AMM

Bancor(이하 방코르)는 제2차 세계대전 이후 케인즈가 제안한 초국가적 준비통화(Supranational reserve currency)의 이름에서 따왔습니다. 디파이라는 개념이 등장하기 전인 2017년에 이미 이더리움에 최초의 AMM 모델을 배포합니다.

방코르는 ‘자판기’에 비유할 수 있습니다. BNT라는 스마트 토큰 개념을 제시했습니다. 이 스마트 토큰은 다른 모든 토큰을 이어주는 커넥터(connector) 토큰으로 모든 토큰 간의 변환을 가능하게 해줍니다. 케인즈의 초국가적 준비통화 개념과 비슷하다고도 볼 수 있습니다. 이를 통해 스마트컨트랙트를 이용한 알고리즘을 사용하게 되면 거래소의 오더북 없이도 스마트 토큰을 이용해서 원하는 두 암호화폐를 교환할 수 있습니다. 사용자는 스마트 토큰을 스마트 토큰 컨트랙트에 보내게 되고 . 스마트 토큰을 방코르 프로토콜에 넣으면 원하는 자산으로 교환하면서 스마트 토큰은 사라지게 됩니다.

BNT-DAI쌍의 유동성 공급과정과 스왑되는 과정

BNT 토큰 가격은 외부 자산에 고정되지 않고 시장에 따라서 변동될 수 있습니다. 방코르 V1에서 유동성 풀에 유동성을 공급하는 유동성 공급자는 유동성을 공급할 토큰과 BNT 토큰 모두를 보유해야했습니다. 따라서 2개의 개별 자산에 대한 위험 노출이 있었습니다.

Bancor V2

Bancor는 1세대 AMM(Automated Market Maker)은 어떤 문제점을 가지고 있었고 V2에서는 이를 어떻게 해결하고자 했을까요?

Bancor가 가지고 있던 문제점

  1. 비자발적 토큰 노출: 유동성 공급자는 자신이 제공한 토큰이 유동성 풀에 있는 여러 토큰의 가격 변동에 노출되어 자신이 선호하는 토큰에 대한 롱 포지션을 잃게 될 수 있었습니다.
  2. 비영구적 손실: 유동성 공급자가 유동성풀에 있는 자산의 가격 비가 어긋날 때, LP 토큰의 가치가 손상되는 비영구적 손실에 노출되어 있었습니다.
  3. 높은 자본 비효율성: 높은 슬리피지가 발생하고 있었습니다.

Bancor V2/V2.1의 개선

  1. Bancor Exchange의 단일 토큰 익스포저

이전 버전에서는 유동성 공급자는 AMM 풀에 있는 모든 토큰에 대해 노출되어 익스포저를 가졌지만, V2에서는 하나의 ERC20 토큰을 유동성 풀에 유동성을 제공할 수 있게 되었습니다. 그 결과, 유동성 공급자는 더 이상 별도의 예비 토큰을 보유할 필요가 없어졌고 사용자는 0–100% 범위에서 AMM의 모든 토큰에 대한 익스포저를 선택할 수 있게 되었습니다.

작동 방식은 다음과 같습니다

1) 위험 자산(예: ETH, WBTC, LINK) 또는 Bancor 네트워크 토큰(BNT)의 풀에 유동성을 제공합니다.

2) BNT가 없는 ‘단일 토큰 예금’을 지원하기 위해 프로토콜은 사용자 예금과 일치하도록 BNT를 풀에 공동 투자합니다. 예를 들어, $MATIC에 $100,000 USD치의 토큰을 사용자가 예금하면 프로토콜은 $MATIC풀로 $100,000의 BNT 토큰을 추가합니다.

3) 프로토콜에 의한 투자된 BNT는 일반적으로 관련 지분(즉, 사용자가 예치한 $MATIC)이 철회될 때까지 풀에 남아 있으며, 수수료를 통해 프로토콜은 투자한 BNT와 누적 수수료를 소각합니다.

4) 프로토콜에 투자한 BNT는 BNT 토큰 보유자가 BNT를 풀에 제공하는 경우에도 소각될 수 있습니다. 이 경우 사용자가 예치한 BNT가 풀에서 프로토콜의 위치를 인수하여 프로토콜이 투자한 BNT와 동일한 가치를 소각합니다.

2. Bancor 네트워크의 비영구적 손실 보호

비영구적 손실(IL)은 풀에 있는 서로 다른 토큰의 가격이 발산할 때 발생합니다. 다이버전스가 클수록 IL이 커지고 스왑 수수료와 보상으로 인한 LP의 이익이 줄어듭니다. IL이 커진다는 것은 토큰 가격의 상승분을 온전히 누릴 수 없다는 뜻이기도 합니다.

Bancor v2에서는 체인링크 오라클을 이용해서 두 자산 페어의 가격비가 벌어졌을 경우, 각 토큰의 지분을 자동으로 변경시킵니다. 이를 Dynamic Automated Market Maker(DAMM)이라고 부릅니다. 즉, 처음에 유동성을 공급할때는 두 자산의 가치가 50:50이 되도록 유동성을 공급하지만, 가격이 실시간으로 변하면서 54:46의 비중으로 변하게 되어 IL을 방지합니다.

(출처 : https://www.youtube.com/watch?v=cizLhxSKrAc)

또한 DAMM을 이용하면 슬리피지를 줄일 수 있습니다. 방코르 팀에서는 유니스왑보다 자본효율성을 20배나 증가시킬 수 있다고 주장합니다.

Bancor v2.1은 유동성공급자의 IL 위험을 제거하고 Bancor 교환 프로토콜로 전송합니다. Bancor 교환 프로토콜은 풀 전체에서 IL 위험을 집계합니다. 프로토콜은 IL의 네트워크 전체 비용을 보상하기 위해 풀에 BNT를 공동 투자하여 얻은 스왑수수료로 비영구적손실 비용을 충당합니다. 인출 시점에 LP의 IL을 완전히 보상하기에 충분한 수수료가 없는 경우 프로토콜은 델타를 커버하기 위해 새로운 BNT를 발행합니다 .

작동 방식은 다음과 같습니다.

1) 사용자가 새 예금을 하면 프로토콜의 보험 정책에서 제공하는 보장범위가 매일 1%씩 증가해서 100일 이후에는 IL 손실 전체를 보장받게 됩니다.

이 기간이 지나면 처음 100일 또는 그 이후에 발생한 모든 비영구적 손실은 철회 시점에서 확정되게 됩니다. 100일 만기 이전 인출은 부분 IL 보상만 받을 수 있습니다. 예를 들어, 풀에서 60일 후 인출은 발생한 영구적 손실에 대해 60% 보상을 받습니다.

2) 처음 30일 이내에 철회된 지분에 대해 제공되는 IL 보상은 없습니다. LP는 여타의 표준 AMM에서 발생하는 것과 동일한 IL의 적용을 받습니다.

3) 즉, 토큰 가격이 오르더라도 LP가 100일 동안 완전한 보호를 받는 한 LP는 토큰을 지갑에 보관하고 있는 것처럼 토큰의 전체 가치를 인출할 수 있습니다. 예를 들어, LP가 1 ETH를 스테이킹하고 ETH 가격이 두 배로 뛰더라도 LP는 스테이킹 기간 후에 수수료와 보상을 더한 최소 1 ETH에 해당하는 가치를 여전히 인출할 수 있습니다.

“Bancor V2를 사용하면 고정된 유동성 준비금이 있는 AMM을 생성할 수 있으며, 이는 AMM에서 토큰의 상대적 가치를 일정하게 유지(체인링크 오라클을 이용)하려고 합니다. 오라클은 적자가 발생했을 때 차익 거래자가 풀에 가치를 되돌리도록 인센티브를 제공하기 위해 풀의 가중치와 수수료를 조정하는 데 사용되며 안정적이고 휘발성인 토큰에 대한 영구적인 손실을 완화합니다.”

Bancor V3

2021년11월30일 방코르는 V3에 대한 로드맵을 발표합니다.

Omni Pool, Infinity Pool, IL Protection, Auto-Compounding Rewards, Dual-Sided Rewards, Liquidity Direction 등이 포함되어있습니다.

옴니풀을 통해 거래경로를 단축하고, IL 손실을 보호해주는 등 일련의 업데이트 방향 모두 유동성을 효율적으로 공급하고 자본효율화를 이루기 위한 방코르의 방안이라고 생각하시면 될 것 같습니다.

Uniswap AMM 모델

Uniswap의 자세한 분석은 별도의 디사이퍼 시리즈(유니스왑 톺아보기)가 존재하므로 본편에서는 간략하게 다루도록 하겠습니다.

Uniswap 이전의 Constant Sum 모델

가장 기본적인 형태의 AMM이 도입된 동일한 자산 간 스왑을 위한 유동성 공급 공식은 mStable의 다음 AMM 공식이라고 할 수 있습니다.

X + Y = K

위의 AMM 공식은 Constant sum formulas라고 불리며 이름에서도 알 수 있듯 두 자산 가치의 ‘합’이 일정하다는 개념에서 착안하여 도출된 공식입니다. mStable은 주로 스테이블코인 간 스왑을 제공하므로 위의 공식을 사용할 수 있었습니다.

이를 응용하여, 가격이 1이 아닌 다른 자산과 스왑을 이용하기 위한 유동성풀을 생성할 수도 있는데 다음 공식을 이용하게 됩니다.

p * X + Y = K

위 공식은 두 자산 가격의 상대적인 가격비를 이용해서 유동성을 공급하고 이 유동성 풀을 이용해 스왑을 할 수 있습니다.

단점

하지만 위 공식에는 큰 단점이 있습니다. 두 토큰 가격비가 계속해서 벌어지는 경우 이용자들은 유동성 풀에서 가격이 오르는 토큰을 계속해서 교환해갈 것이고 그렇게 되면 유동성 풀에는 상대적으로 가치가 낮은 토큰들만 남게 되는 현상이 발생할 수 있습니다. 결국 자산의 외부 레퍼런스 가격이 1:1이 아니라면 한쪽의 유동성 풀이 파괴될 수 있습니다.

Uniswap의 Constant Product 공식

이러한 접근법은 5년전 비탈릭 부테린에 의해서 처음 구상되었고, Alan Lu에 의해 일반화 되었습니다.

다음 Zargham의 논문을 보시면 불변량을 기반으로한 모델 접근법을 이해할 수 있습니다.

유니스왑은 위의 Constant Sum 공식보다 진일보한 공식을 만들고 표준으로 만들었습니다. Product(곱)라는 이름에서 알 수 있듯, 두 토큰의 리저브 수량의 곱을 항상 일정하게 만들어주는 커브를 사용하여 가격을 결정하게 됩니다.

X * Y = K

자세한 내용은 디사이퍼 미디엄의 이전 유니스왑 시리즈를 참고하시기 바랍니다.

본 편에서는 유니스왑이 어떻게 발전해왔는지를 살펴보고자 합니다.

우선 유니스왑 V1에서는 임의의 ERC20 토큰 페어를 지원하지 않았습니다. 예를들어, 서로 다른 두개의 토큰을 교환하기 위해서는 반드시 이더리움으로 환전하는 과정을 거쳐야만 토큰을 교환할 수 있었습니다. 제가 팔고자하는 토큰을 이더리움으로 전환한 뒤, 이더리움을 다시 사고자하는 토큰으로 만드는 방식이었습니다. 이는 효율성이 떨어지는 방식이었습니다.

따라서 유니스왑 V2에서는 ‘거래의 효율성’을 개선하기 위해 ERC20토큰 페어를 지원하도록 해주었고 거래 페어들의 루트를 사용자가 직접 정할 수 있도록 만들었습니다. 이를통해, 거래의 효율성을 조금 더 끌어올릴 수 있었습니다. 사용자들은 여러 목적에 따라 직접 두 토큰을 교환하든, 다른 경로를 거쳐 특정 토큰을 거쳐서 교환하는 방법을 선택할 수 있게 되었습니다.

UNI V3

유니스왑 V3에 대한 자세한 내용은 위 아티클을 참고해주십시오. 본 시리즈에서는 유니스왑의 문제의식과 해결방법을 간단하게 다룰 예정입니다.

CPMM 함수를 기반으로 하여 토큰을 교환하게 되면 슬리피지가 발생하게 됩니다. 중앙화된 거래소를 이용할때도 현재 걸려있는 호가주문의 수량을 넘어서서 많은 수의 주문을 시장가로 제출한다면 호가가 위/아래로 크게 긁히는 경험을 할 수 있는데 슬리피지도 같은 개념이라고 생각하면 됩니다. 이런 슬리피지 문제는 유동성이 부족한 경우 크게 발생합니다.

결국, 슬리피지 문제유동성 문제이고 유니스왑 V2의 ‘슬리피지 문제’(자본의 효율성)를 개선하기 위한 방법으로 유니스왑 V3를 발표합니다.

V3 이전 유니스왑 공식은 몇가지 문제점을 가지고 있었습니다.

(1) Uniswap에서 설정한 AMM 공식에 의해 유저들은 오직 Price Taker의 역할밖에 할 수 없었습니다. 기존, 오더북 형식의 거래소에서는 유저들이 Price Taker, Maker 두 역할을 모두 수행할 수 있었지만 유니스왑은 한계가 있었습니다.

(2) AMM 공식을 사용하면 유저가 공급한 유동성이 가격범위 [0,∞) 전체에 유동성이 제공되었습니다. 오더북 기반 거래소에서는 자신의 원하는 가격대에 호가를 걸어둘 수 있었고 완전히 외가격 범위에는 사람들이 호가를 걸지 않았기 때문에 시장가 주위로 호가가 집중되는 현상이 있었습니다. 반면 유니스왑의 AMM은 ‘게으른 유동성’이라고도 불리는데, 자본이 ‘효율적’으로 이용되지 않았던 것입니다.

(3) 위와 같은 현상 때문에 가격 슬리피지가 더욱 발생했습니다. 오더북 기반 거래소의 경우 동일 Tick에 거래가 체결될 경우 슬리피지가 발생하지 않기 때문에 유니스왑 V3에서는 위 세 문제점을 해결하려고 했습니다.

V3의 핵심, Tick이란

Uniswap V3에서 제안하는 대부분의 새로운 기능들은 Tick에서 비롯됩니다.

Tick이란 최소호가단위를 말합니다. 기존 중앙화된 거래소에서도 최소호가단위가 존재한다고 말씀드렸습니다. 앞서 언급한 것처럼 유저들이 제공한 유동성이 [0, ∞) 가격 범위 전체에 공급되는 문제점을 해결하기 위해, 거래/유동성을 Tick 단위로 잘게 쪼개는 시스템을 도입했습니다.

이렇게 Tick을 활용한 시스템 디자인으로, Uniswap V3는 기존 거래소의 오더북 기반 거래의 장점과 AMM의 이점을 고루 섞었습니다.

Concentrated Liquidity (유동성 집중)

예를들어, 스테이블코인간의 유동성을 집중할 수 있다는 의미는 유동성 공급자 (LPs, Liquidity Providers) 가 그들이 원하는 가격 범위 / Tick에 유동성을 공급할 수 있게 되었습니다.

예를 들어, 스테이블 코인간의 페어나 같은 가치를 가지는 자산(BTC와 renBTC)끼리의 페어에서는 서로 같은 가격에서만 거래가 일어날 것이므로 특정 구간에만 유동성을 집중시키면 됩니다. 이제 유저는 자신이 원하는 구간을 설정해서 유동성을 공급할 수 있게 되었습니다. 이를 통해, 자본효율화를 이루었습니다. 가령 특정 Tick에 유동성이 주로 공급된 경우 유동성 깊이(Liquidity Depth)가 깊어졌다고 표현합니다.

유니스왑 V2와 V3의 유동성 구조(깊이) 비교

보통 유저들이 특정 서비스의 성공 여부를 비교하려고 할때, 해당 프로토콜에 TVL(Total Value Locked)를 얼마나 모았는지를 통해서 비교를 합니다. 전체 시가총액을 TVL로 나누어서 고평가/저평가를 구분하려는 시도도 있습니다. 하지만 유니스왑은 V3를 도입하면서 단순 TVL 비교는 무의미해졌다고 주장합니다. 자신들은 유동성을 더욱 효율적으로 사용하므로 유니스왑의 $1가 다른 프로토콜의 $100 TVL의 가치를 가질 수 있기 때문입니다. 결국, 디파이 경쟁은 한정된 자본을 가지고도 어떻게 효율적으로 활용하고 유저경험을 끌어올려 선순환 구조를 가질 수 있는지가 중요하다고 생각됩니다.

Balancer 의 AMM 모델

두개 이상의 토큰으로 구성된 유동성 풀

밸런서여러개의 토큰을 자신이 정하는 비율에 따라 유동성 풀에 넣고 포트폴리오를 구성할 수 있습니다. 마치, 하나의 인덱스 펀드를 구성한다고 비유할 수 있습니다. 투자자들은 인덱스펀드 각각의 전략을 통해 리스크를 헷지하고 포트폴리오를 분산할 수 있습니다. 인덱스 펀드를 운용하는 포트폴리오 매니저에게 리밸런싱 및 트레이딩에 관한 일정 수수료를 지급해야합니다. 또한 이런 중앙화된 방법으로 포트폴리오를 관리하는 경우 수탁 위험이 있을 수 있습니다.

밸런서의 Value Function “V”는 다음과 같습니다.

t : 유동성 풀에 있는 각각의 토큰을 의미
Bt: 유동성 풀에 있는 토큰의 잔액을 의미
Wt : 유동성 풀에서 각각의 토큰이 차지하는 비중을 정규화한 수치입니다. (Wt의 합은 1이 되어야합니다)

위 공식에서 각 토큰의 외부 레퍼런스 가격이 변하더라도 전체 풀에서 각 토큰가치가 차지하는 비중은 일정하게 유지됩니다.

결국 밸런서 유동성 공식은 유니스왑 유동성 공식을 일반화한 형태로 볼 수 있습니다.

위 수식은 x,y,z 세개의 자산을 Wx, Wy, Wz의 비율로 넣었을때의 AMM 공식을 보여줍니다.

세개의 자산을 같은 비중으로 놓고, x,y토큰을 거래하는 경우 z토큰은 거래에 영향을 미치지 않으므로 상수로 생각할 수 있습니다. 그렇게 되면 아래와 같이 유니스왑의 Constant Product 공식이 도출됩니다.

Balancer AMM 공식과 이전 AMM 공식의 차이

밸런서 AMM 공식에는 이전 AMM 공식과 두가지 차이점이 있습니다.

(1) 기존 유동성 풀은 두가지 토큰으로 구성된 토큰페어로 이루어져있었던 반면, 밸런서 유동성 풀에는 여러개의 토큰을 넣을 수 있습니다.

(2) 기존 유동성 풀을 만들고 토큰페어를 생성할때에는 두 토큰의 가치가 50:50이 되도록 만들어야했습니다. 반면, 밸런서 유동성 풀은 자신의 마음대로 토큰들의 비율을 설정할 수 있습니다.

밸런서에서는 기본적으로 거래를 위한 N차원의 유동성 풀을 만들 수 있습니다.

위 그림에서는 3개의 자산으로 구성된 유동성풀의 유동성 분포도를 나타냅니다. 3개의 자산이기 때문에 3개의 축을 가진 3차원의 유동성풀의 모습을 가지고, N개의 자산인 경우 N차원의 유동성 풀이 될 것입니다.

초록색 단면은 유동성 단면의 모습입니다. X,Y 토큰의 거래에서 Z를 상수로 상정할 수 있다고 했으므로 임의의 z 축에 수직인 단면(연두색 부분)으로 다음 도형의 표면을 잘라보면 유니스왑의 AMM Curve와 같은 곡선을 볼 수 있습니다.

각 자산간의 관계

앞서 설명한바와 같이, 여러개의 자산으로 구성된 토큰 풀이라고 할지라도 실제로 거래를 원하는 두 토큰 이외의 토큰들은 상수로 취급할 수 있습니다.

(출처 : https://ko.0xzx.com/20200930118126.html)

x, y, z, m 네개의 토큰으로 구성된 풀에서 z와 m 부분은 상수가 되므로 x, y 변수와 상수k로만 구성된 식을 도출해낼 수 있습니다.

(출처 : https://ko.0xzx.com/20200930118126.html)

y³ 부분을 Y로 치환한다면 우리에게 익숙한 X * Y = K라는 유니스왑 AMM공식이 나오게되는 것이죠.

자산의 가치

총자산에 개별자산의 비중을 곱하면 각 개별자산의 가치가 나오게 됩니다. 따라서, 총자산의 가치는 각 개별자산의 가치에서 개별자산의 비중으로 나누어준 값이 됩니다.

풀에 있는 개별자산의 가치
유동성 풀 전체자산의 가치

각 자산의 가격

i 자산을 매도하고 o자산을 매수하고 싶은 경우 특정 순간의 상대적인 가격(Spot Price)은 다음 공식과 같습니다.

하지만, 거래가 일어날 때 슬리피지는 필연적으로 발생하게 되고 슬리피지에 따라 거래가 일어나는 동시에 가격도 미세하게 조정이 되게 됩니다. 이것을 고려하고 A0를 이용자가 산 토큰 o의 수량, Ai를 이용자가 판매한 토큰 i의 수량으로 가정하면 슬리피지를 고려한 Effective Price는 다음과 같습니다.

위 EP를 극한으로 보냈을때 순간적인 가격이 위에서 말한 SP가 되므로, 두 가격간 관계는 다음과 같습니다.

거래공식

거래가 일어난 뒤에도 유동성 풀의 전체가치는 일정해야합니다. 따라서 거래 전과 후의 AMM 공식의 결과값이 일치한다고 했을때 다음 등식을 설정할 수 있습니다.

위 공식을 전개해나간다면 Ai 토큰을 넣고 Ao 토큰을 얻은 경우, 얻은 o토큰의 수량인 Ao와 유동성 풀의 o토큰의 잔액(Bo)과의 관계는 다음과 같습니다.

가중풀의 장점

유동성 풀 내 토큰 비중을 다르게 했을 때(이하 가중풀)이 가질 수 있는 장점은 세가지가 있습니다.

첫번째로, 익스포저를 제어할 수 있습니다. 가중 풀을 사용하면 유동성을 제공할 수 있는 능력을 유지하면서 특정 자산의 가격변동 혹은 리스크에 대한 익스포저를 선택할 수 있게 됩니다. 예를 들어, 한 유저가 A토큰의 가격이 크게 오를 것이라고 생각한다면, A토큰을 큰 비중으로 풀에 유동성을 공급할 수 있습니다. A토큰의 가격이 크게 오르는 경우 많은 이익을 거둘 수 있게 되는 것입니다.

2개의 쌍과 여러 쌍의 토큰 풀 비교

두번째로, Divergence Loss(비영구적손실)도 줄어듭니다. A토큰의 가격이 크게 오를 경우, 가중풀에 A토큰의 비중을 높여서 넣어놓은 유동성공급자의 Divergence Loss(비영구적손실)도 줄어들게 됩니다. 물론, 비영구적손실을 완전히 없앨수는 없지만 상당히 개선될 수 있다는 것을 아래 그래프를 통해 확인이 가능합니다. 대신, 특정 토큰의 비중을 너무 높여버리면 나머지 토큰의 유동성이 부족하게 되서 슬리피지가 발생할 수 있어 슬리피지와 비영구적 손실의 손익을 따져서 비율을 정해야합니다.

풀 비중을 50:50으로 설정하였을 때 IL은 0.62%(https://baller.netlify.app/)

위 사이트에 접속하시면 두가지 토큰의 비율을 다르게 설정하였을 경우 비영구적 손실이 얼마나 발생하는지와 여러개의 토큰에 따른 비영구적 손실을 계산하실 수 있습니다.

가중풀이 가격 상승/하락과 관계없이 IL에 유리

세번째로, 토큰의 거래쌍을 늘릴 수 있습니다. 가중풀에 n개의 토큰이 들어있는 경우, 그 중 임의의 두개 토큰을 거래할 수 있으므로 거래할 수 있는 쌍은 nC2가 됩니다. 아래 점도표를 보시면 가로축의 풀에 들어있는 토큰의 개수에 따라 세로축의 거래할 수 있는 토큰의 가짓수가 더욱 증가하는 모습을 볼 수 있습니다.

풀에 들어있는 토큰 갯수에 따른 교환 가짓수

동일 가치의 자산간 거래

스테이블코인 간 거래에서는 가중치 개념을 도입한 새로운 공식을 사용하게 됩니다.

N : 풀안에 있는 토큰의 개수
xi : 토큰의 잔액
A : 증폭계수
D : D는 반복적인 계산을 통해서 구할 수 있고 알고리즘은 다음 깃허브를 통해 확인하실 수 있습니다.

증폭계수가 커짐에 따라 constant sum 공식과 비슷한 모양이 됨을 알 수 있다

스테이블 스왑거래는 동일한 가치를 가지는 자산간의 교환을 의미합니다. 예를들어, 미국달러가치에 페깅된 DAI, USDT, USDC 간의 거래나 동일 자산에 페깅된 WBTC, renBTC, hBTC 간의 거래가 있습니다. 유니스왑 V3에서 보셨던 것처럼 Constant Sum 공식과 Constant Product 공식을 합친 형태의 AMM 공식을 산출하여 유동성을 집중하여 거래합니다. 동일 가치의 자산간 거래는 본 시리즈의 다음 아티클에서 다루도록 하겠습니다.

활용

비중을 다르게 설정하여 유동성 풀을 만들수 있는 밸런서풀 공식을 활용하면 LBP(Liquidity Bootstrapping Pools)를 만들 수 있습니다. 유동성 부트스트래핑 풀은 앞서 설명했던 가중 AMM 공식에 시간에 따른 비중이라는 변수를 추가했습니다. 풀 안의 초기 토큰 비중과 마지막 토큰 비중을 설정할 수 있습니다. 이런 부트스트래핑 풀은 세가지 장점을 가지고 있습니다.

(1) 시간이 지남에따라 사람들은 유동성 풀을 이용하여 거래를 하고 결과적으로 시장균형가격을 찾아갈 수 있습니다.

(2) 기존에는 유동성 풀이 열리자마자 고래들이 봇을 이용해서 많은 양을 사갔다면, 초기가격을 높게 설정해놓은 LBP풀은 고래들의 초기 봇싸움을 방지해주고 Fair Market을 만들 수 있습니다.

(3) 초기에 소자본으로도 유동성 풀을 만들 수 있습니다. 프로젝트 팀의 특정토큰 A와 USDC를 묶어서 초기 유동성 풀을 만든다면 다른 유동성 풀은 50대 50의 비율로 토큰을 넣어서 만들어야했습니다. 하지만 밸런서 풀을 이용하면 10% USDC로도 풀을 만들 수 있기 때문에 자본이 덜 필요하게 됩니다.

이를 이용한 옥션 세일 방식으로 유명한 카퍼옥션(Copper Auction)이 있습니다. 초기 가격을 설정하고 주기적으로 유동성풀에 토큰을 공급하게 됩니다. 투자자들이 구매하지 않으면 토큰 가격이 점점 하락하고 투자자들이 구매하면 토큰 가격이 점점 상승합니다.

결국, 이런 밸런서 풀의 부트스트래핑 방식은 “자본을 어떻게 효율적으로 쓰고 배분할 수 있는가?” 하는 질문을 해결하려는 것 같습니다. 프로젝트 팀과 이야기를 나눠보면 초기 유동성 공급을 위해 만들어놓은 풀이 비영구적 손실을 많이 봤고, 추가로 자본을 들여서 유동성을 공급해야한다고 말하는 경우가 많았습니다. 소자본으로 유동성 풀을 만들고 적정 시장가격을 찾았을때, 토큰을 주기적으로 주입해준다면 프로젝트 팀의 비영구적 손실도 막을 수 있고 효율적으로 자본을 사용할 수 있게 됩니다. 또한, 고래들의 봇싸움을 방지해주기 때문에 더욱 많은 투자자에게 균형가격으로 자산을 배분(판매)할 수 있다는 장점을 가지고 있습니다.

맺는글

지금까지 DEX의 등장배경과 AMM의 발전역사에 대해서 알아보았습니다. 결국, 새로운 DEX의 등장, 업그레이드 버전의 등장은 모두 특정 문제를 해결하기 위함에 초점이 맞춰져 있었습니다. 어떻게하면 자본을 더욱 효율적으로 쓸 수 있고(유동성 집중, IL방지), 그 결과로 더욱 좋은 유저경험과 더욱 많은 유동성을 끌어올 수 있는가하는 문제였습니다.
본편에서는 서로 다른 가치의 자산간 교환의 AMM공식을 다루었다면 다음편에서는 동일 가치의 자산간 교환을 위한 AMM 공식을 Curve의 사례를 통해 알아보도록 하겠습니다.

--

--