Skip to content

codestates/BEB-05-JDEX

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

JongDex

Contents

Introduction

ν”„λ‘œμ νŠΈ 섀계 κ°œμš” 및 μš©μ–΄ 정리

Dex

DexλŠ” μΌμ •ν•œ μƒμˆ˜κ³±μœΌλ‘œ μž‘λ™λ˜κ³ , 슀마트 μ»¨νŠΈλž™νŠΈλ‘œ κ΅¬ν˜„λ˜λŠ” μžλ™ν™”λœ μœ λ™μ„± ν”„λ‘œν† μ½œ. μ‚¬μš©μž μ •μ˜ κ°€λŠ₯ν•œ μ‹œμŠ€ν…œμœΌλ‘œ μ„€κ³„λ˜μ—ˆμœΌλ―€λ‘œ μ •μ˜λœ 토큰 이코노미가 μ—†κ³ , Dex의 각 μΈμŠ€ν„΄μŠ€λŠ” κ³ μœ ν•œ ν† ν¬λ…Έλ―ΉμŠ€λ₯Ό μ •μ˜.

DEX platform

DEX platform은 λ‹€λ₯Έ Dex protocol, farmingκ³Ό staking 같은 λ‹€λ₯Έ 슀마트 μ»¨νŠΈλž™νŠΈμ™€ κ²°ν•©ν•˜μ—¬ μ‚¬μš©λ©λ‹ˆλ‹€.

Constant Product Formula

Dexμ—μ„œ μ‚¬μš©ν•˜λŠ” μžλ™ν™”λœ μ‹œμž₯ ν˜•μ„± μ•Œκ³ λ¦¬μ¦˜ : x * y = k.

Invariant

constant product formula k 값은 λΆˆλ³€.

Token Types

Dex protocol은 슀마트 μ»¨νŠΈλž™νŠΈ λ‚΄μ—μ„œ ERC20와 KIP7 토큰 ν‘œμ€€κ³Ό ν•¨κ»˜ μž‘λ™ν•©λ‹ˆλ‹€.

Factory

FactoryλŠ” KLAY/KIP7, KIP7/KIP7 νŽ˜μ–΄μ— λŒ€ν•œ κ³ μœ ν•œ 슀마트 μ»¨νŠΈλž™νŠΈλ₯Ό λ°°ν¬ν•˜λŠ” 슀마트 μ»¨νŠΈλž™νŠΈ. DexFactory contract μ°Έμ‘°.

Pair

PairλŠ” KLAY/KIP7, KIP7/KIP7 λ“± λ‘κ°œμ˜ 토큰 νŽ˜μ–΄κ°„μ— 거래λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 슀마트 μ»¨νŠΈλž™νŠΈ. DexPair contract μ°Έμ‘°.

Token Swap

Token swap은 KIP7 토큰을 λ‹€λ₯Έ 토큰과 κ΅ν™˜ν•˜λŠ” ν–‰μœ„ μž…λ‹ˆλ‹€. 각 토큰 μŒμ€ liquidity pool에 μ˜ν•΄ κ΅¬λ™λ©λ‹ˆλ‹€.

The DexPair은 low-level swapκΈ°λŠ₯을 μ •μ˜ν•˜κ³ , DexRouter contractλŠ” μŠ€μ™‘ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

Liquidity Pool

Liquidity pool은 두 개의 토큰을 λ³΄μœ ν•˜κ³  depositκ³Ό withdraw에 λŒ€ν•œ κ·œμΉ™μ„ μ‹œν–‰ν•©λ‹ˆλ‹€. Farming and Staking μ°Έμ‘°.

Liquidity Provider

A liquidity providerλŠ” liquidity pool에 ν•΄λ‹Ή 토큰 μŒμ„ μ˜ˆμΉ˜ν•˜κ³  κ·Έ λŒ€κ°€λ‘œ pool tokens을 λ°›λŠ” μ‚¬λžŒ. 가격 μœ„ν—˜μ„ κ°μˆ˜ν•˜κ³  수수료λ₯Ό λ³΄μƒμœΌλ‘œ λ°›μŠ΅λ‹ˆλ‹€.

Liquidity Provider Fee

토큰 κ΅ν™˜μ— λŒ€ν•œ Liquidity Provider FeeλŠ” 0.3%이며, μ΄λŠ” μœ λ™μ„± μ€€λΉ„κΈˆμ— λŒ€ν•œ 기여도에 λΉ„λ‘€ν•˜μ—¬ μœ λ™μ„± κ³΅κΈ‰μžμ— μ˜ν•΄ λΆ„ν• λ©λ‹ˆλ‹€.

Pool Tokens

μœ λ™μ„±μ΄ 풀에 예치되면 μœ λ™μ„± 토큰(LP 토큰)으둜 μ•Œλ €μ§„ κ³ μœ ν•œ 토큰이 λ°œν–‰λ˜μ–΄ κ³΅κΈ‰μžμ˜ μ£Όμ†Œλ‘œ μ „μ†‘λ©λ‹ˆλ‹€. 이 토큰은 풀에 λŒ€ν•œ 주어진 μœ λ™μ„± κ³΅κΈ‰μžμ˜ 기여도λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

κ³΅κΈ‰μžκ°€ λ°›λŠ” μœ λ™μ„± ν† ν°μ˜ μˆ˜λŠ” 제곡된 ν’€ μœ λ™μ„±μ˜ λΉ„μœ¨μ— 따라 κ²°μ •λ©λ‹ˆλ‹€. mint μ°Έμ‘°

Smart Contracts

JongDexλŠ” Core contracts와 Periphery contracts으둜 κ΅¬μ„±λœ μ‹œμŠ€ν…œμΈ Uniswap V2 슀마트 μ»¨νŠΈλž™νŠΈ μ‹œμŠ€ν…œμ„ μ‚¬μš©.

Deployment Order

Smart contracts are deployed in the following order:

  1. WKLAY (needed for testnet)
  2. Dex Factory
  3. Dex Router
  4. Dex Token(Platform Token)
  5. Farming
  6. Staking Factory

Core

DexFactory

Factory (DexFactory)μ»¨νŠΈλž™νŠΈλŠ” 아직 λ°°ν¬λ˜μ§€ μ•Šμ€ KIP7/KIP7, KLAY/KIP7 νŽ˜μ–΄ μŒμ— κ³ μœ ν•œ 슀마트 μ»¨νŠΈλž™νŠΈλ₯Ό λ°°ν¬ν•˜λŠ” 슀마트 μ»¨νŠΈλž™νŠΈ.

pair쌍이 배포된 μˆœμ„œλŠ” allPairsλ₯Ό 톡해 μ•‘μ„ΈμŠ€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

factoryμ»¨νŠΈλž™νŠΈλŠ” λ˜ν•œ ν”„λ‘œν† μ½œ μ „μ²΄μ˜ fee μˆ˜μ‹ μžλ₯Ό κ΄€λ¦¬ν•˜λŠ”λ°, feeToSetterλ₯Ό 톡해 fee μˆ˜μ‹ μžλ₯Ό μ •μ˜ν•˜κ³  λ³€κ²½ν•  수 μžˆλŠ” addressλ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Factory Contract: Functions
Function Description
createPair 두 토큰 μŒμ— λŒ€ν•΄ pairκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 경우 pairλ₯Ό λ§Œλ“­λ‹ˆλ‹€.
getPair 두 토큰 쌍이 μ‘΄μž¬ν•˜λŠ” 경우 κ·Έ μ£Όμ†Œλ₯Ό λ¦¬ν„΄ν•©λ‹ˆλ‹€.
setFeeToSetter ν”„λ‘œν† μ½œμ˜ fee μˆ˜μ‹ μžμ˜ addressλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.
setFeeTo μ„€μ •λœ μ£Όμ†Œκ°€ ν”„λ‘œν† μ½œ μ „μ²΄μ˜ fee μˆ˜μ‹ μžλ₯Ό μ œμ–΄ν•˜λ„λ‘ ν—ˆμš©ν•©λ‹ˆλ‹€.
allPairsLength μ§€κΈˆκΉŒμ§€ μƒμ„±λœ λͺ¨λ“  토큰 pair의 수λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€

DexPair

Pair (DexPair) λŠ” factory μ»¨νŠΈλž™νŠΈμ— μ˜ν•΄ 배포되고, 2개의 KIP7 토큰 κ°„ 거래λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.

각 토큰 pair의 슀마트 μ»¨νŠΈλž™νŠΈλŠ” 2개의 KIP7 ν† ν°μœΌλ‘œ κ΅¬μ„±λœ liquidity pool, μœ λ™μ„± 풀을 κ΄€λ¦¬ν•˜κ³  ν•΄λ‹Ή 토큰 pair의 μ΅œμ†Œ μœ λ™μ„±μ€ MINIMUM_LIQUIDITYλ₯Ό 톡해 μ •μ˜λ¨.

pair μ»¨νŠΈλž™νŠΈλŠ” λ‹€μŒκ³Ό 같은 λ³€μˆ˜λ₯Ό κ°–λŠ”λ‹€. 두 ν† ν°μ˜ reserves, μ΅œμ‹ λΈ”λ‘μ˜ timestamp, 두 ν† ν°μ˜ μ΅œμ‹  가격, 그리고 두 reserves둜 κ³„μ‚°λœ kκ°’.

Pair Contract: Events
  • Mint eventλŠ” lp토큰이 μƒμ„±λ˜λ©΄ sender address와 토큰 pair의 각 token amountsκ°€ λ‹΄κΈ΄ 정보와 ν•¨κ»˜ 이벀트 λ°œμƒ.
  • Burn eventλŠ” lp토큰이 μ†Œκ°λ  λ•Œ, sender address와 recipient address, token amountsκ°€ λ‹΄κΈ΄ 정보와 ν•¨κ»˜ 이벀트 λ°œμƒ.
  • Swap eventλŠ” swap이 λ°œμƒν–ˆμ„ λ•Œ, sender address와 recipient address, swap amounts 및 received amountsκ°€ λ‹΄κΈ΄ 정보와 ν•¨κ»˜ 이벀트 λ°œμƒ
  • Sync eventλŠ” mint, burn, swap의 결과둜 reserveκ°€ μ—…λ°μ΄νŠΈ 되면 reserve 정보와 ν•¨κ»˜ 이벀트 λ°œμƒ
Pair Contract: Functions
Function Description
initialize 두 토큰 addressκ°€ 주어지면 factory contractλŠ” pair contractλ₯Ό initialize함. pair contractκ°€ 배포될 λ•Œ 호좜됨.
getReserves 토큰 pair에 λŒ€ν•œ μƒν˜Έ μž‘μš©μ΄ ν¬ν•¨λœ μ΅œμ‹  λΈ”λ‘μ˜ νƒ€μž„μŠ€νƒ¬ν”„μ™€ ν•¨κ»˜ 두 ν† ν°μ˜ λ³΄μœ λŸ‰μ„ λ°˜ν™˜
mint lp 토큰 생성
burn lp 토큰 μ†Œκ°
swap 토큰 Swap
mint

mint function은DexPair μ»¨νŠΈλž™νŠΈλ₯Ό 톡해 μœ λ™μ„±μ΄ μΆ”κ°€λ λ•Œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜.

λ§Œμ•½ 풀이 μƒˆλ‘œ μƒμ„±λ˜μ—ˆκ³ , lp토큰이 아직 μ—†λŠ” 경우 liquidityλŠ” 두 ν† ν°μ˜ λ°œν–‰λŸ‰μ˜ κ³±μ—μ„œ μƒμˆ˜ 값을 λΉΌμ„œ κ³„μ‚°λ©λ‹ˆλ‹€.

sqrt(amount0 * amount1) - MINIMUM_LIQUIDITY

ν’€μ˜ 첫번째 MINIMUM_LIQUIDITYλŠ” 영ꡬ적으둜 lock.

ν’€μ˜ lp토큰 총 κ³΅κΈ‰λŸ‰μ΄ 0이 μ•„λ‹Œ 경우의 μœ λ™μ„±μ€ λ‹€μŒκ³Ό 같이 κ³„μ‚°λ©λ‹ˆλ‹€.

  1. 각 ν† ν°μ˜ λ°œν–‰λŸ‰μ„ ν’€μ˜ lp토큰 수둜 κ³±ν•˜κ³  이 ν† ν°μ˜ λ³΄μœ λŸ‰μœΌλ‘œ λ‚˜λˆ•λ‹ˆλ‹€.

  2. λ‹€μŒ 두 κ°’ 쀑 μ΅œμ†Œκ°’μ„ μ„ νƒν•©λ‹ˆλ‹€.

    min((amount0 * _totalSupply) / _reserve0, (amount1 * _totalSupply) / _reserve1)
    
burn

burn function은 DexPair contractλ₯Ό 톡해 μœ λ™μ„±μ΄ 제거될 λ•Œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜

pair의 각 토큰에 λŒ€ν•΄ μ†Œκ°ν•  ν† ν°μ˜ 양은 토큰 μž”μ•‘κ³Ό 토큰 pair의 μœ λ™μ„±μ„ κ³±ν•œ λ‹€μŒ, 풀에 μžˆλŠ” lp 토큰 수둜 λ‚˜λˆ•λ‹ˆλ‹€.

swap

swap function은DexPair contractλ₯Ό 톡해 토큰을 κ΅ν™˜ν•  λ•Œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

토큰이 호좜 되기 전에 pair둜 μ „μ†‘λ˜μ–΄μ•Ό ν•˜λŠ” λ°©μ‹μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

Periphery

DexRouter

DexRouter contractλŠ” μœ λ™μ„±μ„ μΆ”κ°€ 및 μ œκ±°ν•˜κ³  토큰을 κ΅ν™˜ν•˜λŠ” κΈ°λŠ₯을 μ •μ˜.

Adding Liquidity

Functions for adding liquidity for a pair of tokens:

  • addLiquidity function은 kip7/kip7 풀에 μœ λ™μ„±μ„ κ³΅κΈ‰ν•˜λŠ” ν•¨μˆ˜
  • addLiquidityKLAY function은 klay/kip7 풀에 μœ λ™μ„±μ„ κ³΅κΈ‰ν•˜λŠ” ν•¨μˆ˜

λ§Œμ•½ pairκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 경우 Factory contractλ₯Ό ν˜ΈμΆœν•΄ μ›ν•˜λŠ” μ–‘μ˜ ν† ν°μœΌλ‘œ μƒˆ pairλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

이 ν•¨μˆ˜λŠ” ν’€λ‘œ μ „μ†‘λœ ν† ν°μ˜ μ–‘κ³Ό mintλ₯Ό 톡해 λ°œν–‰λœ lpν† ν°μ˜ 양을 returnν•©λ‹ˆλ‹€.

Removing Liquidity

There are multiple functions for removing liquidity for a pair of tokens:

  • removeLiquidity function은 kip7/kip7 풀에 μœ λ™μ„±μ„ μ œκ±°ν•˜λŠ” ν•¨μˆ˜
  • removeLiquidityKLAY function은 klay/kip7 풀에 μœ λ™μ„±μ„ κ³΅κΈ‰ν•˜λŠ” ν•¨μˆ˜

이 ν•¨μˆ˜λŠ” ν’€μ—μ„œ 받은 ν† ν°μ˜ 양을 returnν•©λ‹ˆλ‹€.

Swapping tokens

There are multiple functions for swapping tokens for different kinds of swap operations.

Functions for receiving tokens:

  • swapTokensForExactTokens κ°€λŠ₯ν•œ 적은 amounts의 토큰 μž…λ ₯값에 λŒ€ν•΄ μ •ν™•ν•œ μ–‘μ˜ 좜λ ₯λ˜λŠ” ν† ν°μ˜ amounts둜 κ΅ν™˜
  • swapTokensForExactKLAY κ°€λŠ₯ν•œ 적은 amounts의 토큰 μž…λ ₯값에 λŒ€ν•΄ μ •ν™•ν•œ μ–‘μ˜ 좜λ ₯λ˜λŠ” klay의 amounts둜 κ΅ν™˜
  • swapKLAYForExactTokens κ°€λŠ₯ν•œ 적은 amounts의 klay에 λŒ€ν•΄ μ •ν™•ν•œ amounts의 ν† ν°μœΌλ‘œ κ΅ν™˜.

Functions for sending tokens:

  • swapExactTokensForTokens μ •ν™•ν•œ amounts의 토큰 μž…λ ₯값을 κ°€λŠ₯ν•œ λ§Žμ€ amounts의 ν† ν°μœΌλ‘œ κ΅ν™˜
  • swapExactKLAYForTokens μ •ν™•ν•œ amounts의 klay μž…λ ₯값을 κ°€λŠ₯ν•œ λ§Žμ€ amounts의 ν† ν°μœΌλ‘œ κ΅ν™˜
  • swapExactTokensForKLAY μ •ν™•ν•œ amounts의 토큰 μž…λ ₯값을 κ°€λŠ₯ν•œ λ§Žμ€ amounts의 klay둜 κ΅ν™˜

μŠ€μ™‘ κΈ°λŠ₯에 λŒ€ν•œ μž…λ ₯ νŒŒλΌλ―Έν„°λŠ” pathμž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 각 연속 μ£Όμ†Œ pair에 λŒ€ν•΄ pair contractκ°€ μΆ©λΆ„ν•œ μœ λ™μ„±μ„ 가지고 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. 첫 번째 μš”μ†ŒλŠ” μž…λ ₯ 토큰이고 λ§ˆμ§€λ§‰ μš”μ†ŒλŠ” 좜λ ₯ ν† ν°μž…λ‹ˆλ‹€. μž…λ ₯ 및 좜λ ₯ 토큰에 λŒ€ν•œ 쌍 계약이 μ—†λŠ” 경우 μŠ€μ™‘μ„ μˆ˜ν–‰ν•  쀑간 μŒμ„ μ •μ˜ν•©λ‹ˆλ‹€.

DexLibrary

Library Contract: Functions
Function Description
sortTokens 토큰 pair에 λŒ€ν•΄ μ •λ ¬λœ 토큰 μ£Όμ†Œλ₯Ό return
pairFor μ™ΈλΆ€ 호좜 없이 pair에 λŒ€ν•œ μ£Όμ†Œλ₯Ό return
getReserves pair에 λŒ€ν•œ reserveλ₯Ό κ°€μ Έμ˜€κ³  μ •λ ¬ν•©λ‹ˆλ‹€.
quote ν•˜λ‚˜μ˜ amount와 reserveA, reserveBκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ λ‹€λ₯Έ μžμ‚°κ³Ό λ™μΌν•œ κΈˆμ•‘μ„ λ°˜ν™˜. amountB = amountA * reserveB / reserveA
getAmountOut Input amountκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ μ΅œλŒ€ output amountλ₯Ό κ³„μ‚°ν•΄μ€λ‹ˆλ‹€ .
getAmountIn Output amountκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ ν•„μš”ν•œ input amountλ₯Ό κ³„μ‚°ν•΄μ€λ‹ˆλ‹€.
getAmountsOut μ—¬λŸ¬ pair에 λŒ€ν•΄ μ—°μ‡„μ μœΌλ‘œ getAmountout을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.
getAmountsIn μ—¬λŸ¬ pair에 λŒ€ν•΄ μ—°μ‡„μ μœΌλ‘œ getAmountin을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.
getAmountOut

amountInκ³Ό pair reserves(reserveIn, reserveOut)이 주어지면 pairμ—μ„œ μ΅œλŒ€ output을 returnν•©λ‹ˆλ‹€.

  1. 수수료 계산 ν›„ μž…λ ₯ κΈˆμ•‘μ„ μ°ΎμŠ΅λ‹ˆλ‹€. μˆ˜μˆ˜λ£ŒλŠ” 0.3%μž…λ‹ˆλ‹€. amountInWithFee은 μž…λ ₯ κΈˆμ•‘μ— 997을 κ³±ν•˜μ—¬ 계산할 수 μžˆμŠ΅λ‹ˆλ‹€.

    amountIn * 997
    
  2. amountInWithFee 와 λ‹€λ₯Έ ν† ν°μ˜ reserveλ₯Ό 계산

    amountInWithFee * reserveOut
    
  3. amountInWithFee와 μž…λ ₯ μžμ‚° reserve의 합계에 1000을 κ³±ν•œ 값을 κ΅¬ν•©λ‹ˆλ‹€.

    reserveIn * 1000 + amountInWithFee
    
  4. 좜λ ₯λŸ‰μ„ 찾으렀면 2λ‹¨κ³„μ—μ„œ κ³„μ‚°ν•œ 값을 3λ‹¨κ³„μ—μ„œ κ³„μ‚°ν•œ κ°’μœΌλ‘œ λ‚˜λˆ•λ‹ˆλ‹€.

    (amountInWithFee * reserveOut) / (reserveIn * 1000 + amountInWithFee)
    

이 값이 제곡된 μž…λ ₯ κΈˆμ•‘μ— λŒ€ν•΄ μ œκ³΅ν•  수 μžˆλŠ” λ‹€λ₯Έ ν† ν°μ˜ μ΅œλŒ€ amountμž…λ‹ˆλ‹€.

getAmountIn

amountOutκ³Ό pair reserves (reserveIn, reserveOut)κ°€ 주어지면 λ‹€λ₯Έ ν† ν°μ˜ ν•„μš”ν•œ μž…λ ₯ amountInλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

  1. (amountOut)κ³Ό λ‹€λ₯Έ μž…λ ₯ μžμ‚°μ˜ (reserveIn)에 1000을 κ³±ν•©λ‹ˆλ‹€.
    reserveIn * amountOut * 1000
    
  2. (reserveOut)μ—μ„œ amountOut을 λΊ€ 좜λ ₯ 값에 997을 κ³±ν•©λ‹ˆλ‹€
(reserveOut - amountOut) * 997
  1. ν•„μš”ν•œ μž…λ ₯ amountλ₯Ό 찾으렀면 1λ‹¨κ³„μ—μ„œ κ³„μ‚°λœ 값을 2λ‹¨κ³„μ—μ„œ κ³„μ‚°λœ κ°’μœΌλ‘œ λ‚˜λˆ•λ‹ˆλ‹€.
    (reserveIn * amountOut * 1000) / ((reserveOut - amountOut) * 997)
    

Farming and Staking

Farming

Farming: Functions
Function Description
add μƒˆ LP 파밍 pool을 μΆ”κ°€ν•©λ‹ˆλ‹€. LP ν† ν°μ˜ μ£Όμ†Œ, allocation points, ν’€ 보상 λ°°μœ¨μ„ 기반으둜 μƒˆλ‘œμš΄ 풀이 μΆ”κ°€λ©λ‹ˆλ‹€.
deposit μ§€μ •λœ 풀에 LP 토큰을 μ˜ˆμΉ˜ν•©λ‹ˆλ‹€.
withdraw μ§€μ •λœ ν’€μ—μ„œ LP토큰을 μΈμΆœν•©λ‹ˆλ‹€.
emergencyWithdraw 보상을 받지 μ•Šκ³  μ§€μ •λœ ν’€μ—μ„œ LP 토큰을 μΈμΆœν•©λ‹ˆλ‹€.
set μ§€μ •λœ ν’€μ—μ„œ JDEXT allocation pointsλ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
updatePool 주어진 풀에 λŒ€ν•œ 보상 λ³€μˆ˜λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
massUpdatePools λͺ¨λ“ ν™œμ„± ν’€μ—λŒ€ν•œ JDEXT 보상을 μ—…λ°μ΄νŠΈ ν•©λ‹ˆλ‹€.
updateMultiplier μ§€μ •λœ 풀에 λŒ€ν•œ 보상 multiplier을 μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
updatePtnPerBlock 블둝당 μƒμ„±λœ JDEXT 토큰 수λ₯Ό μ—…λ°μ΄νŠΈ ν•©λ‹ˆλ‹€
getMultiplier μ§€μ •λœ ν’€μ—λŒ€ν•΄ 주어진 두 블둝 μ‚¬μ΄μ˜ multiplierλ₯Ό returnν•©λ‹ˆλ‹€.
safePtnTransfer μ§€μ •λœ μ–‘μ˜ JDEXTλ₯Ό μ§€μ •λœ address둜 transferν•©λ‹ˆλ‹€.

StakingFactory

μŠ€ν…Œμ΄ν‚Ήμ„ 톡해 μ‚¬μš©μžλŠ” λ§Œλ“€μ–΄μ§„ 풀에 λŒ€ν•œ 토큰을 μŠ€ν…Œμ΄ν‚Ήν•˜κ³  JDEX토큰을 λ³΄μƒμœΌλ‘œ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

Staking: Functions
Function Description
initialize μŠ€ν…Œμ΄ν‚Ή contractλ₯Ό μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.
deposit μŠ€ν…Œμ΄ν‚Ήλœ 토큰을 μ˜ˆμΉ˜ν•˜κ³  보상 토큰이 μžˆλŠ” 경우 λ°›μŠ΅λ‹ˆλ‹€.
withdraw μŠ€ν…Œν‚Ήλœ 토큰을 μΈμΆœν•˜κ³  보상 토큰이 μžˆλŠ” 경우 λ°›μŠ΅λ‹ˆλ‹€.
recoverToken μ‹€μˆ˜λ‘œ μ»¨νŠΈλž™νŠΈλ‘œ 보낸 토큰을 λ³΅κ΅¬ν•©λ‹ˆλ‹€.
updatePoolLimitPerUser μ‚¬μš©μžλ‹Ή ν’€ μ œν•œμ„ μ—…λ°μ΄νŠΈ ν•©λ‹ˆλ‹€.
updateRewardPerBlock 블둝당 보상을 μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
updateStartAndEndBlocks μ‹œμž‘ 및 μ’…λ£Œ 블둝을 μ—…λ°μ΄νŠΈ ν•©λ‹ˆλ‹€.
_updatePool 주어진 풀에 λŒ€ν•œ 보상 λ³€μˆ˜λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
_getMultiplier μ§€μ •λœ 풀에 λŒ€ν•΄ 주어진 두 블둝 μ‚¬μ΄μ˜ 보상 multiplierλ₯Ό return ν•©λ‹ˆλ‹€
hasUserLimit user limit이 μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€




1. νŒ€ μ†Œκ°œ

BEB-05-Final-04μ‘°

  • νŒ€ λͺ… : μ’…λ±μŠ€

  • ν”„λ‘œμ νŠΈ λͺ… : JDEX

  • νŒ€μž₯ : μ„œμ’…λŒ€

  • νŒ€μ› : κΉ€μœ€κ²Έ, ν™μœ μ§„

  • Github Repo : https://github.com/codestates/BEB-05-final-JDEX

  • Date : 2022/08/31 - 2022/09/30

  • νŒ€ λ£°

    β†’ 맀일 μ˜€μ „ 10μ‹œ, μ˜€ν›„ 5μ‹œ ν•„μˆ˜ 회의 μ§„ν–‰νšŒμ˜λ‘ μž‘μ„±

    β†’ 회의둝 μž‘μ„±

    β†’ κ·Έ λ‚ μ˜ 진행 κ³„νš 및 진행 쀑인 상황 곡유



2. ν”„λ‘œμ νŠΈ κ°œμš”

πŸ’ΈΒ JDEX ν”„λ‘œμ νŠΈ λͺ©ν‘œ

β†’ Klaytn 기반의 DEX(νƒˆμ€‘μ•™ν™”κ±°λž˜μ†Œ) κ΅¬ν˜„.

➑️ **DEX; (Decentralized Exchange)**

기쑴의 μ€‘μ•™ν™”κ±°λž˜μ†Œ(CEX)κ°€ μ•„λ‹Œ 개인 κ°„ 금육(P2P)이 κ°€λŠ₯ν•œ νƒˆμ€‘μ•™ν™”(λΆ„μ‚°ν˜•) κ±°λž˜μ†Œ. 법정화폐와 μ•”ν˜Έν™”νκ°„μ˜ κ΅ν™˜μ„ ν—ˆμš©ν•˜μ§€ μ•Šκ³ , μ•”ν˜Έν™”ν 토큰을 λ‹€λ₯Έ μ•”ν˜Έν™”ν 토큰과 κ±°λž˜ν•˜μ—¬ 블둝체인(λΆ„μ‚° 원μž₯) μœ„μ— ꡬ좕 및 기둝된 μŠ€λ§ˆνŠΈκ³„μ•½μ˜ 집합이닀.


πŸ’ΈΒ JDEX λž€ ?

이젠 직접 μžμ‚°μ„ κ΄€λ¦¬ν•˜κ³  μ˜ˆμΉ˜ν•˜μ„Έμš”.

JDEXλŠ” 기쑴의 μ€‘μ•™ν™”λœ κ±°λž˜μ†Œμ˜ μ œμ‚Όμž κ°œμž… 없이 개인 κ°„ 금육(P2P) κ±°λž˜κ°€ κ°€λŠ₯ν•œ νƒˆμ€‘μ•™ν™” κ±°λž˜μ†Œ μž…λ‹ˆλ‹€.

λˆ„κ΅¬λ‚˜ JDEX μ›Ή μ‚¬μ΄νŠΈμ— λ°©λ¬Έν•˜μ—¬ **지갑(Kaikas)**λ₯Ό μ—°κ²°ν•˜κ³  λ³΄μœ ν•˜κ³  μžˆλŠ” 토큰을 λ‹€λ₯Έ μ‚¬μš©μžμ—κ²Œ μ „μ†‘ν•˜κ±°λ‚˜ λ‹€λ₯Έ ν† ν°μœΌλ‘œ κ΅ν™˜ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

또, 토큰을 지갑에 κ°€μ§€κ³ λ§Œ μžˆλŠ” 것이 μ•„λ‹Œ, 단일 ν˜Ήμ€ νŽ˜μ–΄ 풀에 μ˜ˆμΉ˜ν•˜κ³ , μœ λ™μ„± μ œκ³΅μ— λŒ€ν•œ **보상(JDEXTOKEN)**을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.


πŸ’ΈΒ Β JDEX 의 λŒ€ν‘œ κΈ°λŠ₯

  • My Token

    : μ†Œμœ ν•˜κ³  μžˆλŠ” 토큰 λͺ©λ‘μ„ ν™•μΈν•˜κ³ , λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ μ›ν•˜λŠ” 토큰을 전솑 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • Swap

    : μ†Œμœ ν•˜κ³  μžˆλŠ” 토큰을 λ‹€λ₯Έ ν† ν°λ“€λ‘œ κ΅ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • Staking

    : μ†Œμœ ν•˜κ³  μžˆλŠ” 토큰을 풀에 μ˜ˆμΉ˜ν•˜μ—¬ ’JDEXTOKEN’을 λ³΄μƒμœΌλ‘œ 받을 수 μžˆμŠ΅λ‹ˆλ‹€.


β›“οΈΒ μ™œ Klaytn 인가 ?

  1. μ €λΉ„μš©
    1. νŠΈλžœμž­μ…˜μ—μ„œ λ°œμƒν•˜λŠ” κ°€μŠ€λΉ„κ°€ 1~20원 μˆ˜μ€€μœΌλ‘œ, μ΄λ”λ¦¬μ›€μ˜ 1/100에 ν•΄λ‹Ήν•˜λŠ” κ°€μŠ€ λΉ„μš©μ„ ν•„μš”λ‘œ ν•˜μ—¬ 맀우 μ €λ ΄ν•©λ‹ˆλ‹€.
  2. 높은 ν™•μž₯μ„±(TPS)
    1. Klaytn은 μ‹€μ œ 4000TPS의 νŠΈλžœμž­μ…˜ μ²˜λ¦¬λŸ‰μ„ κ°€μ§‘λ‹ˆλ‹€. μ΄λŠ” 1μ΄ˆμ— 4000νŠΈλžœμž­μ…˜μ΄ ν•œ 블둝에 λ“€μ–΄κ°€λŠ” ν™•μž₯μ„±μœΌλ‘œ, 20TPS(Block Interval 15초)의 이더리움과 7TPS(Block Interval 10λΆ„)의 λΉ„νŠΈμ½”μΈμ— λΉ„κ΅ν–ˆμ„ λ•Œ μ›”λ“±νžˆ 높은 TPS μž…λ‹ˆλ‹€.
  3. 짧은 μ™„κ²°μ„±(Finality)
    1. 완결성은 블둝에 λ‹΄κΈ΄ κ±°λž˜κ°€ λ°”λ€” 수 μ—†λ‹€λŠ” 것을 λ³΄μ¦ν•˜λŠ” μ‹œκ°„μœΌλ‘œ, 블둝 생성 간격(Block Interval) * 검증 횟수둜 κ³„μ‚°ν•©λ‹ˆλ‹€. ν΄λ ˆμ΄νŠΌμ€ 1초의 완결성을 κ°€μ Έ μ΄ˆλ‹Ή ν•œ 건의 ν•©μ˜μ™€ λ™μ‹œμ— μ²˜λ¦¬ν•©λ‹ˆλ‹€. μ΄λ”λ¦¬μ›€μ˜ 6λΆ„, λΉ„νŠΈμ½”μΈμ˜ 60λΆ„κ³Ό λΉ„κ΅ν•˜μ—¬ 맀우 짧은 완결성을 κ°€μ§‘λ‹ˆλ‹€.
  4. μƒˆλ‘œμš΄ μ‹œλ„
    1. Klaytn에 λΉ„ν•˜μ—¬ ETHλŠ” μ ‘ν•  κΈ°νšŒκ°€ λ§Žμ•˜κΈ° λ•Œλ¬Έμ— 이번 ν”„λ‘œμ νŠΈλ₯Ό 톡해 Klaytn Chain을 κ²½ν—˜ν•˜κ³ , 배우고 μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€.

β›“οΈΒ μ™œ Klaytn 기반의 DEX인가 ?

  1. 기쑴의 λ³΄νŽΈν™” 된 λ±μŠ€λ“€μ€ μ΄λ”λ¦¬μ›€μ˜ 메이저 덱슀인 μœ λ‹ˆμŠ€μ™‘ ν˜Ήμ€ μŠ€μ‹œμŠ€μ™‘μ„ 클둠 μ½”λ”©ν•˜μ—¬ λ°°ν¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€. JDEXλŠ” Klaytnμ—μ„œ 자체적으둜 μ œκ³΅ν•˜λŠ” Klaytn Dex Contractsλ₯Ό λΆ„μ„ν•˜κ³ , λ°°ν¬ν•˜λŠ” 과정을 거쳐 KIP μ»¨νŠΈλž™νŠΈ λŒ€μ‹  μ΄λ”λ¦¬μ›€μ˜ ERC μ»¨νŠΈλž™νŠΈλ₯Ό μˆ˜μ •ν•˜μ—¬ μ‚¬μš©ν•œ κΈ°μ‘΄ Klaytn λ±μŠ€λ“€κ³Ό 차별점을 λ‘μ—ˆμŠ΅λ‹ˆλ‹€.
  2. 개인 κ°„ 금육(P2P)이 μ΄λ£¨μ–΄μ§€λŠ” DEXμ—μ„œ 저희가 μ€‘μš”ν•˜κ²Œ μƒκ°ν•œ 2가지 μˆ˜μˆ˜λ£Œμ™€ 전솑 μ†λ„μž…λ‹ˆλ‹€. νƒˆμ€‘μ•™ν™” κ±°λž˜μ†Œ(DEX)인 만큼 μ€‘μ•™ν™”κ±°λž˜μ†Œ(은행)κ³ΌλŠ” λ‹€λ₯Έ μž₯점이 μžˆμ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν–ˆκ³ , μˆ˜μ—…μ„ 톡해 배운 ETHλŠ” λΉ„μ‹Ό μˆ˜μˆ˜λ£Œμ™€ 느린 전솑 μ†λ„λ‘œ 체인으둜의 λšœλ ·ν•œ μž₯점을 찾지 λͺ»ν•˜μ˜€μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ μƒλŒ€μ μœΌλ‘œ κ°€μŠ€λΉ„κ°€ μ €λ ΄ν•˜κ³ , 속도가 λΉ λ₯Έ Klaytn Chain을 μ„ νƒν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


3. κΈ°λŠ₯별 μ‹œμ—° μ˜μƒ

  • Connect Wallet

    wallet

    • Kailkas 지갑 연결을 μœ„ν•œ λͺ¨λ‹¬ 창을 λ³΄μ—¬μ€λ‹ˆλ‹€.
  • My Token

    Transfer

    • My Token List
      • μ—°κ²°λœ 지갑 λ³΄μœ ν•œ Klay 토큰 및 KIP7 토큰 λ¦¬μŠ€νŠΈμ—… ν•©λ‹ˆλ‹€.
    • Transfer - 토큰 전솑
      • λ³΄μœ ν•œ 토큰을 λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ 전솑할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • Swap

    swap

    • λ³΄μœ ν•œ Klay / KIP7 토큰을 μ›ν•˜λŠ” λ‹€λ₯Έ KIP7 ν† ν°μœΌλ‘œ κ΅ν™˜ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • Staking - 단일 예치

    • λ³΄μœ ν•œ 토큰을 μ˜ˆμΉ˜ν•˜κ³ , μœ λ™μ„±μ— λŒ€ν•œ 보상(LP Token)을 λ°›μŠ΅λ‹ˆλ‹€.

    • Single Pool List

      [ Deposit - 예치 ]

      singlepool

      [ Withdraw - 좜금 ]

      singlewithdraw

      • 단일 ν’€ λͺ©λ‘μ΄ 리슀트 μ—… λ©λ‹ˆλ‹€.
      • 풀을 μ„ νƒν•˜μ—¬ 단일 예치(Deposit)와 좜금(Withdraw)κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • Staking - νŽ˜μ–΄ 예치

    • λ³΄μœ ν•œ 토큰을 μ˜ˆμΉ˜ν•˜κ³ , μœ λ™μ„±μ— λŒ€ν•œ 보상(LP Token)을 λ°›μŠ΅λ‹ˆλ‹€.

    • Pair Pool List

      [ Deposit - 예치 ]

      pairpool

      [ Withdraw - 좜금 ]

      pairwithdraw

      • ALL / Klay / KIP νŽ˜μ–΄ ν’€ λͺ©λ‘μ΄ 리슀트 μ—… λ©λ‹ˆλ‹€.
      • μ›ν•˜λŠ” νŽ˜μ–΄ 풀을 μ„ νƒν•˜μ—¬ 토큰 νŽ˜μ–΄ 예치(Deposit)와 좜금(Withdraw)κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
    • Create Pool

      create

      • μ›ν•˜λŠ” 토큰 νŽ˜μ–΄μ˜ μœ λ™μ„± 풀을 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.


4. κ΄€λ ¨ λ¬Έμ„œ

πŸ“‹Β DB Schema

DB


πŸ“‹Β DB Api

API_List


πŸ“‹Β Wireframe

JDEX_Wireframe


πŸ“‹Β Flow Chart

JDEX Flowchart Final drawio


πŸ“‹Β Token Economy

JDEX_TokenEconomy

[JDEX의 Token Economy]

  • 개발자, 투자자, μœ μ €λ“€μ—κ²Œ μ μ ˆν•œ μ–‘μ˜ 토큰을 λΆ„λ°°ν•˜κ³ , **예치(단일, νŽ˜μ–΄ ν’€)**에 λŒ€ν•œ λ³΄μƒμœΌλ‘œ JDX 토큰을 지급 λ°›μ•„ 지속가λŠ₯ν•œ μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜κ³ μž ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • λ³΄μƒμœΌλ‘œ μ£Όμ–΄μ§€λŠ” JDX 토큰을 일정 지뢄 λ³΄μœ μ‹œ JDEX의 운영 λ°©ν–₯μ„± 및 ν˜‘μ˜μ— λŒ€ν•œ νˆ¬ν‘œ κ±°λ²„λ„ŒμŠ€μ— μ°Έμ—¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


πŸ“š STACKS

COLLABORATION TOOL


FRONTEND



BACKEND


BLOCKCHAIN