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

编程入门 行业动态 更新时间:2024-10-10 08:26:12

前端web3入门<a href=https://www.elefans.com/category/jswz/34/1771291.html style=脚本二:初探dex,在dex完成一笔swap"/>

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

前言

现在市面上大多数去中心化交易所(简称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. 检查余额 
const checkUSDTBalance = async () => {const balance = await usdt.balanceOf(wallet.address);console.log(chalk.green(`USDT balance: ${ethers.utils.formatEther(balance)}`));return balance;
}const checkKCSBalance = async () => {const balance = await wallet.getBalance();console.log(chalk.green(`KCS balance: ${ethers.utils.formatEther(balance)}`));return balance;
}

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

  // step2: if ksc, just swap or if usdt, approve and swapif (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 feeawait swapKCS2USDT();}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 usdcawait approveUSDT();await swapUSDT2KCS();await swapUSDT2USDC();}

  脚本运行结果如下:      

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

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

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

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

结尾

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

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

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

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

更多推荐

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

本文发布于:2024-03-23 01:50:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1739041.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:脚本   入门   dex   swap

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!