Router
Pair
Factory
FeeTo
토큰스왑 요청시 Router에 요청이 들어오고
적절한 스왑 경로를 통해서 토큰 교환이 진행이된다.
기존에 유동성 풀이 존재하지 않는 스왑을 요청하면 Factory를 통해서 LP컨트랙트를 생성하게되고,
유동성 풀이 기존에 존재한다면 Pair를 통해 스왑이 진행된다.
- 두 토큰 쌍에 대한 유동성 관리
- LP토큰을 통해 유동성 풀의 지분 증명
- 유동성에 따라 토큰 교환
- 스오바 수수료 수취
- 유동성 풀에서 필요한 만큼 토큰을 먼저 가져온뒤, 한 트랜잭션 내에서 다시 상환할 수 있는 기능
( 아비트라지 같은 차익 거래에 많이 사용 된다. 일반 유저는 잘 사용하지 않는 기능 )
- 시간 가중 편균 가격(TWAP, Time-Weighted Average Price) 계산을 위한 수치 제공
유저들이 가장 많이 인터랙션하는 컨트랙트
- 토큰 교환/ 유동성 공급 등을 쉽게 할 수 있도록 도와주는 역할
- 유동성 공급 / 해제
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
...Code
}
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) public override ensure(deadline) returns (uint amountA, uint amountB) {
...Code
}
addLiquidity
removeLiquidity
swapExactTokensForTokens
특정 토큰을 100개를 줄테니 그 만큼 다른 토큰으로 교환할 때
swapTikensForExactTokens
B토큰을 얻고 싶은데 A토큰이 몇개 필요하는지 모르고 B토큰을 100개를 받으려고 할 때.
path
getAmountOut
getAmountIn
getAmountsOut(In)
초기 UniSwap은 거버넌스 토큰이 없이 운영을 해왔는데,
이후 UniSwap 기반 다른 Dex들은 해당 프로토콜 만의 자체 토큰인 거버넌스 토큰을 제공하면서 출시했다.
유저들은 이런 거버넌스 토큰을 추가 수익으로 얻을 수 있기 때문에 많이 넘어가기도 했다.
DEX들을 이런 거버넌스 토큰을 분배하는 마스터 쉐프라는 컨트랙트를 추가로 두었다.
위 사진은 BSC Network의 대표적인 덱스인 PanCake의 구조이다.
유저들이 유동성 공급을 하고 받은 LP토큰을 마스터 쉐프에 예치를 하게 되면
마스터 쉐프는 유저가 예치한 LP토큰의 슈량과 예치한 기간 등을 종합적으로 계산을 통해서
거버넌스 토큰을 유저에게 발행해주게 된다. 이때 마스터 쉐프에는 pull Info에서 각각 LP별로
거버넌스 토큰을 얼마나 분배를 해주는지, LP토큰의 여러가지 정보 등을 기록한다.