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

news2024/7/6 20:06:48

一、前言

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 流程优化

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

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

相关文章

Curator中的分布式锁解读

目录 基本介绍 基本配置 可重入锁InterProcessMutex 不可重入锁InterProcessSemaphoreMutex 可重入读写锁InterProcessReadWriteLock 联锁InterProcessMultiLock 信号量InterProcessSemaphoreV2 栅栏barrier 倒计数器 基本介绍 Curator是netflix公司开源的一套zookeeper…

C语言力扣简单题-无重复字符的最长子串

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 无重复字符的最长子串 题目: 代码思路: 代码表示: 无重复字符的最长子…

【C++】lambda表达式

文章目录 lambda表达式lambda概念lambda表达式的格式关于捕获列表常见问题: 使用lambda表达式交换两个数lambda表达式底层原理 lambda表达式 lambda概念 lambda表达式本质是一个匿名函数(因为它没有名字),恰当使用lambda表达式可以让代码变得简洁.并且可以提高代码的可读性 例…

ChatGPT实现HTML网页文本提取

网页自动化工具 既然ChatGPT对于编程语言有非常强大的理解能力,那么它是否可以用来自动化地处理网页呢?答案是肯定的。ChatGPT可以使用机器学习算法来识别网页元素中的文本,并抽取出有用的信息。 例如我们提供一段层数比较多的相对来说较为…

【五一创作】|【C++】AVL树的实现

文章目录 1.AVL树概念2. AVL树性质3.AVL树的实现insert插入情况分析更新平衡因子旋转处理左单旋右单旋在insert中判断左右单旋的条件双旋转左右双旋 整体代码 1.AVL树概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树&#…

PCIe数据链路层图文详细总结-PCIe专题知识(二)

目录 前言一、简介1.1 接收部件组成1.2 发送部件组成 二、数据链路层功能详细介绍2.1 DLLP介绍2.2 ACK/NAK协议2.3 发送端逻辑2.3.1 发送端TLP包处理总流程2.3.2 使用ACK/NAK协议详解 2.4 接收端逻辑2.4.1 接收端TLP包处理流程2.4.2 如何使用ACK/NAK协议 2.5 数据链路层发送报文…

Java每日一练(20230503)

1. 外观数列 给定一个正整数 n ,输出外观数列的第 n 项。 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列: countAndSay(1) "1"c…

[AION]我眼中的《永恒之塔私服》

当我第一次看到《永恒之塔私服》我被它那华丽的画面吸引了。      三维做的很逼真,他的三维技术,华丽的三维景象,从maya设计者专业的角度上说,他是一部做工完美的游戏,不管是他的背景还是他的人物。都比以前很多游…

Python每日一练(20230503)

目录 1. 外观数列 🌟🌟 2. 找出素数对 ※ 3. 子集 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 外观数列 给定一个正整数 n…

Dockercompose编排

目录 一、Dockercompose简介 1、compose概述 2、YAML简介 1、概述 2、YAML支持的数据结构 二、compose部署 1、Docker compose环境安装 Docker compose常用字段 Docker compose常用命令 Docker Compose文件结构 2、准备依赖文件 3、编写配置文件docker-compose.yml…

fps枪械案例

文章目录 一、 介绍二、 知识点三、 鼠标移动控制视角四、 人物行走、奔跑、跳跃、下蹲、音效五、 射击、射速、瞄准、弹痕、枪火、弹壳、文本六、 手臂摇摆七、 步枪切换到手枪八、 切枪效果九、 添加各种动画 一、 介绍 经典fps案例 行走、奔跑、跳跃、切枪、换弹、武器展示…

gitlab搭建以及自动化部署

一、安装gitlab 首先下载gitlab的安装包,地址如下: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/bionic/main/g/gitlab-ce/ 然后安装下载的包即可,一般还需要安装openssh-server等依赖包,在安装gitlab包之前可以…

正则表达式-基本元字符和语法规则

© Ptw-cwl 文章目录 字符匹配元字符.元字符[]元字符[^]元字符*元字符元字符?元字符{}元字符|元字符()元字符^元字符$元字符\元字符\d元字符\w元字符\s元字符\b元字符\B元字符*?、?、??、{n,m}?元字符(?)、(?!)元字符(?:)元字符\1、\2等元字符^、$元字符&#x…

【刷题之路Ⅱ】LeetCode 274275. H指数ⅠⅡ

【刷题之路Ⅱ】LeetCode 274&275. H指数Ⅰ&Ⅱ 一、题目描述二、解题1、方法1——排序1.1、思路分析1.2、代码实现1.3、升级到275题的二分法1.3.1、思路分析1.3.2、代码实现 2、方法2——计数排序2.1、思路分析2.2、代码实现 一、题目描述 原题连接: 274. H…

C语言专升本编程题复习

1.求100以内的素数 int main( ) { int i,j,count0;for(i1;i<100;i){for(j2;j<i;j){if(i%j0)break;}if(ij){count; printf("%d ",i);if(count%50)printf("\n");}} }2.求1000以内的完数 * 完数&#xff1a;等于其因子&#xff08;不含本身&…

【五一创作】SAP入门到放弃系列之批次确定配置

概念&#xff1a; 在后勤涉及物料移动或消耗流程中&#xff0c;从采购到生产到销售&#xff0c;涉及启用批次的物料&#xff0c;需要一次又一次地为出入库业务中的库存指定批次。如果企业的出库库批次管理有一定的管理要求&#xff0c;比如先进先出&#xff0c;就可以针对货物…

基于Java语言开发B/S架构实现的云HIS

一、云HIS系统框架简介 1、技术框架 &#xff08;1&#xff09;总体框架&#xff1a; SaaS应用&#xff0c;全浏览器访问 前后端分离&#xff0c;多服务协同 服务可拆分&#xff0c;功能易扩展 &#xff08;2&#xff09;技术细节&#xff1a; 前端&#xff1a;AngularNg…

级数可视化

泰勒级数 数学家们普遍偏爱多项式&#xff0c;如果评选一下高等数学里面最重要的公式&#xff0c;泰勒公式一定榜上有名&#xff0c;泰勒公式的核心思想就是把一个给定的任意函数&#xff0c;展开成多项式的形式&#xff0c;如果是有限项&#xff0c;就像作泰勒多项式&#xf…

深入了解云计算:发展历程、服务模型、未来趋势

开篇博主 bluetata 的观点&#xff1a;PaaS 服务必将是未来10年云计算权重最高的趋势&#xff08;05/02/2023 15:32&#xff09; 文章目录 一、前言二、认识了解云计算2.1 什么是云计算2.1.1 维基百科上的云计算定义2.1.2 NIST 标准云计算定义2.1.3 如果被面试如何解释云计算 2…

MYSQL-数据库管理(下)

查看数据库信息 show database 查看数据库中的表信息 use 数据库名 #切换到书库中 show tables show tables in mysql 显示数据表的结构&#xff08;字段&#xff09; describe user; Field:字段名称 type:数据类型 Null :是否允许为空 Key :主键 Type:数据类型 Null :是否…