TIL 46 - DeFi Project

프동프동·2023년 2월 11일
0

TIL

목록 보기
46/46
post-thumbnail

Token To Token Swap 구현

시나리오

1. 스왑을 도와줄 Factory 컨트랙트(Pool들을 관리한다)

  1. Factory 배포

2. 스왑을 위한 2개의 ERC20 토큰 컨트랙트 생성

  1. A Token 컨트랙트 배포(100개 토큰)
  2. B Token 컨트랙트 배포(100개 토큰)

3. 각각의 Pool 구성

  1. A Token - Liquidity 컨트랙트 배포
    1. 1번에서 배포한 Factory 컨트랙트의 createPool(2번에서 배포한 A Token 컨트랙트) 함수를 이용해 배포한다.
  2. B Token - Liquidity 컨트랙트 배포
    1. 1번에서 배포한 Factory 컨트랙트의 createPool(2번에서 배포한 B Token 컨트랙트) 함수를 이용해 배포한다.

4. 3번에서 배포한 Liquidity 컨트랙트 가져오기

  1. Factory 컨트랙트의 getLiquidity(A 토큰 Address)를 이용해 A토큰과 페어로 생성된 Liquidity 컨트랙트 주소를 가져온다
  2. Factory 컨트랙트의 getLiquidity(A 토큰 Address)를 이용해 B토큰과 페어로 생성된 Liquidity 컨트랙트 주소를 가져온다

5. 가져온 Liquidity 컨트랙트 주소를 사용해 해당 컨트랙트를 불러온다.

6. Liquidity Pool이 토큰을 가져갈 수 있도록 Approve 진행

  1. A Token 컨트랙트에서 A/Liquidity가 토큰을 가져갈 수 있도록 Approve 진행(50개)
  2. B Token 컨트랙트에서 B/Liquidity가 토큰을 가져갈 수 있도록 Approve 진행(50개)

7. 각 풀에 유동성 공급

  • A Pool = 30토큰 /30이더 → 10개를 사용자에게서 가져온다. BPool에 보낼때는 7.5개
  • B Polol = 40토큰 /10이더

8. 임의 풀에서 Token To Token 진행

  • 최소 7.5개..

  • 10개

  • y : 30토큰

  • x : 30이더

  • 30 * 10 = 300

  • 30 + 10 = 40

Token To Coin

시나리오

1. Factory 컨트랙트 배포

2. WEMEX Token 컨트랙트 배포

3. Factory 컨트랙트를 통해 WEMEX Pool 생성

4. WEMEX Pool에 유동성 공급(50토큰/30이더)

  • WEMEX 토큰 컨트랙트 - Approve()
  • WEMEX Pool 컨트랙트 - addLiquidity()

5. 10개 토큰 스왑 요청

  • WEMEX 토큰 컨트랙트 - Approve()

tokenAmount : 10개
x : 50토큰
y : 30이더

받아야할 이더 = 30이더 x 10 / 50 토큰 +10

= 5개


Coin To Token

시나리오

1. Factory 컨트랙트 배포

2. WEMEX Token 컨트랙트 배포

3. Factory 컨트랙트를 통해 WEMEX Pool 생성

4.WEMEX Pool에 유동성 공급(50토큰/30이더)

  • WEMEX 토큰 컨트랙트 - Approve()
  • WEMEX Pool 컨트랙트 - addLiquidity()

5. 10개 이더 스왑 요청하기

  • WEMEX 토큰 컨트랙트 - Approve()

coinAmount : 10개
x : 30이더
y : 50토큰

받아야할 토큰 = 50 * 10 / 30 + 10

12.5개

블록 탐색기, 모니터, 트레킹등 서비스에서 DB를 사용하여 블록 및 트랜잭션 정보를 저장하는 이유

RPC 병목 현상 방지

  1. 요구사항 : 사용자가 단순히 Block의 Height를 알고 싶어한다
  2. 서버가 DB에 블록의 정보를 가지고 있지 않으면 사용자에게 요청을 받았을 때마다 매번 블록체인 노드에 쿼리를 날려야한다.
  3. 단순 1회인 경우 상관없지만 많은 사용자가 동시에 요청할 경우 일시적으로 큐에 많은 요청이 전달되어 노드에 병목 현상이 나타난다
  4. 이는 노드의 과부하 발생 → 늦은 처리량

힘들었던 점

  1. emit, event를 잘쓰지 못하여 테스트하는데 어려웠다.
    → 날 잡아 정리해야겠다.
  2. Interface로 구현한 함수 사용
  3. 시나리오를 완벽히 이해하지 못한채로 테스트를 진행하다 보니 계속된 에러 발생
  4. 짧은 시간인 일주일간 디파이 프로젝트를 진행하다보니 uniswap v1을 레퍼런스로 코드를 작성하였다. 최대한 단순한 버전이라 생각하였음
    1. 해당 과정에서 솔리디티 코드에 대한 이해
    2. 컨트랙트간 상호 작용하는 법에 대한 이해
    3. js를 통한 테스트 코드 작성으로 web3 패키지도 뜯어볼 수 있었다
    4. 커스터마이징하며 솔리디티 언어 자체에 대한 이해도 생긴것 같다.
      • 자신감이 붙음

Github source

profile
좋은 개발자가 되고싶은

0개의 댓글