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

news2025/1/18 11:55:05

前言

现在市面上大多数去中心化交易所(简称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 swap
  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
    await 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 usdc
    await 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是我前进的动力!撒花~🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/470434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python每日一练(20230428)

目录 1. 最长有效括号 🌟🌟🌟 2. 矩阵中的最长递增路径 🌟🌟🌟 3. 回文链表 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练…

考研操作系统2.3节 同步与互斥(这节有必要多复习)

2.2 实现缓冲区互斥的基本方法 软件实现方法 硬件实现方法 2.3.3 互斥锁 下面用互斥锁解决经典同步问题 2.3.4 信号量 经典同步问题(做大题再看) 2.3节选择题 皮特森算法:flag实现互斥,turn避免饥饿,选D x1 2 2 1 …

C/C++每日一练(20230428) 二叉树专场(6)

目录 1. 不同的二叉搜索树 🌟 2. 二叉树的锯齿形层序遍历 🌟🌟 3. 二叉树的右视图 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…

如何做好采购计划和库存管理?

“销售计划不专业且不稳定”“准确性低” “目前只按照过往销量和采购周期做安全库存,但欠货和滞销依然严重” 题主的问题其实蛮有代表性的, 也是传统采购和库存管理常常面临的问题: ① 前后方协作困难 采购/销售/财务工作相互独立&#x…

【软件测试】测试分类

文章目录 🌷 1. 按测试对像划分⭐️ (1)界面测试⭐️ (2)可靠性测试⭐️ (3)容错性测试⭐️ (4)文档测试⭐️ (5)兼容性测试⭐️ (6&a…

Word论文自动化排版

论文的总体结构包含了标题、正文、子标题、图形、公式、算法、表格、参考文献等子结构。在利用Word进行论文排版时常常遇到这些困难:(1)论文的各子结构的格式非常难以做到统一,而且一旦某一子结构的格式需要修改,则需要…

量子计算的崛起:量子安全技术将成为下一代网络安全的基石?

第一章:引言 量子计算作为一种新型计算模式,与传统计算机相比具有许多优势。传统计算机使用的是二进制系统,即只有0和1两种状态,而量子计算机利用量子比特(qubit)的特殊性质进行计算。量子比特可以同时处于…

Mysql数据库的备份恢复

最近正在做一个异地数据的定期同步汇总工作,涉及到的数据库主要是Mysql数据库,用于存储现场的一些IOT采集的实时数据,所以做了以下备份恢复测试,现场和总部网络可定期联通,但速度有限,因此计划采用备份恢复…

11【Sass语法介绍-导入】

1.前言 在 CSS 中我们可以通过 import 来导入一个样式文件,Sass 扩展了 CSS 的 import 规则,使得可以导入 CSS 后缀的样式文件和 Scss 后缀的样式文件,并且提供了对 mixin 、函数和变量的访问。 与 CSS 的 import 不同的是, CSS…

aac音频怎么转mp3,这几个方法很简便

对于aac来说,其是一种高级音频编码,也是专门为声音数据设计的文件压缩格式。通常来说,aac与mp3有一些不同。aac使用了全新的算法进行编码的,其整体的效率较mp3更高一些。同时,aac格式的音质较好一些。但是,…

调戏chatGPT(二)下围棋

这次我准备和chatGPT下盘围棋,我先得确认它知道围棋是啥,如果会的话我就不用介绍规则了 t 你会下围棋嘛 作为一名AI助手,我可以模拟下围棋的过程,但是我没有实际的感官,无法看到棋盘和棋子,也无法进行实…

Win11电脑右下角时间显示秒方法教学

Win11电脑右下角时间显示秒方法教学。Win11系统的最新版本已经可以支持状态栏显示秒的功能了。如果你使用的Win11不是最新版本,其实也是可以实现秒数的显示的。接下来我们就来看看具体的设置方法吧。 具体操作如下: 1、无法直接通过修改Win11注册表的方法…

Javaweb | 状态管理:Session、Cookie

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 状态管理 问题引入 HTTP协议是无转态的,不能保存提交的信息如果用户发来一个新的请求,服务器无法知道它是否与上次的请求联系对于那些需要多次…

第四章节 首次登录与在线求助

第四章 首次登录与在线求助 4.14.1.4 在终端登录Linux: 4.2 命令行模式下的命令执行4.2.1 开始执行命令4.2.2 基础的命令操作4.2.3 几个重要的热键4.2.3 Linux系统在线求助man page 与info page 4.4 简单的文本编辑器nano 4.1 4.1.4 在终端登录Linux: …

Java排序

Java排序 🐾1. 概念🐾1.1 排序1.2 稳定性(重要) 💐2. 七大基于比较的排序比-总览💐🌸3. 插入排序🌸3.1 直接插入排序-原理3.2 实现3.3 性能分析3.4 折半插入排序(了解&am…

Java学习15(IO基础知识)

1、IO流简介? IO 即 Input/Output,输入和输出。数据输入到计算机内存的过程即输入,反之**输出到外部存储(比如数据库,文件,远程主机)**的过程即输出。数据传输过程类似于水流,因此称…

RocketMQ第一节(MQ的初步了解)

目录 1:什么是消息队列 2:MQ的基础模型 3:MQ的作用 3.1:MQ用来解耦 3.2: 削峰填谷 4:MQ怎么选 1:什么是消息队列 MQ全称是Message Queue (消息队列),是消息传输中间件&#xf…

FT2000+ qemu kvm 64C64G 通过频繁设置CPU online 状态导致虚拟机假死测试用例

宿主机配置 虚拟机配置文件 <domain typekvm> //如果是Xen&#xff0c;则type‘xen’<name>redflag1</name> //虚拟机名称&#xff0c;同一物理机唯一<uuid>44748c15-7c00-4817-8724-675a27c3f821</uuid> //同一物理机唯一&#xff0c;可用uu…

图形界面GUI相关概念GLX/Wayland/X11/DRM/DRI

1. GUI图形界面是什么 GUI是graphical user interface的缩写&#xff0c;图形用户接口&#xff0c;实现了基本的WIMP&#xff08;windows&#xff0c;icons&#xff0c;menus&#xff0c;pointer&#xff09;。一个GUI的基本组成&#xff1a;display server实现windowing syst…

传统制造企业如何数字化转型?中国减速机Top 1企业给出这份答案

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 数字中国建设正在如火如荼地展开&#xff0c;百业千行也都在寻求自身业务与数字化的深度融合。 2022年制造业增加值占GDP比重约为30%&#xff0c;在数字经济赋能新发展的当下&#xff0c;制造业成为数字技术重点实施落地的载…