Web入门脚本三:一键完成与dex的交互,羊毛党必备

news2024/11/28 19:01:30

前言

该脚本用途:一键可以完成与dex的所有交互,包括2次swap,添加/移除流动性,以及farm和提取LP。一次运行可以有6条交易记录。 无论是个人单刷还是羊毛党批量地址刷交互都完美适配。当然反女巫方案不在这次文章的讨论范围内。

一、运行脚本前期准备

  • 设置期望交互的数量: const amount = '0.1'
  • 这里 0.1 意味着 swap 两次 0.1 KCS (base token in kcc),以及组价值0.2USDT的LP。
  • 所以如果按 初始设置 amount 为 0.1,则为了脚本正常运行
  • 建议账户里余额: KCS > 0.15, USDT > 0.1

二、脚本讲解

  • 步骤一,首先检查余额是否满足脚本运行要求。
  • 步骤二,如果满足则首先进行approve,注意这里我为了方便approve设的值都是max,如果你觉得max授权不安全,你可以approve成你本次想要交互的值即可。
  • 步骤三,进行2次swap
  • 步骤四,添加流动性
  • 步骤五,进行LP质押和移除
  • 步骤六,拆除LP。到这里我们手上没有LP,只有初始的两个Token,你可以将二者余额进行差值运算,得出本轮交互你的gas fee损耗。
  • 完成代码请移步: 我的github仓库
const main = async () => {

  const kcsBalance = await wallet.getBalance()
  const usdtBalance = await usdtContract.balanceOf(wallet.address)

  // // swap twice times
  if (Number(ethers.utils.formatEther(kcsBalance)) > Number(amount) * 1.5 && Number(ethers.utils.formatEther(usdtBalance)) > Number(amount)) { // amount times 150% in order to confirm that the balance is sufficient, no exact value, just > 100%
   	await approveLP2Router();
    await swapKCS2USDT();
    await swapUSDT2KCS();
  } else {
    console.log(chalk.red(`KCS or USDT balance is not enough, please check your wallet`));
  }

  // add liquidity
  await addLiquidity(tokens["kcc-testnet"].USDT, '0.0001', '0.1');

  // deposit LP token & withdraw
  await depositLP2MasterChef();
  await withdrawLP2MasterChef();

  // remove liquidity
  await removeLPFromRouter();

  console.log('Done: 2 swap, 1 add liquidity, 1 deposit, 1 withdraw, 1 remove liquidity')

};

三、知识扩展

 有朋友可能在数值的设定上有疑惑。这里扩展讲解一下 uniswapV2 的 addLiquidityETH 这个方法
  • 开头给链接,官方文档地址 uniswap-v2 docs
  • 结构体如下:
function addLiquidityETH(
  address token,
  uint amountTokenDesired,
  uint amountTokenMin,
  uint amountETHMin,
  address to,
  uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);

参数解释

  • 从上面定义我们可以看到,对于 addLiquidityETH 来说,amountTokenMin 和 amountETHMin 都必须 小与等于 他们对应的 AmountDesired。
  • 那代码里 添加流动性方法中 我设置的 0.0001 和 0.1 是怎么确认的呢?
  • 这里我用了一个取巧的方法,去目标Dex添加流动性页面,输入你想要添加流动性的数量,这里我设 KCS 为 0.0001,那么前端会自动计算出来对应需要添加的USDT数量。
  • 添加流动性截图
    合约源码
  • 再看到合约源码里对应的 addLiquidity 方法,对于我们这个例子,也就是 amountBOptimal 计算出来为页面上 0.0521012, 此时我们只需要保证传入的 amountBDesired 大于这个值即可。所以脚本里我设置了 0.1,是满足这个要求的,可以通过合约校验
  • 为什么我取巧? 因为如果要计算出具体的值,需要调用很多其他相关的库,为了简化脚本的依赖,我选择直接写死一个可以通过合约校验的值。

结尾

那么到此为止,我们掌握了一键和dex交互的方式。希望各位撸羊毛愉快。
欢迎大哥们 follow 我的代码仓库(https://github.com/Bot80926/ethers-scripts) 
完全开源,不留后门。只为Web3布道。希望各位看的开心,用得开心。🎉🎉🎉

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

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

相关文章

Python快速入门,看这一篇就够了

大家好,我是老三,我最近在看一些人工智能相关的东西,大部分相关的框架,都是用Pyhon写的。 老三会用Python,但谈不上多熟练,最近准备拿Python作为自己的第二语言,那么这期我们来一起快速梳理一下…

程序员该如何学习技术

程序员该如何学习技术 前言 学习是第一生产力,我从来都是这么认为的,人只有只有不断地学习才能意识到自己的缺点和不足,身为程序员,我更认为人们应当抱着终身学习的想法实践下去,这是我所一直践行且相信的。 高处不胜寒…

体验 GPT-4 后,回顾 OpenAI 发展历程及感悟

从 ChatGPT Plus 发布第一天就开始重度使用,刚刚和新发布的 GPT-4 进行了 20 多轮对话,来简单介绍下这几个模型背后的技术,并且分享下感受。 GPT 在发展历程中,一共经历了 4 个阶段,分别是 1、2、3、4。这几个阶段分别…

【VM服务管家】VM4.x算法模块开发_4.3 联合Halcon开发

目录 4.3.1 联合开发:集成HALCON第三方算子到VM工具箱的方法 4.3.1 联合开发:集成HALCON第三方算子到VM工具箱的方法 描述 环境:VM4.0及以上 VS2013 问题:有的用户在使用VisionMaster软件在开发视觉项目时,可能同时也…

来了来了,我使用 ChatGPT 开发了一个 AI 应用

ChatGpt 实在太火爆了,很多人在问我怎么使用 chatgpt 开发一个 AI 应用程序。这不就来了吗~ 开始 你所需要准备的一个OpenAI 的密钥和一点点代码来发送提示并返回结果,例如下面这段代码: import { OpenAIApi, Configuration } from openai…

基于RAM树莓派实现智能家居:语音识别控制,Socket网络控制,火灾报警检测,实时监控

目录 一 项目说明 ① 设计框架 ② 功能说明 ③ 硬件说明 ④ 软件说明 二 项目代码 <1> mainPro.c 主函数 <2> InputCommand.h 控制设备头文件 <3> contrlDevices.h 外接设备头文件 <4> bathroomLight.c 泳池灯 <5> livin…

GraphQL(三)DataLoader 详解

DataLoader是一个通用实用程序&#xff0c;用作应用程序数据获取层的一部分&#xff0c;通过批处理和缓存为各种远程数据源&#xff08;如数据库或 Web 服务&#xff09;提供简化且一致的 API 批处理 const user await userLoader.load(1); const invitedBy await userLoade…

【C++】7. auto和nullptr(c++11)

文章目录 一、auto二、nullptr 一、auto 在C98中&#xff0c;auto是一个存储类说明符&#xff0c;表示变量具有自动存储期&#xff0c;即在函数或块的作用域内创建和销毁。 在C11中&#xff0c;auto是一个类型占位符&#xff0c;表示变量的类型由其初始化器自动推断。 使用如下…

分类和扩展与继承

文章目录 [TOC](文章目录) 分类定义分类的使用使用场景使用注意点 Extension 扩展分类和扩展的区别 继承的定义使用注意点 新建一个分类 分类基础知识 分类 分类是指为已有的类添加方法&#xff0c;也可以说是将很多很复杂的代码划分为几个分区。 定义 分类的作用是扩展已有…

第十四届蓝桥杯大赛软件赛省赛 Java 大学 B 组题解

试题 A: 阶乘求和 本题总分&#xff1a;5 分 【问题描述】 令 S 1! 2! 3! ... 202320232023!&#xff0c;求 S 的末尾 9 位数字。 提示&#xff1a;答案首位不为 0。 【答案提交】 这是一道结果填空的题&#xff0c;你只需要算出结果后提交即可。本题的结果为一 个整数&am…

Linux信号:SIGCHLD信号和僵尸进程

1. SIGCHLD信号产生条件&#xff1a; &#xff08;1&#xff09;子进程终止&#xff1b; &#xff08;2&#xff09;子进程收到SIGSTOP暂停&#xff1b; &#xff08;3&#xff09;子进程处于暂停状态&#xff0c;收到SIGCONT被唤醒。 2. 捕捉SIGCHLD&#xff0c;避免僵尸进程&…

网络钓鱼:工作场所保护电子邮件安全的五个步骤

导语&#xff1a;Sophos电子邮件产品管理高级总监David Mitchell分享了他的主要技巧&#xff0c;以优化工作场所的电子邮件安全性。 Sophos电子邮件产品管理高级总监David Mitchell分享了他的主要技巧&#xff0c;以优化工作场所的电子邮件安全性。 尽管工作场所的聊天和即时…

云原生时代崛起的编程语言Go基础实战

文章目录 概述定义使用场景Go 安全 使用须知搜索工具Go基础命令标准库 基础语法Effective Go 概览命名规范注释变量常量(const)控制结构数据类型迭代&#xff08;range&#xff09;函数指针字符串和符文结构体(struct)方法接口(interface)泛型错误&#xff08;errors&#xff0…

iOS描述文件(.mobileprovision)一键申请

转载&#xff1a;IOS描述文件制作教程 iOS描述文件(.mobileprovision)一键申请 在主界面上点击描述文件按钮。 ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 新建ios描述文件 然后点击新建&#xff0c;然后输入描述文件名称&…

数据库设计与前端框架

数据库设计与前端框架 学习目标&#xff1a; 理解多租户的数据库设计方案 熟练使用PowerDesigner构建数据库模型理解前端工程的基本架构和执行流程 完成前端工程企业模块开发 多租户SaaS平台的数据库方案 多租户是什么 多租户技术&#xff08;Multi-TenancyTechnology&a…

【密码算法 之六】CCM 浅析

CCM模式浅析 1. 综述2. 加密2.1 前置条件&#xff08;Prerequisites&#xff09;2.2 输入&#xff08;Input&#xff09;2.3 输出&#xff08;Output&#xff09;2.4 加密流程&#xff08;Steps&#xff09; 3. 解密3.1 前置条件&#xff08;Prerequisites&#xff09;3.2 输入…

Orangepi Zero2 全志H616简介

为什么学 学习目标依然是Linux 系统 &#xff0c;平台是 ARM 架构 蜂巢快递柜&#xff0c;配送机器人&#xff0c;这些应用场景用C51,STM32单片机无法实现 第三方介入库的局限性&#xff0c;比如刷脸支付和公交车收费设备需要集成支付宝SDK&#xff0c;提供的libalipay.so 是…

【VM服务管家】VM4.0平台SDK_2.2 模块API类

目录 2.2.1 方案保存&#xff1a;方案高速保存的方法2.2.2 Group模块&#xff1a;Group输入输出图像数据的方法2.2.3 模块操作类&#xff1a;设置输入图像、参数和ROI的方法2.2.4 图像源&#xff1a;通过图像源模块接口设置图像输入的方法2.2.5 图像源&#xff1a;通过SDK传入相…

go 语言环境安装(Windows 系统下安装)

go 语言官网:The Go Programming Language 下载 go 安装包的网址&#xff1a;All releases - The Go Programming Language go 支持很多种操作系统 Windows 系统下 - 安装和配置SDK 一、SDK 介绍 SDK 的全称是 Software Development Kit &#xff0c;即 软件开发工具包 二…

STM32物联网实战开发(1)——全新的程序框架

现在STM32公司主推的是HAL库的开发&#xff0c;标准库已经不再更新。通过STM32cubeMX的图形界面生成代码非常的方便。 一、程序框架的构想 1、STM32cubeMX 生成的代码与添加的应用代码分离&#xff1b; 2、利用 STM32cubeMX 重新生成代码&#xff0c;不影响应用代码&#xf…