当前位置:   article > 正文

前端web3入门脚本二:初探dex,在dex完成一笔swap

前端web3入门脚本

前言

现在市面上大多数去中心化交易所(简称dex)都是fork的uniswap的代码,名气比较大的如eth上的sushi 以及 bsc上的pancake。博主这里说的都是V2,uniswapV3在这里不做讨论。那么知道了他们的代码都是来自同一父亲之后,我们就可以在同样fork他的儿子里任选一个来写测试脚本。下面开始选儿子。

一、测试脚本目标链的选择又称选儿子

  •  开头直接给答案:博主选择 kcc 链上的 Mojitoswap 作为例子

  • 为什么是 kcc 链? 文章一已经做过陈述

  • 为什么是 Mojitoswap? 

    • 第一,它是 kcc 链上最大的dex,tvl排第一,且传言是kucoin的亲儿子

    • 第二,代码有审计报告,安全性有保障。选dex就选龙头,准没错

二、开始讲解脚本

  1. 如果要在一个 dex 上交易,第一步需要确认钱包余额够不够,第二步如果转账token为erc20,则需要先向目标合约授权approve。 第三步才是真正的转账,在dex里转账同样要区分原生代币和erc20代币
    1.  原生代币swap方法:swapExactTokensForETH / swapExactETHForTokens
    2.  erc20代币swap方法: swapExactTokensForTokens
  2. 检查余额 
  1. const checkUSDTBalance = async () => {
  2. const balance = await usdt.balanceOf(wallet.address);
  3. console.log(chalk.green(`USDT balance: ${ethers.utils.formatEther(balance)}`));
  4. return balance;
  5. }
  6. const checkKCSBalance = async () => {
  7. const balance = await wallet.getBalance();
  8. console.log(chalk.green(`KCS balance: ${ethers.utils.formatEther(balance)}`));
  9. return balance;
  10. }

        3.  区分是 原生代币(KCS) 还是其他erc20 Token

  1. // step2: if ksc, just swap or if usdt, approve and swap
  2. if (Number(ethers.utils.formatEther(kcsBalance)) > 0.1) { // KCS balance need to > 0.1, since we swap 0.1 kcs to usdt and we need to pay gas fee
  3. await swapKCS2USDT();
  4. }
  5. if (Number(ethers.utils.formatEther(usdtBalance)) >= 0.2) { // 0.2 is min amount of usdt, since we swap 0.1 usdt to kcs and 0.1 usdt to usdc
  6. await approveUSDT();
  7. await swapUSDT2KCS();
  8. await swapUSDT2USDC();
  9. }

  脚本运行结果如下:      

        具体详细代码我放在了Github仓库

三、我会了这个,我能干啥?

        恭喜你,如果上面的你都能调通了,那么你掌握了进入web3的一把黄金钥匙。 上面同样的一套代码,你可以只需要替换合约地址,就可以无痛迁移到 eth 链 / bsc链 / ... 所有热门evm公链。并在他们的swap(需要是uniswap的复制品)上运行这个代码。

  •  如果你接着问,我是小白,我该怎么迁移呢?
    • 举例: 我想去bsc上的pancake运行这个脚本。那很简单,你只需要替换合约地址即可。同时将 kcsAddress 替换成 bnbAddress(不同链不同base Token名称)         
      1. // kcc 链上的地址, routerAddress 是 mojitoSwap 的 router 合约
      2. const kcsAddress = '0x6551358EDC7fee9ADAB1E2E49560E68a12E82d9e'
      3. const usdtAddress = '0x67f6a7BbE0da067A747C6b2bEdF8aBBF7D6f60dc'
      4. const usdcAddress = '0xD6c7E27a598714c2226404Eb054e0c074C906Fc9'
      5. const routerAddress = '0x59a4210Dd69FDdE1457905098fF03E0617A548C5'
      6. // bsc 链上的地址,kcsAddress 替换成 bnb的合约地址, routerAddress 替换为 pancakeSwap 的 router 合约即可
      7. const bnbAddress = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'
      8. const usdtAddress = '0x55d398326f99059fF775485246999027B3197955'
      9. const usdcAddress = '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d'
      10. const routerAddress = '0x10ED43C718714eb63d5aA57B78B54704E256024E'
    •   再详细一点,博主你是去哪里找到这些合约信息的呢?
      • 答:我会去看对应swap的docs,里面一般会留下合约地址信息, 其次,还可以去对应链的区块浏览器二次确认是不是我们要的Token, 因为对应的合约一般都会在浏览器里开源 。最后还可以去coinmarketcap 里搜索对应币名,里面认证了的Token都会有合约地址。
      • 接上面bsc上薄饼这个例子,我是怎么找到的呢

结尾

通过上面的讲解,你应该掌握了最简单的在swap里交互的方法。

从这里我们可以衍生出一键运行脚本,完成swap交互的功能。

那么下一节,我们讲讲解如果一键完成与swap的脚本。撸毛必备。你值得学会。

欢迎github里star和fork,你的star是我前进的动力!撒花~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/791380
推荐阅读
相关标签