目录

Web3系列教程之高级篇---13:矿工如何通过轻微调整让区块链发挥对他们有利的作用

MEV: Maximal Extractable Value 最大可提取值

https://hicoldcat.oss-cn-hangzhou.aliyuncs.com/img/20220813084720.png

MEV是区块链世界中一个相对较新的概念,也是一个带有很多争议的概念。它指的是除了标准区块奖励之外,可以从区块生产中提取的最大价值。

以前,它曾被称为矿工可提取价值,因为矿工最适合从区块生产中提取价值,但随着我们走向股权证明,矿工被验证者取代,已经有了一个更通用的新名字,称为最大可提取价值。

什么是MEV?

简而言之,这是一个通过在链上进行某些类型的交易来提取价值(利润)的概念,这些交易本身并不是区块奖励。最初,它开始发生是因为矿工可以控制他们想在一个区块中包括哪些交易,以及以何种顺序。由于在创建区块时,矿工可以按照自己的意愿包括、排除和改变区块的交易,这意味着他们可以将一些交易与其他交易相提并论,通过这样做获得一些额外的利润。请注意,我们现在谈论的是矿工,但在合并后事情会发生变化。

通常情况下,当某个交易必须包含在某个区块(通常是当前区块)中才能真正获利时,MEV就会发生。此外,它有时还可能需要在区块中的特定位置–例如,在合同部署后立即买入竞争激烈的NFT drop,在合同部署的同一区块内,不像我们常人至少要等到下一个区块,这样Metamask才会识别出合同已经部署,然后才会发出交易,此时天然气价格可能已经大幅上涨。

MEV提取

理论上,MEV只能由矿工提取,这在早期是真的。由于矿工对区块生产有控制权,他们可以为自己保证执行有利可图的交易,如果交易没有被证明是有利可图的,就不把它纳入区块。然而,今天,MEV的很大一部分是由被称为Searchers的独立网络参与者提取的。我们将了解更多关于他们的具体工作,但总的来说,他们运行复杂的算法来寻找在链上获利的机会,并有机器人自动提交这些交易给网络。

矿工仍然继续获得搜索者赚取的一部分MEV利润,因为搜索者一般倾向于支付非常高的气体费用,以试图确保他们的交易被包括在区块中。我们很快会看一些例子。

搜索者

Searchers是正在寻找机会进行有利可图的交易的参与者。这些人一般都是普通用户,当然,他们会编码。矿工从这些搜索者那里得到好处,因为 "Searchers"通常必须支付非常高的天然气费用,才能真正进行有利可图的交易,因为竞争非常激烈。我们研究的一个例子是我们的闪.电.贷例子中的DEX套利。虽然套利可以手动完成,但你成功做到的机会微乎其微。搜索者运行机器人来检测链上的套利机会,并自动提交交易,从这种机会中获利。由于套利是MEV最常见的例子之一,搜索者通常最终将90%的利润支付给矿工的瓦斯费,以列入区块中。

这导致了Gas Golfing领域研究的兴起–这是一个花哨的词,即对智能合约和执行进行微小的优化,以尽量减少气体成本,这使得搜索者可以在提高气体价格的同时降低气体费用,从而最终为气体支付的ETH总量相同。

Searchers使用Gas Golfing 的概念,能够以这样的方式对交易进行编程,使其使用最少的燃气。这是因为有这样一个公式:gas fees = gas price * gas used。因此,如果你减少你的汽油使用量,你可以提高你的汽油价格以达到相同的汽油费。这有助于竞争性的MEV机会,因为能够支付比你的竞争对手更高的汽油费,意味着你的交易被纳入的机会更高。

我们在之前的一个文章中详细谈到了如何减少天然气的使用。

提前交易

通常有两种类型的搜索者–那些寻找非常具体的MEV机会的搜索者,例如上面提到的NFT下降的例子,以及那些运行通用的机器人,愿意进行所有类型的交易,产生利润。

后者就是所谓的前驱机器人。前进者是指积极通过mempool(用户已经发送但尚未被开采的交易)寻找有利可图的交易的机器人。他们用自己的地址替换这些地址,并在本地进行测试,看它是否真的有利可图。如果是的话,他们就提交一个修改后的交易,用替换后的地址和比原始交易更高的气体价格,从而在交易中获取利润。

当多个前线机器人被卡在试图相互前线的循环中时,会发生有趣的事情,最终几乎没有任何利润。

Flashbots

谈到MEV,我们不能不谈Flashbots。Flashbots是一个独立的研究项目,它扩展了go-ethereum客户端的服务,允许Searchers直接向Miners提交交易,而不需要通过公共mempool。这意味着Searchers提交的交易对于内存池中的其他人来说是不可见的,除非他们真的被矿工纳入区块,在这一点上,做任何事情都太晚了。

到今天为止,大部分MEV交易都是通过Flashbots服务进行的,这意味着上述的通用前锋不再像以前那样有利可图。那些先行者是基于从mempool中复制交易并提交更高的气体费用的想法。然而,通过Flashbots,交易完全跳过了mempool,因此一般化的前导者不能捡起今天发生的大部分MEV。

Flashbots也使MEV更加民主化,它为Searchers提供了直接接触矿工的机会–从而在某种程度上为像你和我这样的普通用户提供了提取MEV的机会,而不需要自己成为矿工。

我们很快会更详细地讨论Flashbots。

MEV和Flashbots的使用案例

上面我们已经讨论了套利,让我们再看看MEV的几个例子。

在DeFi借贷协议中,你可以用抵押品借入资产(例如用USDC借入ETH),有一个清算的概念。当你以抵押品借入资产时,你只能借到比你的抵押品价值更低的钱。例如,如果我存入1个ETH,而ETH是3000美元 - 我只能从借贷协议中借到少于3000美元的资金。不同的协议设置了不同的限制,但通常没有人让你100%借到你的抵押品,因为这意味着你的抵押品最小的价格波动都会影响你的借款金额。

我越接近我的借贷金额的上限范围,我被清算的机会就越大。可能会有这样的情况,因为市场波动,你的借款资产的价值超过了你提供的抵押品的价值,或者超过了你被允许的借款额度的上限。在这种情况下,你的原始抵押品会被抢走。

每个协议都有不同的百分比,但在达到这个百分比后,大多数协议都允许外部世界的任何人对借款人进行清算。考虑到这非常类似于如果有人不按时支付贷款,他们作为抵押品的房子会被银行拍卖,银行会拿走贷款的原始价值+利息,并将剩余的钱归还。

同样,当借款人被清算时,他们的抵押品的一部分会归贷款人所有,其中包括利息和借来的钱。同时,借款人还必须支付清算费,清算费归启动清算交易的用户/机器人所有。

Searchers运行算法来跟踪各种借贷协议上的借款人,以检测某人是否可以被清算。如果他们发现了一个清算某人的机会,他们可以通过第一个让他们的清算交易被挖掘出来,从而赚取清算费,从这个机会中提取MEV。

Sandwich攻击

Sandwich交易是一个完全符合Flashbots和MEV使用案例的概念。让我们用一个例子来解释这个问题。

假设一个用户试图在DEX上进行大额交易,希望出售大量代币A换取代币B。

卖出A换取B,将推低A的价格,在交易执行后增加B的价格。搜索者可以利用这一事实,使用户为代币B支付比他们最初预期的更多的钱(回顾大二时DeFi交易所的滑点)。

由于Flashbots让你与矿工直接沟通,而矿工决定区块中交易的顺序,你实际上可以设计你的Flashbots交易的方式,你可以指定你希望交易执行的顺序。通过这样做,搜索者可以创建两个交易–一个在用户的交易之前,一个在用户的交易之后–以赚取利润,具体如下。

搜索者卖出大量代币A换取代币B,推动代币A的价格下降,推动代币B的价格上升 用户的交易通过了,这也是为代币B卖出了大量的代币A,但收到的代币B比最初预期的要少。这进一步推低了代币A的价格,增加了代币B的价格。 搜索者卖回他们的代币B以换取代币A,最后得到的代币A比他们一开始得到的要多,赚了一笔。 由于搜索者在用户的大额交易前后向区块添加了两笔交易,因此被称为Sandwich攻击。

随着MEV和Flashbots的兴起,Sandwich Attack机器人变得如此猖獗,以至于不得不制作特殊的去中心化交易所,其功能正是为了防止这种情况。例如,mistX是一个DEX,它本身通过Flashbots提交所有的交易,从而完全绕过了mempool,这意味着其他搜索者不能对mistX上发生的交易进行Sandwich攻击,尽管矿工本身仍然可以。

Sandwich攻击也是关注隐私的L2和私人交易成为热门话题的一个重要原因,因为如果矿工的搜索者不可能知道谁的地址在交易什么,以及有多少交易,他们就无法夹住该交易。

从受损的账户中追回资金

让我们来看看Flashbots的一个使用案例,它实际上是彼此受益(Net Positive),而且在这个过程中不会像Sandwich攻击那样伤害其他合法用户。

假设你的ETH私钥被盗,而你有一堆主网的资金和NFT。有很多机器人会在Github上搜索被意外推送的私钥,试图从该账户中窃取资金。一般来说,他们正在寻找ETH或其他知名的代币,而往往不关心NFT,无人认领的空投代币,不太知名的代币,或DeFi池和协议中的代币。

那么就有可能,而且偶尔会发生,一个机器人会偷走你所有的ETH和代币,但还有其他他们不关心的资产,价值不菲,而你想找回它们。不幸的是,你需要ETH来支付交易的气体,而当你发送任何ETH到一个被破坏的账户时,很可能在你做任何事情之前就被机器人偷走了。

进入Flashbots。在这种情况下,很多人把Flashbots用得很好,他们可以设计一捆交易,首先从不同的账户向被攻击的账户发送一些ETH,然后自动提取机器人没有偷走的所有资产,并要求矿工在同一区块内按该顺序排序。通过跳过mempool,并确保这两笔交易将被包含在同一个区块内,机器人就不能再在你提取资产之前,先跑到你的交易,并偷走你的ETH。

事实上,这种确切的方法已经导致无数人从被盗账户中恢复了(数十万)。

好与坏

优点

它对许多Defi项目来说是好的,因为套利纠正了多个DEX之间的价格,协议依靠清算来确保借款人不低于他们的抵押品,这对DeFi协议是有伤害的。另外,像追回被盗资金这样的用例可以说是有助于该空间的净积极因素。

弊端

缺点是,frontrunners和gas战导致用户的gas价格非常高,这对用户体验不利。另外,可能会有这样的情况,矿工在挖完一个区块后发现有一个MEV的机会,他们可以赚取更多利润。所以在这种情况下,他们可以重新开采区块,以包括MEV交易,这可能会导致系统的不稳定。

我们之前了解到,如果由于网络延迟而发生分叉,区块可以被重组,最终选择最长的链作为经典链,这可能涉及到某些区块被删除,并在跟随其他(较短)链的节点上被替换。然而,如果MEV的机会足够大,矿工可能会试图故意造成分叉,重组区块,只是为了尝试盈利,虽然这也涉及到一些运气,因为他们现在必须能够产生一个比另一个更长的链。

解决办法?

我们在上面简要地谈到了Flashbots,但基本上Flashbots的建立是为了解决与MEV有关的问题。他们正试图建立一个无权限、透明和公平的生态系统,以获得更好的MEV和保护,防止前面的运行。通过对矿工以外的MEV机会的民主化,Flashbots允许像你和我这样的用户也对这些机会采取行动,而不是仅仅被利用。

目前以太坊生态系统的问题是,交易是在一个开放的内存池中发送的,所有的人都可以看到,这就导致了潜在的前台运行。它还有一个额外的缺点,如果你发送了交易,但你的交易实际上没有被执行,你最终还是会损失一些气体。

另一方面,没有一个公共的mempool也是相当有问题的,因为这意味着矿工肯定是唯一能提取MEV的人。这方面的一个很好的例子是Avalanche链,他们修改了go-ethereum客户端,完全隐藏了公共mempool,只有矿工可以接收待处理交易。这导致矿工提取了所有的MEV,而用户对此无能为力。

因此,它催生了DAO和项目,这些项目合作他们的资源来建立采矿节点,然后以运行你自己的Avalanche节点(目前高达20万美元)的一小部分成本向多个用户出售对内存池的访问。

相反,Flashbots创造了一些非常酷的东西,他们决定允许用户私下交流他们想要的交易顺序,并出价他们愿意付出的金额。如果他们的出价失败,用户最终不会支付任何东西,因为如果交易不盈利,矿工不会得到任何东西。这种机制消除了前期运行。

Flash bots的架构

让我们进一步了解flashbots的一切是如何运作的

https://hicoldcat.oss-cn-hangzhou.aliyuncs.com/img/20220813091822.png

引用自Flashbots的文档

正如你在图中所看到的,有三方参与,即searcher、relay和miner。

本质上,Searcher希望向矿工发送一个私人请求,这样他的交易就无法在以太坊的开放内存池中被看到,从而防止他在前面跑。

Searcher通过以太坊交易,以气体价格或直接支付给coinbase地址(矿工的地址)的形式表达他们的竞标纳入。使用直接付款而不是天然气价格,允许用户只在他们的竞标成功时才付款,而只有高额的天然气费用意味着矿工仍然有动力收录你的交易,即使它不盈利,因为他们仍然会从你那里得到天然气费用。然而,使用直接支付意味着你的交易必须通过智能合约执行(而不是EOA),因为在智能合约中,你可以访问block.coinbase变量。根据使用情况,你可能需要在主网部署一个新的智能合约,这样才有可能。

现在问题来了,因为 “搜索者 “不需要为失败的投标支付任何费用,他们可能会进行DOS攻击,用无效的交易捆绑物向矿工发送垃圾邮件。为了防止这种情况,用户的交易首先被发送到relayers,relayers对交易捆绑进行验证,同时进行捆绑合并。relayers也有一个信誉系统,合法的搜索者随着时间的推移建立起他们的信誉,而DOS攻击者等则会失去信誉,从而使他们更难搞乱系统。

Flashbots的官方文档建议,在系统完全去中心化之前,不要与Flashbots以外的relayers整合,因为relayers可以获得完整的交易数据,并可能将其用于自己的利益。

想支持Flashbots中继的矿工运行MEV修改的以太坊客户端代码,例如mev-gethgo-ethereum的扩展。截至目前,超过80%的以太坊矿工正在使用MEV修改过的以太坊节点版本。

矿工可以评估交易捆绑,并将不冲突的交易捆绑在一起,创造出最有利可图的区块。

eth_sendBundle

Flashbots引入了一个新的eth_sendBundle RPC,这是一个标准的格式,用于与flashbot relayers 和miners互动。它包括任意签名的以太坊交易阵列以及一些元数据

下面是它需要的所有参数的列表。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_sendBundle",
  "params": [
    {
      txs,               // Array[String], A list of signed transactions to execute in an atomic bundle
      blockNumber,       // String, a hex encoded block number for which this bundle is valid on
      minTimestamp,      // (Optional) Number, the minimum timestamp for which this bundle is valid, in seconds since the unix epoch
      maxTimestamp,      // (Optional) Number, the maximum timestamp for which this bundle is valid, in seconds since the unix epoch
      revertingTxHashes, // (Optional) Array[String], A list of tx hashes that are allowed to revert
    }
  ]
}

https://hicoldcat.oss-cn-hangzhou.aliyuncs.com/img/20220813092140.png

引用自Flashbots的文档

Explorer

为了查看MEV这些年的进展情况,flashbot团队建立了一个Explorer。请查看它,它是惊人的。请点击此链接

MEV的例子

  • 一个真实世界的套利MEV交易

现在,大多数flashbots的工作仍处于研究和早期阶段。但我们都能理解,它有很大的潜力。

Web3充满了潜力,而我们才刚刚开始 🚀 👀

推荐阅读

参考

https://hicoldcat.oss-cn-hangzhou.aliyuncs.com/img/my.png