Smart Contract for Token Swap #2-4 Pancake Router Contract 분석하기(Write Contract 3)

Jina Kim·2022년 9월 23일
1

Smart Contract

목록 보기
6/9
post-thumbnail

🚨 Caution 🚨

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

저번 Write Contract 2편(swapTokens)에 이어서
3편 swap 펑션들 갑니다.

Pancake Router Contract

실 Contract: 0x10ED43C718714eb63d5aA57B78B54704E256024E
Testnet Contract: 0xD99D1c33F9fC3444f8101754aBC46c52416550D1

참고 Doc

https://docs.uniswap.org/protocol/V2/reference/smart-contracts/library#getamountsout
https://docs.pancakeswap.finance/code/smart-contracts/pancakeswap-exchange/router-v2

Write Function

14. swapExactTokensForTokens

❗ DEX에서 자주 쓰일 것 같은 펑션.
A↔B 토큰 swap하기

function swapExactTokensForTokens(
  uint amountIn,
  uint amountOutMin,
  address[] calldata path,
  address to,
  uint deadline
) external returns (uint[] memory amounts);

amountIn: A토큰 swap할 양
amountOutMin: 최소한 swap 원하는 B토큰의 양
path: A토큰 contract address, B토큰 contract address
to: swap한 토큰을 받는 지갑 주소(내 지갑 주소)
deadline: 트잭의 데드라인. 현 Unix Timestamp에서 적당히 200~300 더해주면 된다.

example)

1JNB를 KB로 바꾸려고 합니다.
최소 0.00001 KB는 받아야겠어! 했더니

0.4997 KB 가 swap되었다.
내가 유동성풀에 1:1로 넣어두고 BNB swap 하면서 KB를 0.5KB 뺐더니 1:0.5 비율이 되었나보다.

토큰 대 토큰 swap, 참 쉽죠?🎨

15. swapExactTokensForTokensSupportingFeeOnTransferTokens

function swapExactTokensForTokensSupportingFeeOnTransferTokens(
  uint amountIn,
  uint amountOutMin,
  address[] calldata path,
  address to,
  uint deadline
) external;

또나왔다 SupportingFeeOnTransferTokens
이 수수께끼의 정답을 아시는 분은 댓글 달아주세요..

구글링 해봐도 다 모른다고 함

그냥 첫번째꺼 실패하면 SupportingFeeOnTransferTokens 붙여진거 부른다고 함 ㅋㅋㅋㅋ

16. swapTokensForExactETH

0.01 BNB를 받기 token을 swap

function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
  external
  returns (uint[] memory amounts);

amountOut: swap하고자 하는 BNB 양
amountInMax: 최대한 넣을 수 있는 A토큰
path: A토큰 contract address, WBNB contract address

example)

0.005 WBNB 를 swap 요청,
최대 100JNB까지 낼 수 있다고 했고,
path에는 JNB, WBNB contract address를 차례대로 넣었다.

트잭 성공 후, 0.005BNB를 받기 65.34 JNB가 나갔다.

17. swapTokensForExactTokens

드뎌 마지막 function!!!!
특정양의 B토큰을 얻기 위해 A토큰과 swap~

function swapTokensForExactTokens(
  uint amountOut,
  uint amountInMax,
  address[] calldata path,
  address to,
  uint deadline
) external returns (uint[] memory amounts);

amountOut: swap하고자 하는 B토큰 양
amountInMax: 최대한 넣을 수 있는 A토큰
path: A토큰 contract address, B토큰 contract address

example)

5KB를 받고 싶었고, 최대 100 JNB까지 쓸 수 있다고 했음

5KB 바꾸는데 24.86JNB 지출 완!


swap과 liquidity를 반복한 내 지갑...(ㅋㅋㅋㅋㅋ 아주 바쁜 지갑 같다)

이렇게 pancake router 분석 완료했으니
다음 편은 나만의 smart contract 만들어보겠습니다!🎡🎠

profile
Hello, World!

0개의 댓글