前端web3入门脚本六:套利夹子机器人,羊毛党必备

一、前言

DEX上有很多零风险套利的机会,包括三角套利,夹子机器人… 今天主要介绍一下架子机器人的思路和简易实现。

二、实现思路

套利原理

  • 夹子机器人的核心:在韭菜买入前以更低价格买入,并再韭菜买入后卖出,赚取差价 / 在韭菜卖出前以更高价格将token卖出 ,并在韭菜卖出后以低价将原token买回。
  • 所谓夹子,就是夹的交易用户,赚取差价。

代码实现思路

  1. 如何知道何时有用户交易? 需要监听链上待打包交易,可用websoket去监听
  2. 链上那么多交易事件,怎么知道哪一笔是我们要的? 筛选交易的 transaction.to / transaction.from 是目标DEX 的 router 合约地址,同时还需要过滤掉我们自己机器人的钱包地址,避免自己夹自己,进入死循环。
  3. 如何做到在用户买前买,卖前卖? 手动设置比用户更高的Gas,让矿工优先去打包我们的交易
  4. 如何区分该笔交易调用的什么方法,我该怎么触发交易去夹它? 用 inteface 去 decode transaction.data,去判断swap的token中是否有原生token,选择不同的合约方法去调用 swapExactETHForTokens / swapTokensForExactTokens

三、代码片段

  1. 创建监听:
const customWsProvider = new ethers.providers.WebSocketProvider(wss);
customWsProvider.on("pending", (tx) => { // todo pending logic })
  1. 在第一步基础上,筛选目标DEX的交易
customWsProvider.on("pending", (tx) => { 
    if (transaction && transaction.to && transaction.to.toLowerCase() === ROUTER.toLowerCase() && transaction.from !== blackAddress) {
		// todo
	}
 })
  1. 判断交易方向,手动设置Gas price,
function calculate_gas_price(action, amount) {
  if (action === "buy") {
    return amount.add(100000000) // 0.1 Gwei
  } else {
    return amount.sub(100000000) // 0.1 Gwei
  }
}
  1. decode 交易方法,决定调用函数:
const iface = new ethers.utils.Interface(abi)
const result = iface.decodeFunctionData('swapExactETHForTokens', transaction.data)

运行结果如下,博主在MojitoSwap上成功测试运行了机器人,并能够获利。
在这里插入图片描述

  1. 完整代码: 我的github仓库 欢迎 fork / star / 提 issue,共同探讨更好的方案。 🌞

四、TODO

  • 该脚本目前支持原生代币ETH相关夹子套利,后续支持全币种
  • websocket 监听稳定性优化
  • approve token 流程优化
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值