首页 > 其他分享 >LP三明治机器人

LP三明治机器人

时间:2023-05-09 18:44:20浏览次数:43  
标签:SYC 三明治 机器人 WETH LP 交易

2022 年 11 月 4 日,EigenPhi检测到一种全新类型的三明治交易:一个三明治机器人挤压了一笔增加流动性的交易,根据我们的常识,这很奇怪。这样做有利可图吗?有什么限制吗?与之前关于包括 37 笔交易的巨大三明治交易的文章不同,该机器人展示了一种截然不同的创新策略。而本文将带你一探AMM旗下LP的现状有多危险。

摘要和代币流程图

file

从这笔交易中,三明治机器人获得了 0.922832 WETH 的收入。减去前台交易和后台交易的 gas 成本后,剩余的利润约为 0.023346 WETH。该机器人在一揽子交易中实现了完美的无风险套利,没有对 WETH 以外的资产进行风险敞口。

交易步骤

下图展示了每笔交易的代币流向图

file

该策略的定量分析

为什么三明治机器人可以从增加流动性的交易中获利?它的收入究竟从何而来?它是否获得了最大可能的收入?谁是受害者?

接下来,我们将对此策略进行详细分析。你会看到,与被挤压交易的用户相比,这个池子的所有流动性提供者承担的损失最大。更有趣的是,三明治机器人有可能在没有严格先决条件的情况下自行指导这项交易。

常量和变量

首先,我们列出了计算三明治机器人收入所需的常量和变量。如下表所示,我们用一串字符来表示夹心交易前后池子状态对应的参数。对于每个字符,我们用下标表示对应的时间,用上标表示对应的token。在这种情况下,token0 表示 SYC,token1 表示 WETH。

这是表中的上一个[ Previous Swap。](https://etherscan.io/tx/0x2c8cdc653aa63c3b8c38bfaa89f6dca820e875ab80198941aef05073404e988e)

file

需要几个常量来进行计算,我们可以从事件日志和交易数据中获取它们。要理解这里的计算逻辑,您可能需要一些与Uniswap V2 及其Router合约相关的背景知识。例如,swap()和等函数中的逻辑addLiquidity()

file

file
file

约束条件

其次,三明治机器人也应该遵守一些约束条件。

file

优化问题

现在我们关注优化问题。给定流动资金池的初始状态和相对恒定的参数,我们将攻击向量公式化为涉及所有已定义参数的约束优化问题。

file

我们可以通过分析方法或模拟来解决这个问题。

file

file

黑暗中的受害者

本质上,机器人的收益来自于一笔相同数量的掉期交易在增加流动性前后所面临的滑点的变化。换句话说,它是针对滑点变化的无风险套利。作为交易对手的有限合伙人呢?他们的 PnL 是多少?

基于前面的分析,我们继续计算LP在本次交易中的盈亏。我们考虑两种情况并定义如下所列的参数。

file

仿真结果

情况1:

file

上图右下面板显示,三明治机器人设置的参数对应其他LP承受的最大损失。

除此之外,我们还可以发现,超过这个门槛,机器人的收益主要来自中间LP的损失,随着机器人投入池中的WETH越来越多,其他LP的掉期费收益将超过其损失。

从这个角度来看,中间 LP 设置的 reversion checkpoint 提供了关键的保护。

而且,中间LP设置的reversion checkpoint巧妙地与其他LP最大损失对应的阈值重合。有人想知道这是否是一项自我导向的三明治交易;至少,它远不是一个失败者三明治机器人既可以发起三明治交易,也可以发起增加流动性的交易,前提是保证总损益为正。

从左下图看,在特定的参数设置下,中间的LP似乎甚至可以从这笔交易中获利,值得仔细检查。

案例二:

如果我们假设中间的 LP 是一个独立的个体,不知道三明治机器人,我们应该用另一种方式计算它的指定本金。三种参与者的PnL结果如下图所示。

在这种情况下,sandwich bot 设置的初始参数不再对应其他 LP 的最大损失,如果为真则交易将被撤销。

案例 1 更可能与三明治机器人的策略一致。

file

为简化分析,以上计算均未考虑bot实际支付的Gas费用,结论并没有因此而改变。

自我导向的三明治交易会赚钱吗?

这个案例值得我们思考和学习的地方更多。例如,

  • 什么样的资金池适合做类似的交易?
  • 三明治机器人可以在没有第三方发起增加流动性交易的情况下实施该策略吗?

特定案例的推论

要找到上述问题的答案,需要对本文中的模型进行概括。在进行系统的研究之前,我们可以进行一个简短的反事实推理来了解一下。

file

考虑到前台和后台交易的收入和利润分别为 0.922832 WETH 和 0.023346 WETH,我们可以得出结论,三明治机器人无法通过模拟中间 LP 获利。

模拟模型

有人可能会问,这种策略是否取决于池及其状态?解决这个问题需要一个通用的模型和系统的学习。我们先在这里给出一个分析框架,并在以后的报告中分享更深入的研究。

file

我们在下表中列出了这六个步骤对 pool 的影响。

file

结论

我们强调从这个案例中获得的关键见解:

  • 一个三明治机器人通过在 Uniswap V2 的 SYC-WETH 池中夹入一笔增加流动性的交易,赚取了近 1 WETH 的盈余。验证者通过汽油费获得大部分收入。
  • 新策略可以看作是针对池中流动性前后滑点变化的无风险套利。
  • 与中间 LP 相比,其他 LP 在这种情况下承担的损失要大得多。sandwich bot 设置的参数和中间 LP 施加的检查点约束巧妙地与其他 LP 的最大损失对应的阈值相吻合。
  • LP 应谨慎设置检查点阈值,例如在发行增加流动性交易时要增加的最低流动性。否则,他们可能会因为这种三明治机器人而蒙受损失。
  • 从我们的初步分析来看,机器人无法在不等待第三方增加流动性交易的情况下自行指导整个交易步骤。但是需要用一种更系统的模型来验证这一点。
  • 并且该策略对池的初始状态非常敏感,机器人必须将其参数调整到特定范围以从其他 LP 获得最大盈余。

通过Github 获取更多区块链学习资料!

https://github.com/Manuel-yang/BlockChainSelfLearning

标签:SYC,三明治,机器人,WETH,LP,交易
From: https://www.cnblogs.com/YanAemons/p/17385951.html

相关文章

  • delphi 初识内存流: 从设置用户头像到从数据库存取图片到的过程
    所谓"流",就是一段数据或是一块内存;在进行流操作时,我们不必关心流中的数据到底是什么;只需要知道流的大小和当前的指针位置.所以流只有两个属性: Size、Position.对流的操作,不过就是读取和写入.所以流最主要的方法就是Read和Write.在很多控件的使用中,读取主要用Lo......
  • C#使用词嵌入向量与向量数据库为大语言模型(LLM)赋能长期记忆实现私域问答机器人落地
     本文将探讨如何使用c#开发基于大语言模型的私域聊天机器人落地。大语言模型(LargeLanguageModel,LLM这里主要以chatgpt为代表的的文本生成式人工智能)是一种利用深度学习方法训练的能够生成人类语言的模型。这种模型可以处理大量的文本数据,并学习从中获得的模式,以预测在给定的......
  • 光储直流微电网、光伏,蓄电池,超级电容光储并网simulink仿真模型,储能由蓄电池和超级电容
    光储直流微电网、光伏,蓄电池,超级电容光储并网simulink仿真模型,储能由蓄电池和超级电容构成,采用lpf低通滤波器实现功率分配,光伏单元通过扰动观察法实现mppt控制。ID:6375673833486777......
  • alpine在线扩容系统盘(非ivm)
    扩容需要用到2个命令我们需要使用到 resize2fs 运行 apkadde2fsprogs-extra 安装我们需要使用到 growpart 运行 apkaddcloud-utils-growpart 安装扩容前node215:~#fdisk-lDisk/dev/sda:500GiB,536870912000bytes,1048576000sectorsDiskmodel:VMware......
  • 解决 VirutalBox 安装 Alpine Linux 出现 Kernel Panic 的问题
    问题如图,使用默认配置安装AlpineLinux时总是会启动都启动不了,找了半天后终于在官方论坛上找到原因了。解决在设置里分配大于1个的cpu就行,如图我这里给的是2个,分配完毕后重新启动就正常了......
  • delphi cannot make a visible window modal报错的解决过程
    抛出问题: 排除过程:1.在TFrmChangePW窗口的create事件里打断点,结果发现,根本没停顿,所以判断问题不在TFrmChangePW窗体里,而是showmodal这语句里出了问题,点中断,跳到抛出错误的地方:2.if里的四个条件,检查了第一个,第二个和第四个都是没问题的,第三个(fsModalinFFormS......
  • Java NullPointerException 没有打印堆栈
    ref  https://www.bbsmax.com/A/obzbgx41JE/ 周五在公司搭好的ELK上查看日志,组长让看看其中NullPointerException出现很多的原因。通过NullPointerException搜索,点看其中一个查看,发现异常的信息就一行java.lang.NullPointerException,并没有堆栈信息。看了几个都没有,然后翻......
  • java.lang.NullPointerException解决方案,以及发生的原因。
    其实解决方案,倒是挺简单的,eclipse的console里,报错的地方点一下,就知道在哪一行了。真正要注意的是怎么避免这种情况的发生。通常情况下,这种错,发生在取数据的过程,比方从数据库查询数据,亦或者说是,发生在数据传输的过程中。譬如1packagetest;23importjava.util.List;......
  • Delphi工具开发的windows应用程序,自动化测试工具
    DUnit:DUnit是一种单元测试框架,可以帮助开发人员编写单元测试用例,测试Delphi应用程序的各个模块和组件。TestComplete:一个功能强大的自动化测试工具。可以对Delphi应用程序进行测试,支持多种脚本语言和测试框架,如JScript、VBScript、Python、JUnit等DelphiAutomatedTestingSui......
  • 【Oracle】使用xmlagg(xmlparse(content()).getclobval()拼接信息
    使用xmlagg(xmlparse(content()).getclobval()拼接信息简单来说格式如下xmlagg(xmlparse(content(内容||分割符)).getclobval()内容就是使用显示的数据部分,分隔符不同效果不同,分隔符可以使用chr()函数无分隔符xmlagg(xmlparse(content('这是一个字段:'||v.supercode||'、......