유니스왑(Uniswap)에 대해 알아보자

YEONG
Cortex Labs
Published in
11 min readMar 24, 2020

작가: BisadeAsolo

번역: Cortex labs

원문: https://www.mycryptopedia.com/what-is-uniswap-a-detailed-beginners-guide/

유니스왑은 ETH와 ERC20 토큰 간의 자동 교환 거래를 용이하게 하도록 설계된 이더리움 기반인 프로토콜입니다. 유니스왑은 온체인(on-chain)에서 설치되어 탈중심화 지갑만 설치하면 누구도 이 프로토콜을 사용할 수 있습니다(현재 지원한 지갑: MetaMast, WalletConnect, Coinbase Wallet, Fortmatic, Portis). 유니스왑은 또한 탈중심화 프로토콜을 활용하여 암호화폐 자산 거래 과정 중에 철저히 탈중개화 시켜 일종의 디파이(DeFi) 프로텍트로 대중들에게 많이 알려져 있습니다.

유니스왑은 두 가지 유형의 스마트 계약으로 구성됩니다.

●거래 계약(An exchange contract)

●팩토리 계약(A factory contract)

이러한 계약은 Vyper 스마트계약 프로개이밍 언어로 작성되었으며 유니스왑 프로토콜 기능의 핵심이기도 합니다. 거래 계약은 정확히 하나의 ERC20 토큰을 지원하며 각 거래 계약에는 ETH 및 지원되는 ERC20 토큰이 있습니다. 이는 주어진 거래 계약에서 실행되는 거래가 ETH 및 ERC20 토큰의 상대적 공급을 기반으로 함을 의미합니다. 거래 계약에서 실행되는 거래는 또한 ETH를 중개자로 사용하여 ERC20 토큰 간의 직접 거래도 가능합니다.

팩토리 계약을 사용하여 새 거래 계약을 배포할 수 있으므로 아직 유니스왑에 거래 계약이 없는 ERC20 토큰은 팩토리 계약을 사용하여 만들 수 있습니다. ‘createExchange()’함수를 이용하면 이더리움의 모든 사용자가 팩토리 계약을 사용하여 거래 계약을 배포할 수 있습니다. 팩토리 계약은 유니스왑 거래 계약의 레지스트리 역할을 담당하고 있습니다. 즉, 팩토리 계약을 사용하여 유니스왑 시스템에 추가 된 ERC20 토큰 및 거래 주소를 조회할 수 있습니다. 거래 계약이 릴리스 된 후, 팩토리 계약은 거래 계약의 ERC20 토큰에 대해 유사한 배경 점검 및 기타 작업을 수행하지 않으며 ‘거래 계약에 하나의 ERC20 토큰 만 포함(aside from the one-contract-exchange-per-token limit)’이라는 제한 사항만 있습니다. 따라서 사용자는 자신이 신뢰하는 ERC20 토큰 프로젝트의 거래에만 참여해야 합니다.

유니스왑의 자산 유동성

유니스왑 프로토콜의 설계 아키텍처는 전통적인 암호화폐 자산 거래소의 거래 모델과 전혀 다릅니다. 대부분의 거래소는 주문서를 관리하고, 이를 사용하여 특정 자신의 구매자 및 판매자와 일치시킵니다. 반면 유니스왑은 ‘예비금’ 유동성을 사용하여 계약에서 디지털 자산 거래의 교환을 실현합니다.

유동성 공급자는 ETH와 거래 계약의 ERC20 토큰 사이에 동등한 가치라고 생각하면 입금하여 이를 수행할 수 있습니다. 유동성 공급자가 설정한 가치가 시장과 일치하지 않으면 차익 거래자는 ETH와 ERC20 토큰 사이의 가치를 맞추도록 할 것입니다.

거래 계약의 예비금은 유동성 공급자 네트워크에 의해 공급됩니다. 거래 계약에 첫 번째 유동성을 제공하는 자에게 ETH와 ERC20 토큰 간의 환율을 설정할 권리가 있습니다. 첫 번째 유동성 공급자는 ETH와 거래 계약의 ERC20 토큰 사이에 동등한 가치라고 생각하면 입금하여 환율을 설정할 수 있습니다. 반대로, 유동성 공급자가 설정한 가치는 시장과 일치하지 않으면 차익 거래자는 이를 매매하여 차익을 얻어 동일한 환율을 맞추도록 합니다. 모든 유동성 공급자는 충전 시 적용 환율을 등가 계산의 기초로 사용합니다.

유니스왑은 또한 자체적으로 ERC20를 준수하는 ‘유동성 토큰’을 발행하였습니다. 이 토큰은 유동성 공급자의 거래 계약에 대한 기여로 볼 수 있습니다. 유니스왑에서 ‘거래 계약에 하나의 ERC20 토큰 만 포함(aside from the one-contract-exchange-per-token limit)’에 대한 설정의 근거는 유동성 공급자가 유동성을 하나의 거래 계약에 단일 예비금을 모으도록 인센티브화 시키는 것입니다. 유니스왑은 각 유동성 공급자가 제공한 총 예비금의 상대적 비율을 추적하기 위해 유동성 토큰을 발행하였습니다. 유동성 공급자는 유동성 토큰을 소각시킬 수 있으며 거래 계약에서 ETH 및 ERC20 토큰의 비례 지분을 인출 할 수 있습니다.

유동성 공급자는 거래 계약에서 유동성을 제거하지 않고도 계정간에 유동성 토큰을 판매하거나 이전 할 수 있습니다. 그러나 유니스왑의 유동성 토큰은 거래 계약에만 적용되고, 유니스왑 프로토콜과 연관된 단일 기본 고유 디지털 자산이 없습니다. 유동성 공급자는 ‘addLiquidity ()’함수를 호출하여 거래 계약에 입금 할 수 있습니다. 또한, 유니스왑에 유동성을 제공하는 사람은 수수료의 일정 부분을 받을 수 있습니다.

1. 유니스왑 거래 : ETH ⇄ ERC20 거래

유니스왑에서 실행할 수 있는 거래 유형 중 하나는 ETH와 ERC20 간에 거래입니다. 앞에서 언급했듯이 ETH와 ERC20 토큰 간의 환율은 거래 계약 내 각 자산의 유동성 풀의 상대적 규모를 기반으로 합니다. 환율은 유니스왑의 불변 공식에 의해 뒷받침됩니다.

ETH pool * token pool = invariant

이 불변 공식은 유니스왑 프로토콜에 거래 실행 중에 일정하게 유지됩니다. 다만, 불변 공식은 거래 계약에서 유동성이 변화될 때만 변경될 수 있습니다.

ETH ⇄ BAT 예시 :

Bob은 자신의 1ETH를 ERC20 토큰 인 BAT(Basic Attention Token)로 교환하기 위해 거래를 시작하려고 합니다. Bob은 유니스왑 프로토콜에서 기존 거래 계약을 사용하여 거래를 실행합니다. 예를 들어, 유동성 공급자는 10 ETH와 500 BAT를 거래 계약에 예치했습니다. 이때 기본 불변 공식은 ETH pool * BAT pool = invariant으로 설정됩니다.

ETH pool = 10

OMG pool = 500

Invariant = 10 * 500 = 5,000

Bob은 거래 계약의 ETH 풀에 ETH 1개를 보내 거래를 시작하려고 합니다. 이때 거래 금액의 0.3%즉 0.003ETH는 유동성 공급자에게 거래 수수료 보상으로 제공합니다. 나머지 0.997ETH가 ETH 풀에 추가됩니다.

불변량을 ETH 풀의 새로운 수량을 제법으로 하여, BAT 풀에서 새로운 수량을 구합니다. 나머지 BAT 토큰은 구매자에게 즉 Bob에게 누락됩니다.

Bob sends: 1 ETH

Fee = 0.003 ETH

ETH pool = 10 + (1–0.003) = 10.997

BAT pool = 5000/10.997 = 454.67

Bob receives: 500–454.67 = 45.33 BAT

Bob이 거래를 시작할 때 이전에 획득한 유동성 공급자 수수료는 이제 유동성 풀에 다시 추가하게 됩니다. 이것은 유동성 공급자에게 거래 수수료를 보상으로 하여, 유동성 공급자가 유동풀에 자신의 ETH와 ERC20 토큰을 회수하면 보상을 받을 수 있습니다. 하지만, 유동성 공급자의 보상은 거래 계산 후에 다시 ETH 유동풀에 추가되어 거래 계약에서 거래를 진행할 때 마다 불변량이 점진적으로 증가함으로 유동성 공급자는 또한 수익을 목적으로 거래를 진행하는 경우가 있습니다. 거래가 완료되면

ETH pool = 10.997 + 0.003 = 11

BAT pool = 454.67

new invariant = 5,001.37

이번 거래에서, Bob의 적용 환율은 45.33 BAT / ETH입니다.

1 ETH in

45.33 BAT out

Rate = 45.33 BAT/ETH

2. 유니스왑 거래 : ERC20 ⇄ ERC20 거래

유니스왑에서 실행할 수 있는 다른 거래 유형 중 하나는 ERC20와 ERC20 간의 거래입니다. ETH는 모든 ERC20 토큰의 거래쌍으로 사용되므로 유니스왑은 ERC20 간의 거래로 ETH를 중개 자산으로 사용합니다. 예를 들어, 유니스왑을 사용하면 하나의 거래 계약에서 BAT를 ETH로 변환한 다음 다른 거래 계약에서 ETH를 OMG(ERC20 예시) 로 변환할 수 있습니다. 이것은 모두 같은 거래에서 진행됩니다. 앞에서 표시한 공식은 일반 시장과 매우 흡사합니다. 토큰을 많이 구매할 수록 거래 환율이 높아집니다.

유니스왑 수수료 구조:

유니스왑 프로토콜에서 실행되는 거래 수수료 구조는 다음과 같습니다.

●ETH/ERC20토큰 거래 : ETH로 지불 된 0.3% 수수료

●ERC20토큰/ETH토큰 거래 : ERC20 토큰으로 지불 된 0.3% 수수료

●ERC20/ERC20 거래 : ERC20 토큰으로 지불 된 0.3% 수수료 및 ETH로 지불 된 0.3% 수수료

유니스왑 토큰 거래 환율:

유니스왑의 토큰 거래 환율 공식(출처: https://ethresear.ch/t/improving-front-running-resistance-of-x-y-k-market-makers/1281) 으로 ERC20 토큰의 거래 환율을 계산하겠습니다.

x * y = k

k는 변하지 않는 상수

x와 y는 특정 거래쌍에서 사용 가능한 ETH 및 ERC20 토큰의 수량

유니스왑의 경우 ERC20와 ETH의 거래 계약 중 ETH 및 ERC20 토큰의 유동풀의 보유량으로 나타납니다. 이 공식을 사용하면 주어진 토큰의 환율은 항상 위 공식의 결과 곡선 특정 지점에 있습니다.

x * y = k 공식은 유니스왑 프로토콜의 구성 부분이며 비탈릭 부테린은 아래 그래프를 사용하여 다음과 같은 방식으로 설명하였습니다.

이 공식을 사용하여 유니스왑의 거래 계약을 예로 들면, 거래 계약에 x 개의 A 토큰과 y 개의 B 토큰이 있습니다. 이 계약에 x * y로 얻은 k의 값은 변하지 않습니다.

모든 개인은 x * y 곡선에서 마켓 메이커의 위치를 효과적으로 토큰을 매수 및 매도할 수 있습니다.

가로 축은 판매 된 A 토큰 수를 나타내고, 세로 축은 구매 한 B 토큰 수를 나타냅니다.

B 토큰이 ETH이고 A 토큰이 ERC20 토큰이라고 가정하면 x * y = k의 공식을 통해 해당 기능을 이해할 수 있습니다.

Alice가 대량의 A 토큰을 구매하기로 결정하면 A 토큰이 부족 해지고 ETH 수량이 증가됩니다. Alice의 구매 행동으로 인해 환율이 x * y = k 곡선을 다른 점으로 이동할 수 있습니다.

빨간색 점이 왼쪽으로 이동하면 A 토큰 구매 가격이 높아집니다.

유니스왑 거래 계약에서 ETH 및 A 토큰의 상대적 공급은 A 토큰과 ETH 간의 환율을 결정하는 A 토큰의 공급 및 수요 관계로 이해 할 수 있습니다.

앞서 언급했듯이, 거래 계약에 유동성의 첫 예금은 환율에 의해 의존하지 않습니다. 대신, 유동성 공급자가 ETH와 ERC20 토큰 간의 환율을 반영하는 ETH 및 ERC20 토큰을 예치하면 그 뒤에 환율이 달라질 수 있습니다. ETH와 ERC20 토큰의 가치가 너무 높거나 낮으면 차익 거래자는 시장이 정상이 될 때까지 격차를 빠르게 좁힐 것입니다.

유니스왑 및 차익거래:

유니스왑은 분산형 온체인 암호화폐 자산 거래소이지만 중앙화 거래소를 대체 할 수는 없습니다. 유니스왑의 거래 메커니즘이 왜곡되는 경우 이를 수정할 수 있는 메커니즘이 있어야합니다. 이 메커니즘은 차익 거래의 형태로 존재합니다.

차익 거래는 부동한 거래 시장에 존재하는 가격 차이를 이용하는 거래 전략입니다. 암호화폐의 경우 이 가격 차이는 암호화폐 거래소 간의 가격 차이에서 찾을 수 있습니다. 거래자가 차익 거래를 할 수 있는 기회를 찾은 경우 한 거래소에서 암호화폐를 구입한 다음 다른 암호화폐 거래소에서 판매합니다. 거래자는 유니스왑에서 나타날 수 있는 가격 차이를 다른 암호화폐 거래소에 존재하는 환율을 이용할 수 있기 때문에 차익 거래는 유니스왑의 기능에서는 필수적이라고 볼 수 있습니다.

유니스왑 및 가스비용:

유니스왑 프로토콜을 사용하여 디지털 자산을 거래 할 때 얻을 수 있는 장점 중 하나는 가스 효율이 매우 높다는 것입니다. 유니스왑에서 거래를 진행 할 때 발생하는 가스 비용은 대체 분산 형 거래소보다 상대적으로 저렴합니다. 아래 표를 참고하면 ETH/ERC20, ERC20/ETH, ERC20/ERC20은 Bancor, EtherDelta보다 훨씬 저렴하다는 것을 알 수 있습니다.

가스 효율은 유니스왑 프로토콜의 장점 중 하나이며 그 외에 장점은 다음 아래와 같습니다.

  • 유니스왑은 탈중앙화 되어 있으므로 제3자에게 의뢰하지 않습니다. 또한 유니스왑은 프로토콜에 사용하려는 모든 사람이 자유롭게 액세스 할 수 있습니다.
  • 유니스왑의 거래 비용은 다른 암호화폐 거래소에 비해 상대적으로 저렴합니다.
  • 유니스왑을 사용하면 모든 사용자가 주어진 ERC20 토큰에 대한 거래 계약을 작성할 수 있습니다.

하지만, 유니스왑에 아래와 같이 몇 가지 단점이 존재하고 있습니다.

유니스왑은 차익 거래를 의존하여 거래 환율과 시장의 유지를 실현시킵니다. 이것은 유니스왑이 환율 균형을 유지하기 위해 다른 암호화폐 거래소에 의존하고 있음을 의미합니다.

유니스왑은 여전히 실험 단계이며 암호화폐 자산거래 효율을 촉진하는 데 더 많은 개발이 필요합니다.

결론

결론적으로 유니스왑은 암호화폐 자산 거래의 효율을 높이는데 큰 도움이 있습니다. 하지만, 유니스왑은 아직 초기 단계이므로 앞으로 더 많은 개발 작업이 필요합니다.

--

--