Uniswap 에 대해 한달간 공부하기에 앞서 선행학습을 진행하려고 한다.
Uniswap 이란?
Uniswap 은 탈중앙화 거래소(DEX)와 자동화된 마켓메이커(Automated Market Maker, AMM) 패러다임을 대표하는 핵심 프로토콜이다. 또한, 가장 긍정적인 점은 오픈소스로 나와있기 때문에 커스텀이 용이하다.
전통적인 거래소는 중개자가 거래자의 거래를 연결해주지만, Uniswap 은 AMM 모델을 사용한다.
Uniswap 의 작동 원리
유동성 공급자(LP) 가 동등한 가치의 두 ERC-20 토큰 쌍을 스마트 컨트랙트에 예치에 유동성 풀을 구성한다.
토큰간의 가격을 결정할 때에는 x * y = k 수식을 따른다. x, y 는 거래하고자 하는 두 토큰의 밸런스 이고, k 는 고정된 상수 값이다.
예를 들어, 사용자가 USDT로 ETH를 구매하려고 하면, 풀에서 ETH의 수량은 줄어들고 USDT의 수량은 늘어나게 된다. 이때 가 유지되도록 ETH와 USDT의 비율이 자동으로 조정되어 가격이 결정된다. 즉, 거래가 일어날수록 풀 내 두 토큰의 양이 변하며, 그에 따라 교환 비율(가격)이 변동하게 된다.
사용자가 토큰을 보내고 다른 종류의 토큰을 받는 스왑절차는 스마트 컨트랙트에 의해 자동으로 처리된다.
스왑시 스마트 컨트랙트는 현재 풀의 잔액을 참고하여 가격과 교환 비율을 계산하고 거래를 실행한다.
토큰의 유동성 풀을 만들기위해서는 유동성 공급자가 필요하다. 유동성을 공급해준 대가로 스왑 거래에는 0.3%의 수수료가 붙으며 분배가 된다.
Uniswap 의 컨트랙트 구조
v2 에대해 학습하기 위해 v2 기반으로 설명해 보겠다.
스마트 컨트랙트는 두개의 모듈형으로 설계가 되어있다.
- Core 컨트랙트
- UniswapV2Factory
- 각 토큰 쌍에 대해 새로운 UniswapV2Pair를 생성한다.
- 동일한 페어가 존재하지 않도록 관리, 생성된 페어의 주소를 인덱싱한다.
- UniswapV2Pair
- 각 토큰 쌍의 유동성 풀을 관리, 실제로 스왑, 유동성 공급/해제, 잔고 추적 등의 주요 기능이 구현된다.
- 유동성 공급자에게 LP 토큰을 발행하기 위해 ERC20 을 상속한다.
- UniswapV2ERC20
- 유동성 공급자에게 발행하는 LP 토큰의 표준 구현 로직이 별도로 분리되어 있다.
- UniswapV2Factory
- Periphery 컨트랙트
- UniswapV2Router
- 사용자가 Core 에 직접 접근하지 않아도 쉽게 유동성 추가/제거, 스왑 등 복합 작업을 할 수 있도록 다양한 편의 함수를 제공한다.
- 여러 페어를 경유하는 거래까지 지원, 실제로 이용자가 가장 많이 사용하는 진입점이다.
- Library
- 가격 계산, 경로 탐색 등 반복되는 연산들을 별도 라이브러리로 분리한다.
- UniswapV2Router
https://github.com/Uniswap/v2-core
GitHub - Uniswap/v2-core: 🦄 🦄 Core smart contracts of Uniswap V2
🦄 🦄 Core smart contracts of Uniswap V2. Contribute to Uniswap/v2-core development by creating an account on GitHub.
github.com
https://github.com/Uniswap/v2-periphery
GitHub - Uniswap/v2-periphery: 🎚 Peripheral smart contracts for interacting with Uniswap V2
🎚 Peripheral smart contracts for interacting with Uniswap V2 - Uniswap/v2-periphery
github.com
'BlockChain' 카테고리의 다른 글
| [Blockchain] Trustless Manifesto (0) | 2025.11.13 |
|---|---|
| [Blockchain] EOA, CA permit (0) | 2025.10.05 |
| [Hell-Month] 1A (0) | 2025.08.28 |
| [Web3] 용어 모음집 (0) | 2025.01.26 |