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

By [Bot80926](https://paragraph.com/@bot80926) · 2023-05-04

---

Bot80926 于 2023-05-03 10:56:26 首次发布

版权声明：本文为博主原创文章，遵循 [CC 4.0 BY-SA](http://creativecommons.org/licenses/by-sa/4.0/) 版权协议，转载请附上原文出处链接和本声明。

一、前言
----

> 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)
    

![](https://storage.googleapis.com/papyrus_images/0b6993e8913d58494438fb8e83bc88ffc1505b96fd9255a1ea652cb5bc1bc3c4.png)

1.  完整代码： [我的 Github 仓库](https://github.com/Bot80926/swap-arbitrage-bot) 欢迎 fork / star / 提 issue，共同探讨更好的方案。 🌞
    

四、TODO
------

*   该脚本目前支持原生代币ETH相关夹子套利，后续支持全币种
    
*   websocket 监听稳定性优化
    
*   approve token 流程优化

---

*Originally published on [Bot80926](https://paragraph.com/@bot80926/web3-2)*
