# 前端web3入门脚本六:套利夹子机器人,羊毛党必备 **Published by:** [Bot80926](https://paragraph.com/@bot80926/) **Published on:** 2023-05-04 **URL:** https://paragraph.com/@bot80926/web3-2 ## Content Bot80926 于 2023-05-03 10:56:26 首次发布 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。一、前言DEX上有很多零风险套利的机会,包括三角套利,夹子机器人… 今天主要介绍一下架子机器人的思路和简易实现。二、实现思路套利原理:夹子机器人的核心:在韭菜买入前以更低价格买入,并再韭菜买入后卖出,赚取差价 / 在韭菜卖出前以更高价格将token卖出 ,并在韭菜卖出后以低价将原token买回。所谓夹子,就是夹的交易用户,赚取差价。代码实现思路:如何知道何时有用户交易? 需要监听链上待打包交易,可用websoket去监听链上那么多交易事件,怎么知道哪一笔是我们要的? 筛选交易的 transaction.to / transaction.from 是目标DEX 的 router 合约地址,同时还需要过滤掉我们自己机器人的钱包地址,避免自己夹自己,进入死循环。如何做到在用户买前买,卖前卖? 手动设置比用户更高的Gas,让矿工优先去打包我们的交易如何区分该笔交易调用的什么方法,我该怎么触发交易去夹它? 用 inteface 去 decode transaction.data,去判断swap的token中是否有原生token,选择不同的合约方法去调用 swapExactETHForTokens / swapTokensForExactTokens三、代码片段创建监听:const customWsProvider = new ethers.providers.WebSocketProvider(wss); customWsProvider.on("pending", (tx) => { // todo pending logic }) 在第一步基础上,筛选目标DEX的交易customWsProvider.on("pending", (tx) => { if (transaction && transaction.to && transaction.to.toLowerCase() === ROUTER.toLowerCase() && transaction.from !== blackAddress) { // todo } }) 判断交易方向,手动设置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 } } decode 交易方法,决定调用函数:const iface = new ethers.utils.Interface(abi) const result = iface.decodeFunctionData('swapExactETHForTokens', transaction.data) 完整代码: 我的 Github 仓库 欢迎 fork / star / 提 issue,共同探讨更好的方案。 🌞四、TODO该脚本目前支持原生代币ETH相关夹子套利,后续支持全币种websocket 监听稳定性优化approve token 流程优化 ## Publication Information - [Bot80926](https://paragraph.com/@bot80926/): Publication homepage - [All Posts](https://paragraph.com/@bot80926/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@bot80926): Subscribe to updates