Smart Contract for Token Swap #2-1 Pancake Router Contract 분석하기(Read Contract)

Jina Kim·2022년 9월 21일
1

Smart Contract

목록 보기
3/9
post-thumbnail

🚨 Caution 🚨

I am not specialist of blockchain..
저는 코인도 안하는 블새싹입니다.ㅎ🌱
틀린게 있을 수 있는 점 양해 부탁드립니다.


Pancake Router Contract

실 Contract: 0x10ED43C718714eb63d5aA57B78B54704E256024E
Testnet Contract: 0xD99D1c33F9fC3444f8101754aBC46c52416550D1

실 bscscan에서의 contract는 단일 파일의 solidity로 이뤄졌다.
아마 flattener로 만든게 아닐까 싶다.
(flattener: solidity 플젝 내 참조하는 여러 파일들을 하나의 파일로 압축해주는 모듈)

Doc 살펴보기

https://docs.pancakeswap.finance/code/smart-contracts/pancakeswap-exchange/router-v2
여기에서 PancakeRouter V2 버젼에 대해 function 소개가 잘 나옴

Read Function

1. WETH

ETH를 ERC-20 기준으로 쓸 수 있게 WETH라는 토큰으로 바꿔야 하는데, 그것의 contract address임.
이더리움 메인넷에서는 WETH, BSC에서는 WBNB

2. factory

PancakeFactory(아마 주요 펑션을 모아놓은 contract 같음)의 address

3. getAmountOut

직접적으로 call하진 않고, getAmountsOut 펑션에서 쓰임.
아마 토큰 A↔B를 swap한다고 할 때, 50 A 토큰을 바꾸고 싶은 경우 B 토큰이 얼만큼일지 예상해주는 듯

4. getAmountIn

이것도 getAmountOut과 마찬가지로 직접적으로 call하진 않고, getAmountsIn 펑션에서 쓰임.
토큰 A↔B를 swap한다고 할 때, 얼만큼의 A 토큰을 바꿔야 50 B 토큰이 나올지 예상해주는 듯

5. getAmountsOut

function getAmountsOut(uint amountIn, address[] memory path) internal view returns (uint[] memory amounts);

토큰 A↔B를 swap한다고 가정.
amountIn에는 A토큰 swap할 양, address[]에는 ["A토큰 address", "B토큰 address"]
그러면 리턴값은 B토큰 swap된 양이 나온다.

>> 5 BUSD를 15 DAI로 바꿀 수 있다~

6. getAmountsIn

function getAmountsIn(uint amountOut, address[] memory path) internal view returns (uint[] memory amounts);

토큰 A↔B를 swap한다고 가정.
amountOut에는 B토큰 swap되었으면 하는 양, address[]에는 ["A토큰 address", "B토큰 address"]
그러면 리턴값은 A토큰 swap할 양이 나온다.

>> 아까와 같이 15 DAI는 5 BUSD로 swap 하면 된다~

7. quote

function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB);

"일정량의 자산과 쌍 준비금이 주어지면 다른 자산과 동일한 금액을 반환"
이라고 번역되는데 뭔소린지..? ㅎ

직접 PancakeLibrary.sol을 보니
amountA * reserveB / reserveA 가 리턴값이다

>> 네 봐도 모르겠어요?

그냥 직접적으론 쓰지 않고, 다른 펑션들에서 쓰이는 것 같다.


Write Function은 다음 포스팅에서~

profile
Hello, World!

0개의 댓글