Dex Project 시작
블록체인을 공부하면서 막연하게 DeFi에 관심이 갔다. 대학교에서 금융공학을 전공한 이력 때문인지 블록체인을 활용할 수 있는 프로젝트 중 거래소, 스왑, 디파이, Dex에 관심이 가는건 어쩌면 당연한 이치라고 생각한다.
Dex 프로젝트를 준비하면서 Klayswap 컨트랙트를 많이 참조하게 된다. Dex란 Decentralized Exchange를 의미하며 중앙화된 주체 없이 탈중앙화된 거래소라고 쉽게 이해할 수 있다.
이번 프로젝트에서는 크게 Front / Contract / Backend로 Role을 구분했고 나는 코인데몬 서버 1대와 API 서버 1대 해서 백엔드를 담당하게 되었다. Dex에서 API 콜을 보내는 경우가 많지 않고, 인증기능도 추가되지 않아 생각보다 간단해보였다.
Dex vs DeFi
프로젝트를 시작하기 전 먼저 개념에 대해 이해가 필요했다. Dex와 DeFi가 유사한 개념을 가지고 있지만 엄밀히 따지면 상하관계가 존재한다.
Dex
Dex는 CEX와 비교되는 개념이다. 중앙화된 주체가 거래소를 통제하고 트랜잭션을 관리하는 것이 아니라 불특정 다수가 거래소에 참여하여 유동성을 제공하고 이에 대한 보상을 지급하는 시스템을 의미한다.
Dex에서는 유동성을 공급하는 사용자에게 LP 토큰을 지급하게 되는데, LP 토큰 자체가 가치를 가지게 되면서 추가적인 Value 창출이 가능해진다.
Swap
Dex에서 추가로 제공하는 서비스는 Swap이다. ERC20이나 KIP7토큰은 FP(Fungible Token)으로 이더리움 내의 토큰과 상호 거래가 가능하다. 이 기능을 사용해 가치가 다른 토큰들을 교환하는 것을 스왑이라고 한다.
DeFi
반면 DeFi(Decentralized Finance)는 탈중앙화 금융으로 Dex나 Swap을 포괄하는 개념이다. 코인이나 토큰의 소유권을 증빙할 수 있는 코인 지갑(메타마스크, 카이카스, 클립 등)도 DeFi의 일종으로 볼 수 있다. 추가적으로 코인 대출이나 선물 거래등도 DeFi의 일종이다. Swap과 Dex를 아우르는 개념으로 이해할 수 있다.
Dex를 운영하는 방법
Dex에서는 LP(유동성 풀)을 제공한다. Single Pool과 Pair Pool로 구분할 수 있는데, 싱글 풀은 말 그대로 1개의 토큰만 가지고 유동성을 공급한다. 페어 풀은 2개의 페어를 이루고 있는 토큰을 가지고 유동성을 공급할 수 있다.
LP에 유동성을 공급한 사용자에게는 플랫폼 토큰(PTN)을 지급하게 된다. 1블록이 생성될 때 마다 일정량의 플랫폼 토큰이 생성되고, 유동성을 공급한 사용자의 예치액에 비례해서 PTN이 지급된다.
스왑을 할 경우 거래금액의 0.3%가 LP에 유동성을 공급한 사용자들에게 수수료로 지급되게 된다. 이번 프로젝트의 핵심은 스왑과 유동성 제공 시 발행되는 플랫폼 토큰을 어떻게 활용할 수 있을까가 되었다.
비영구적 손실과 슬리피지(Slippage)
비영구적 손실
LP에 유동성을 제공한 사용자들은 의도치 않게 리스크에 노출되는데, 예치한 자산의 가격이 변화하여 금전적으로 손실을 보는 것을 비영구적 손실이라고 한다. 풀에 토큰을 예치한 사용자 입장에서는 재빠른 대처가 불가능 하므로 자산 가치의 변동이 심한 토큰일 수록 비영구적 손실은 커져간다.
비영구적 손실을 만회하기 위해 Dex에서는 거래 수수료를 지급하는 방식으로 손실을 만회하게 된다. 즉, 특정 풀에서 거래량이 많이 발생할 수록 비영구적 손실은 커져가도 수수료로 일정부분 손실을 메꿔넣을 수 있게 된다.
슬리피지(Slippage)
슬리피지란 주문한 가격과 실제 체결된 가격의 괴리가 발생하는 현상을 의미한다. 실시간으로 가격 데이터를 가져와 보여주지 않는 이상, 가격 변동이 심할 때 슬리피지가 발생한다.
Dex를 구현하면서 블록체인의 노드를 통해 받아오는 데이터를 신뢰할 수 있으면서도 빠르게 사용자에게 렌더링 해주는 작업이 필요했다. 이를 위해 코인 데몬(Coin Daemon)을 돌리면서 주기적으로 토큰 가격을 업데이트 하는 서버를 하나 더 설치하기로 한다.
프로젝트 workflow
이번에 새로 진행하게 된 Dex 프로젝트는 크게 3가지 기능을 가지고 있다.
1. Swap 기능 : 사용자는 2개의 토큰을 유동성 공급량에 따라 토큰 교환을 할 수 있다. 이 때 가격은 AMM(Autonomous Market Maker)에 의해 결정된다.
예를 들어 Klay와 TempToken을 스왑한다고 하면 아래 공식이 성립한다.
Klay * TempToken = 1000
만약 Kaly 공급량 대비 TempToken 유동성 공급량이 많아지면 그만큼 1 TempToken으로 얻을 수 있는 Klay의 양은 줄어들게 된다. 이 방식이 AMM이다.
2. Pool 예치 기능
사용자는 생성된 LP(Liquidity Pool)에 LP 토큰을 예치할 수 있다. 싱글 풀에 개별적인 KIP7 토크이나 ERC20 토큰을 예치할 수도 있고, 유동성 공급을 통해 얻은 LP 토큰을 페어풀에 예치할 수도 있다. 예치 하는 경우 보상으로 플랫폼 토큰이 지급된다.
3. NFT 민팅 & 거래 기능
사용자는 지급받은 PTN을 가지고 NFT를 민팅하거나 거래할 수 있다. 사실 PTN을 어떻게 활용할 수 있을지 팀원들과 고민한 끝에, 2가지 모델로 의견을 조율할 수 있었다.
- NFT 마켓플레이스 구현 : 가장 쉬우면서도 대중화된 방법이다.
- Loan 기능 : 우리에게는 다소 도전적인 목표지만 담보 토큰 가치 한도 내에서 대출해주는 서비스를 기획했다.
Project workplow
'Blockchain' 카테고리의 다른 글
2023년 블록체인에 집중해야 하는 이유 (3) | 2022.12.19 |
---|---|
Solidity virtual function(가상 함수)란? (0) | 2022.11.29 |
[블록체인 만들기 #6] P2P 네트워크 (0) | 2022.10.12 |
[블록체인 만들기 #5] PoW 합의 알고리즘 (1) | 2022.10.11 |
[블록체인 만들기 #4] Chain 만들기 (0) | 2022.10.10 |
댓글