来源|?bertcmiller
请看由EmGithub提供的rawsAssetsOracle
请看由EmGithub提供的rawdYdXLiquidator.sol
我花了大量时间尝试最小化我的gas消耗。很多我的设计选择都是以此为依据。关于这份合约的策略,有几点需要注意
我没有发送很多单独偿还和兑换的交易,相反,我选择把多笔偿还打包在一个交易里,这使得我的固定gas开销可以在多笔偿还里分摊,由此提高我的交易捆的竞争力。
我需要以最佳方式把ETH兑换成USDC再兑换成sUSD,并需要决定是在有函数exactInput还是exactOutput的Uniswapv3上交易。无论我怎么做都会在某个地方产生滑点,因此我选择有函数exactOutput的,以避免调用balanceOf。
在这些交易的精确性和gas效率之间存在折衷。只要我能偿还我的闪电贷,缺乏精确性也没什么问题,而且因为我要在gas效率上竞争,我选择了对它优化。
还有一些“战术上”的东西需要注意:
对所有东西的批准都前向负载到我的合约里的构建函数。这样,我可以在部署的时候支付开销,并减少执行时使用的gas。
BitSG币星杠杆ETF每日行情播报:截至6月8日10:00(GMT+8),杠杆ETF专区BTC3L/USDT当前净值0.213美元,涨幅7.75%;
ETH3L/USDT当前净值0.101美元,涨幅8.42%;
BSV3L/USDT当前净值0.226美元,涨幅4.7%;
XTZ3L/USDT当前净值0.076美元,涨幅4.81%;
ETC3L/USDT当前净值0.340美元,涨幅4.92%;
TRX3L/USDT当前净值3.831美元,涨幅9%;
LTC3L/USDT当前净值0.392美元,涨幅5.47%。
ETF全称为Exchange Traded Fund,目前BitSG币星已经上线BTC、ETH、EOS、XRP、BCH、BSV、LTC、ETC等多个币种。[2020/6/8]
我不从我的账户烧毁gastoken,而是从我的合约烧毁,同样是为了提高gas效率。
函数名称都是指定的,它们的函数选择器的前导符为0x,使用函数选择器也能稍微减少gas的使用。
与直接添加require语句相比,函数修改器需要消耗稍微多一点gas。
这份合约还有一些可以被优化的方法,例如使用gas费用而不用coinbase转账。
CoinBene满币合约研究院每日行情播报:据CoinBene满币合约研究院合约行情数据,截止今日15:30。
BTC合约现报价8790.5美元,24h跌幅2.95%,成交量30,765.718BTC,成交额约2亿美元。
ETH合约现报价2203.35美元,24h跌幅1.15%,成交量155,397.62ETH,成交额约3162万美元。
BSV合约现报价185.8美元,24h跌幅1.59%,成交量53,489.36BSV,成交额994万美元。
BCH合约现报价228.10美元,24h跌幅0.29%,成交量54,669.79BCH,成交额约1247万美元。[2020/5/25]
0xSisyphus非常慷慨提出给我借ETH,我就不用使用闪电贷了,这能大大节省gas。但随着时间推移,大额的贷款都还钱了,因此总的机会就减少了。我决定不接受0xSisyphus借的钱,因为机会不再大到使这样做是明智的。
总结:在这个阶段,我创建了一份智能合约,以执行捕获可得的MEV机会。要做到这点,需要认真思考正确的策略,以及如何最小化gas的使用。这份合约是经过多次迭代开发出来的,同时我进行数据上的工作,还把它放在了一个测试环境(Hardhat)里。
BBKX平台ETF专区每日行情资讯:据BBKX行情显示,BBKX交易平台ETF专区多个币对快速上涨,截至今日10:50(UTC+8),
BTC3S/USDT当前净值0.2508美元,日内涨幅7.63%,
ETC3S/USDT当前净值0.7796美元,日内涨幅7.22%,
LTC3S/USDT当前净值0.6380美元,日内涨幅6.59%。
杠杆ETF是一种锚定标的资产价格变化的指数基金。BBKX平台目前已经上线BTC、ETH、EOS多个主流币种以及HT、BNB、OKB等平台币。
BBKX成立于2019年6月,专注衍生品交易,已获得节点资本与链上基金联合投资。[2020/5/15]
偿还MEV和优化gas价格的经济学
有了一份精心设计的合约和对机会的深入了解,我需要改进我实现这个机会的策略。回顾一下,Flashbot的MEV-Geth客户端能有效运行竞拍,其中gas价格最高的交易捆胜出,会被打包到链上。这一重要事实意味着,我需要最大化我的交易捆的gas价格,而不是我支付的ETH总额。
记住了这点,并使用我之前收集到的数据,我制作了一个电子表格来优化我的gas价格。我的合约既有固定的gas开销,也有可变的gas开销。固定的gas开销用于取出闪电贷和做兑换。可变的gas开销来自我想要偿还的贷款数。我很自然地认为在某一点上,偿还一笔贷款的边际收益将低于gas开销。我运行了几次测试,以得出实际数字。以下是我的结果:
BBKX平台ETF专区每日行情资讯:据BBKX行情显示,BBKX交易平台ETF专区多个币对持续上涨,截至今日9:40(UTC+8),
ETC3L/USDT当前净值0.0721美元,日内涨幅17.23%,
LTC3L/USDT当前净值0.0578美元,日内涨幅13.55%,
EOS3L/USDT当前净值0.0326美元,日内涨幅10.50%。
杠杆ETF是一种锚定标的资产价格变化的指数基金。BBKX平台目前已经上线BTC、ETH、EOS多个主流币种以及HT、BNB、OKB等平台币,ETF交易手续费低至0.1%,管理费每倍0.1%。
BBKX成立于2019年6月,专注衍生品交易,已获得节点资本与链上基金联合投资。[2020/5/3]
请注意,这个结果有点令人惊讶——仅偿还前4笔(共30笔)的sUSD贷款是最省gas的。此后的每笔贷款都会产生更多的整体利润,但会降低我的交易捆的gas价格,并降低其竞争力。如果有其他人试图一次性偿还前10笔sUSD贷款,它们的gas消耗效率会降低接近30%!
考虑到未偿的sETH贷款更少了,只做sUSD贷款而不把sUSD和sETH合并到一笔交易是最合理的。因此,潜在的回报更少了,支付给矿工的钱也更少了,这使得它们的gas效率相对较低。看到这些发现,我不禁笑了。如果其他人贪婪,一下偿还了所有的贷款,或很懒惰,分开偿还,那么我就会赢。
zkSync发布生态进展更新:Celer Network已与zkSync 2.0测试网集成:11月21日消息,zkSync 发布生态系统的五个最新进展,包括跨链基础设施 Celer Network 已经与 zkSync 2.0 测试网集成,确认在 zkSync 的公平启动 Alpha 里程碑中增加了资产桥接和消息传递。MUX Protocol 的多链原生 DeFi 协议现已在 zkSync 2.0 测试网上运行。Pocket Network 确认其激励节点运行器网络即将进入 zkSync 生态系统。depocket.com 宣布其用户可以在其 DeFi 仪表板产品上跟踪 zkSync 的质押余额。BlockWallet 详细介绍了他们在零妥协 Web3 钱包中对 zkSync 2.0 测试网的支持的持续改进。[2022/11/22 7:53:49]
然而,其他的贷款还在那里,且偿还起来也是有利可图!我再次尝试优化我的gas价格,发现如果我偿还前4笔sUSD贷款,接下来最省gas的做法是一并偿还后6笔最大的sUSD贷款,再分别偿还最大的两笔sETH贷款。此外,假设我赢了,我可以使用从之前的交易捆中获利的ETH,而不再需要闪电贷了。
Flashbots竞拍和我的交易捆排序策略
重复一下情况:我既要在gas效率上竞争,又希望通过偿还每笔贷款来最大化我的收益。最佳策略是在每个交易捆中提交几笔偿还,分几个交易捆进行。这些交易捆会在Flashbots竞拍中被各自评估。然而,每笔交易都取决于来自pDAO的交易,是它使得贷款可以被任何人偿还。
如果pDAO交易不在交易捆里,那么该交易捆就会失败。但如果我的每个交易捆里都有pDAO交易,那么只有一个交易捆会成功。也就说,在一个交易捆被成功打包后,其他所有的都是无效的,因为它们会试图对pDAO交易重复打包。因此,我需要找到方法使得仅在我的第一个交易捆里发送pDAO交易,但同时确保我的其他交易捆不会因为它们没有pDAO交易而失败和被扔掉。
解决方案在于Flashbots竞拍的一个细微之处。在搜索器开始对竞拍使用“把戏”,降低交易捆合并后的矿工费用,Flashbots实行两轮的模拟。首先,所有的交易捆都被单独进行模拟,得出它们的gas价格并检查是否会失败。在第二轮,成功的交易捆会被按照gas价格排序,并再次进行模拟,以找出前后不一致的交易捆,确保没有交易捆的gas价格是低于预期的。除非你想这样做,否则你可能永远不会有一个交易捆是gas价格在合并后是降低了的。
我意识到我可以做上述搜索器相反的事:我的交易捆不是支付比预期更少的gas费,它们会在第二轮模拟中支付更多。为了做到这点,我将如预期般在第一个交易捆里打包pDAO交易,但要对剩余的交易捆做额外检查。这些交易捆将推断它们将会在第几“轮”模拟,然后相应改变它们的执行。如果它们在“第一轮”,它们将不会偿还任何贷款——因为它们尝试偿还的话会失败——然后无论如何都给矿工支付费用,以获得高的gas价格,通过第一轮的模拟。
通过了第一轮模拟后,这些交易捆将在第二轮模拟中跟在有pDAO交易的那个交易捆后面。到了这步,它们就能成功偿还贷款了。此外,这些交易捆的gas价格会比竞拍预期的更高,而不是更低,因此在这里改变执行不是问题。
我是如何确定我的交易捆是在哪一“轮”的呢?通过看我合约的余额。如果在区块的早期(即在前一个交易捆)我已经成功偿还贷款了,那么我的余额应该增加了,因为这样做能从中获得收益。因此,我增加了一个条件来检查我是否获得任何WETH收益,如果有,则继续偿还贷款。这在测试中是成功的。
总结:这个阶段还是关于策略。我使用早期得到的数据、合约和测试环境来思考我要竞争获得的MEV机会的经济学逻辑,以及最优策略会是什么。通过使用真实数据,我发现了一个令人惊讶的占有策略,但它很难执行。执行它需要一种新方式来提交交易捆。
第五步:执行
现在手上有了数据、合约、以及我可以开始执行的计划。基本上,我需要构建多个这样的交易捆:一方面可以执行我上文的计划,另一方面监听交易池里与Synthetix相关的交易以进行尾追。此时,大部分都是实现上的问题。
首先,我使用了Blocknative来监听pDAO账户,以了解相关交易的情况。我让任何从pDAO账户发出的交易信息都会发送到我的机器人。
然后,我同时运行两个监听脚本(一个用于sETH和sUSD),以从链上获取数据,得出最优的交易捆策略(例如先偿还前3笔sETH贷款,闪电贷X个ETH,并对后2个做相同的事,等),并生成我的合约需要的数据。我需要在每个区块如此运作,以防价格改变了或有人关闭了贷款,由此改变了最佳策略。这些结果保存在了本地。
最后,我有了一个执行脚本,它会接收发送到我的机器人的待打包交易信息,并从我的监听脚本加载出最佳打包交易捆策略的结果,自动构建交易捆,并把它们发送到Flashbots。
剩下的事情就是等待。在这段时间,最高额的sETH贷款被借款人偿还了,因此我关了机器人中的该部分。几个最高额sUSD贷款也结束了,这大大减少了预期的回报率。
第六步:关键时刻到了
有趣的是,有人试图通过向相关合约发送交易,想诱使机器人在早期失灵。我不确定这种情况是否也会出现在其他人的机器人上,但我的机器人没有被诱导成功。
几个小时后,pDAO发出了真实的交易。经过数周的研究和准备,我知道关键时刻到了。我这边一切都进行很顺利:我的监听脚本运行的很好,交易被接收,交易捆也被构建和提交了。
.....然后意外发生了。连续多个区块都没有Flashbots区块被挖出。我不仅因此失去了机会,也没有Flashbots搜索器赢得了机会。在区块顶部没有了Flashbots交易捆起阻挡作用,一个雄心勃勃的交易池机器人介入了,并抢走了所有有利可图的贷款。
尽管输了,但我认为我的方法仍然是正确的。我的优势在于策略和发现新机会,而不是参与PGA(最优GAS费竞拍)。因此,使用Flashbot给了我胜出的最佳机会。鉴于Flashbots已被广泛采用,遇上连续好几个非Flashbots区块也是相当不走运了。
MEV有时被认为是神秘莫测的超级程序员的领域,但它不一定是这样的。它可以是有趣和刺激的。而游戏规则,如果你要搜寻它们的话,可以说是开放的。这篇文章是关于我学习我所参与的游戏的规则的过程,根据这些规则我想出了策略,并最终执行该策略。尽管我输了,我学到了很多东西,并在此过程获得了乐趣。我希望你们也可以,并希望你和我一起参与下一轮的游戏。
原文链接:https://bertcmiller.com/2021/09/05/mev-synthetix.html
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。