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

前言

该脚本用途:一键可以完成与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 这个方法
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布道。希望各位看的开心,用得开心。🎉🎉🎉
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值