ysheokorea / BEB-05-final-JDEX

BEB-05-final-04

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

JongDEX

๐Ÿ“š STACKS

COLLABORATION TOOL


FRONTEND



BACKEND


BLOCKCHAIN


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์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค

About

BEB-05-final-04


Languages

Language:Solidity 71.1%Language:JavaScript 26.2%Language:TypeScript 1.2%Language:CSS 1.0%Language:HTML 0.4%Language:Shell 0.1%