AMM 套利者

news2024/11/16 15:45:02

AMM 套利者

 

理由

以太坊和其他支持 EVM 的区块链上有很多 AMM。其中许多 AMM 是 UniswapV2 的分叉项目或与 UniswapV2 具有相同的接口。这些 AMM 的列表:

  • Uniswap V2(以太坊)
  • 寿司交换(以太坊)
  • 煎饼掉期(BSC)
  • MDEX(BSC/heco) ...

一旦相同代币对的价格在不同的 AMM 上出现差异,我们就可以在这些 AMM 之间进行套利。我们可以将套利交易封装在一个 EVM 交易中,这样我们在发送交易之前即使价格变动也不会损失任何钱。

假设我们想对代币对 TokenX/WETH 进行套利交易。TokenX/WETH 对必须存在于以太坊(或其他 EVM 兼容区块链,如 BSC)上的多个 AMM 上。

  • 我们称 WETH 作为基础代币。可以是任何有实际价值的token,比如USDT/USDC/DAI/BUSD...
  • 我们将 TokenX 称为报价代币。它可以是任何令牌,甚至是没有价值的假令牌。套利完成后不会保留报价代币。
  • 套利后,只保留基础代币。所以我们的利润是以基础代币计价的。
  • 如果一对中的两个令牌都可以被视为基础令牌。套利后可以保留任何一个。

可以使用flashswapUniswap V2 进行套利:

  • 假设 pair0 和 pair1 是不同 AMM 上的两对相同的两个令牌。一旦价格出现分歧,我们就可以进行套利。
  • 我们调用FlashBot合约开始套利
  • 合约计算以报价代币计价的价格。假设 Pair0 中报价代币的价格较低:
  1. 通过使用 flash sawp,合约首先从 Pair0 借用一些报价代币,数量为x。合约需要偿还 Pair0 的债务。deby 可以用 base token 计价。这是 Uniswap V2 的功能。
  2. 在 Pair1 上出售所有借来的报价代币。合约获得数量为y2的基础代币。
  3. 用数量为y1的基础代币偿还 Pair0 的债务。
  4. 合同获得y2 - y1的利润。

该过程的重点是计算数量x的多少,以便我们可以获得尽可能多的利润。

假设Pair0和Pair1的初始状态如下:

对0对1
基础代币数量a1a2
报价代币数量b1b2

于是我们得到:

 

借用 Quote Token 的数量是一些,所以Delta b1Delta b2, let x = \Delta b,那么利润作为 x 的函数是:

 

我们想在函数获得最大值时计算 x 值。首先我们需要得到函数的导数:

 

当导数函数为0时,函数有一个最大值/最小值,我们可以设置一些条件来忽略最小值处的解。有可能解决

 

让:

 

前面的方程简化为一般二次方程:

 

我们可以得到解决方案:

 

解决方案 x 是我们需要从 Pair0 借的金额。

部署合约

  1. 编辑网络配置hardhat.config.ts。(目前在repo中是BSC,你也可以使用以太坊主网)

  2. 复制秘密示例配置:

$ cp .secret.ts.sample .secret.ts
  1. 在上面的配置中编辑私有和地址字段。

  2. 然后运行脚本进行部署。默认情况下,它部署到 BSC。如果您想部署到其他网络,您可能需要更改 .net 中的网络设置hardhat.config.ts。您还需要更改 中的 WETH 或其他代币地址deploy.ts,默认为 WBNB 地址。

$ hardhart --network XXX run scripts/deploy.ts

例如,

<span style="color:#24292f"><span style="background-color:#ffffff"><span style="background-color:var(--color-canvas-subtle)"><code>$ npx hardhat --network bscTestnet run scripts/deploy.ts
</code></span></span></span>

机器人实施

合约有一个函数getProfit(address pool1, address pool2),可用于计算两对之间的最大利润(以基础代币计价)。

机器人需要调用getProfit()以获得令牌对之间可能的利润。一旦有利可图,机器人就会调用flashArbitrage(pool1, pool2)进行套利。利润将留在合约地址中。

合约所有者可以调用withdraw()提取利润。

已经在打字稿中实现了一个机器人来运行它:

$ yarn run bot

BSC 上可用的 AMM

  • 煎饼交换
  • MDEX
  • 面包店交换
  • 七月掉期
  • 猿交换
  • 价值DeFi(不支持)

运行UT

$ hardhat test

FAQ

数学太多了,这个契约到底是干嘛的?

简单来说,它将不同 AMM 之间的价格移动到同一水平。这样做你就会获利。这份合同帮助您获得最大的利润。而且它使用 flashswap,所以你只需要很少的钱(只是一些 gas 费用)来运行它。

我怎么知道合同的正确性?

默认情况下,测试使用 BSC 主网的分叉网络(感谢强大的 hardhat 工具)。中的测试SwapTest.ts表明合约可以正确地进行套利。你可以自己查一下。

但我没有通过运行你的机器人赚取任何利润

那么,在野外运行的机器人太多了,尤其是在 ETH 和 BSC 中。这个 repo 中的机器人代码太简单了,没有竞争力。你不能期望仅仅运行我的代码就可以赚到一大笔钱。您需要找出一些策略来自己赚钱。

如何更改机器人正在监控的令牌对?

第一次,机器人使用bscBaseTokensbscQuoteTokens, 和bscDexesintokens.ts自动获取所有可能的令牌对并将它们保存到bsc-pairs.json. 因此它可以在下次机器人启动时重用 json 文件。

如果你想要一些其他的对。您可以删除bsc-pairs.json并编辑上面的三个变量。重新运行机器人,以便它使用新的对。您可以在 中检查新对bsc-pairs.json

有什么建议可以提高竞争力吗?

  • 降低网络延迟,您可以使用自己的节点。
  • 更高的汽油价格,确保您的交易得到足够快的处理以获利。这就像机器人之间的竞争,如果他们同时找到有利可图的机会。
  • 监控较少的令牌,您监控的越多,机器人循环的频率就越低。您可以运行多个机器人来监控单独的令牌对。
  • 转到其他一些网络,例如 FTM/Matic/...,它们上运行的机器人可能较少。
  • 在balancer/curve/0x中做一些清算、套利等其他工作……需要自己实现这些功能。

为什么在运行“npx hardhat compile”时终端会卡住?

如果你在代理后面运行安全帽,也许你会遇到HH502: Couldn't download compiler versions list. Please check your connection运行时的错误npx hardhat compile。为了解决此错误,您需要在终端中设置HTTP_PROXYHTTPS_PROXY。根据这个issue,hardhat version 2.4.0及之后的版本已经支持HTTP_PROXYor HTTPS_PROXY. 所以你需要在 package.json中将 hardhat 版本从 更改2.1.2为或更高版本。2.4.0

运行“npx hardhat run --network xxx bot/index.ts”时出现错误

详细错误是TSError: x Unable to compile TypeScript. bot/index.ts:63:13 - error TS2571: Object is of type 'unknown'。请运行您的 TypeScript 版本为 ^4.2.4。如果您的 TypeScipt 版本高于 4.4.x,您可能会遇到此错误。

错误“无法估计气体;交易可能会失败或可能需要手动气体限制”

如果您遇到此错误,请不要感到惊讶。首先,这个 bot 在 bscTestnet 中测试得不好。所以如果你想运行好它,你最好将它部署在 bscMainnet 中。其次,由于有很多令牌对已弃用,因此您需要修改pairs-bsc.json.

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

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

相关文章

SpiderPool - 云原生容器网络 IPAM 插件

SpiderPool 来源于容器网络落地实践的经验积累&#xff0c;是「Daocloud 道客」开源的原生容器网络 IPAM 插件&#xff08;github&#xff1a;https://github.com/spidernet-io/spiderpool&#xff09;&#xff0c;主要用于搭配 Underlay CNI 实现容器云平台精细化的管理和分配…

策略验证_指标买点分析技法_运用boll布林线指标选择买点

写在前面&#xff1a; 1. 本文中提到的“股票策略校验工具”的具体使用操作请查看该博文&#xff1b; 2. 文中知识内容来自书籍《同花顺炒股软件从入门到精通》 3. 本系列文章是用来学习技法&#xff0c;文中所得内容都仅仅只是作为演示功能使用 目录 解说 策略代码 结果 解…

基于云原生网关的可观测性最佳实践

作者&#xff1a; 井轶 为什么要进行可观测性建设 可观测性并不是一个新词&#xff0c;该词来源于控制理论&#xff0c;是指系统可以由其外部输出推断其其内部状态的程度&#xff0c;随着 IT 行业几十年的发展&#xff0c;IT 系统的监控&#xff0c;告警&#xff0c;问题排查…

【附源码】计算机毕业设计JAVA学生信息管理系统

【附源码】计算机毕业设计JAVA学生信息管理系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA my…

联想Filez助力知名生物制药企业 建立业务数据安全体系

苏州某生物制药企业是一家抗体研发企业&#xff0c;其研发生产基地设在苏州。主要从事临床样品&#xff08;原液和成品&#xff09;的开发和生产&#xff0c;致力于通过持之以恒的研发和专业的生产技术&#xff0c;以最快的速度实现生物制品的批准。 随着企业各项业务的快速发展…

Redis——》数据类型

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Redis——》数据类型5种基本类型3种特殊类型数据类型和底层数据结构5种基本…

第一个 GoWeb 程序,三款主流框架 Beego、Gin 和 Iris 快速入门

1、什么是web应用 Web应用程序是一种可以通过Web访问的应用程序&#xff0c;程序的最大好处是用户很容易访问应用程序&#xff0c;用户只需要有浏览器即可&#xff0c;不需要再安装其他软件。 一个Web应用程序是由完成特定任务的各种Web组件构成的并通过Web将服务展示给外界。…

网络是怎样连接的--生成HTTP请求消息过程

文章目录1.1 何为网址1.2 解析网址1.3 HTTP在干嘛1.4 生成http请求和响应1.1 何为网址 网址&#xff0c;准确来说应该叫URL,比如以http://开头的那一串东西.但实际上除了“http:”&#xff0c;网址还可以以其他一些文字开头&#xff0c;例如“ftp:”“file:”“mailto:”等。而…

免费申请Jetbrains全家桶

文章目录Jetbrains全家桶免费申请的人群学生和老师申请的要求申请方式申请流程解决收不到邮件的问题编辑内容进行认证申请成功Jetbrains全家桶 Jetbrains是著名的编程工具商业软件提供商&#xff0c;旗下有很多软件。包括IDE、团队开发工具、插件和微软.Net辅助工具、包括自创语…

[附源码]java毕业设计小型银行贷款管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

C\C++刷题DAY4

目录 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 1.第一题 206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;调转指向关系&#xff0c;使用双指针的思想 1指向2&#xff0c;改成2指向1&#xff0c;以此类推。 参考代码&#xff1a; struct L…

2022年NPDP新版教材知识集锦--【第三章节】(5)

【系统工程】 系统工程的概念 系统工程原理将系统思维和系统工程过程模型的概念结合起来&#xff0c;通过设计、项目管理工具和方法的系统和集成过程将问题转化为解决方案。 所有系统都由具有属性或功能的部分组成&#xff0c;元素之间通过关系相互联系。 系统复杂性由结构…

想学爬虫爬取网页,但是不知道流程?

爬取网页总体概述&#xff1a; 1.使用urllib请求网页&#xff0c;获取网页源码。 2.使用bs4配合re正则表达式进行页面数据解析&#xff0c;获取到自己想要的数据。 3.使用pymysql保存到数据库或xlwt保存成excel文件。 温馨提示&#xff1a;学习之前需要先了解py基础知识&#x…

PTA题目 计算符号函数的值

对于任一整数n&#xff0c;符号函数sign(n)的定义如下&#xff1a; 请编写程序计算该函数对任一输入整数的值。 输入格式: 输入在一行中给出整数n。 输出格式: 在一行中按照格式“sign(n) 函数值”输出该整数n对应的函数值。 输入样例1: 10输出样例1: sign(10) 1输入样…

住宅代理详细介绍——助您快速入门!

Oxylabs的高级代理池能够为客户提供来自世界各地的1亿多个住宅代理&#xff0c;并且其规模还在不断壮大中&#xff0c;即使是难搞的网络抓取任务也能够处理。住宅代理能轻松从复杂的目标中收集数据&#xff0c;帮助您在无需面对CAPTCHA验证或封锁的情况下实现抓取。 想要全方位…

在 Kubernetes 上最小化安装 KubeSphere

文章目录什么是 KubeSphere搭建环境准备工作部署 KubeSphere卸载 KubeSphere常见问题什么是 KubeSphere KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统&#xff0c;完全开源&#xff0c;支持多云与多集群管理&#xff0c;提供全栈的 IT 自动化运维能力…

免费公众号题库

免费公众号题库 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳转…

java之《图书管理系统》庖丁解牛

&#x1f387;&#x1f387;&#x1f387;作者&#xff1a; 小鱼不会骑车 &#x1f386;&#x1f386;&#x1f386;专栏&#xff1a; 《java练级之旅》 &#x1f393;&#x1f393;&#x1f393;个人简介&#xff1a; 一名专科大一在读的小比特&#xff0c;努力学习编程是我…

大数据挖掘建模平台是怎样的?

大数据挖掘建模平台是可视化、一站式、高性能的数据挖掘与人工智能建模服务平台。面向企业级用户的大数据挖掘建模平台。平台采用可视化操作方式&#xff0c;通过丰富内置算法&#xff0c;帮助用户快速、一站式地进行数据分析及挖掘建模&#xff0c;可应用于处理海量数据、高复…

初识VisionPro应用开发

文章目录一、引言二、VisionPro应用开发指南1. 上手指南1.1. VisionPro开发概述1.2. 高级开发功能2. 选择应用开发路径&#xff08;方式&#xff09;2.1. 路径1&#xff1a;用QuickBuild和应用程序向导生成的操作接口进行交互式开发2.2. 路径2&#xff1a;用QuickBuild和自定义…