MEV 机器人攻击在 DeFi 中很常见,但很多人对其理解也仅限概念上,例如套利攻击、三明治攻击等,但其实通过追踪链上交易数据可以更好地理解 MEV。近日,Web3 观测平台 Sentio 发文解读了 MEV,通过链上数据和示例可以帮助你更好地理解 MEV。BlockBeats 编译如下:
文章开始前简单介绍一下 Sentio,Sentio 是一个链上数据监测平台,通过低代码解决方案从智能合约数据生成指标、日志和跟踪,可用于分析和监控、模拟/调试交易、数据导出 API 等。目前 Sentio 支持 ETH、BSC、Polygon、Solana、Sui、Aptos 等链。该平台由来自 Google、Linkedin、微软和 TikTok 的资深工程师创建,并得到了 Lightspeed Venture Partners、Hashkey Capital 和 Canonical Crypto 等顶级 VC 的支持。
介绍
随着区块链和 DeFi 的不断发展,最大可提取价值(MEV)已成为一个颇具吸引力且有争议的话题。本文旨在通过来自 Sentio 的真实交易、数据点和简单执行示例来深入探讨 MEV 相关话题,为大家揭开 MEV 概念的神秘面纱。
什么是 MEV?最大有多大?
MEV 是指矿工、验证者或交易订单者在将区块中的交易添加到链上之前通过对区块中的交易顺序后获取的潜在利润。这种重组交易顺序的行为也提供了获取利润的机会。
下图是近 14 天内两种 MEV 策略(即套利和三明治)产生的每日收入和利润,以证明 MEV 的机会有多大。每日总收入平均值超过 50 万美元,每日利润平均值在 10 万美元左右。仅 jaredfromsubway.eth(蓝色区域)收入就占据了三明治攻击的总利润和收入金额的一半。
MEV 是如何运作的?
套利
我们从最「简单」的套利策略开始,来说明 MEV 交易的工作原理。让我们从上帝视角看一下典型 MEV 套利交易的工作流程,如下图:
套利交易:首先,MEV 机器人发现 2 个流动性池之间存在价格差距;随后机器人可以在单笔交易中从低价池买入并在高价池卖出,从而产生利润。
例如,交易 A 是套利交易,点击交易 A 链接就可以在 Sentio 调试器的帮助下查看详细的资金流向、持仓变化和交易跟踪,以逐步了解此交易的执行情况。
图中的 MEV 交易是由0x1a6 开头交易机器人发起的,本次交易中,MEV-bot 能够检测到 Uniswap V3 池中 SDEX 中 WETH 的价格比 SmarDex 池中的 WETH 价格更便宜(SmarDex 是一个类似 Uniswap V2 的 DEX)。MEV-bot 首先在低价池中 swap,然后将收到的 WETH 到高价池卖出,最终获利 0.07ETH(5.91-5.98)。
此外,本次交易中的第 5 步支付了 0.047 ETH 给 Flashbots,这是 MEV 机器人向区块构建者支付的贿赂,以使其包含在后面的区块中,考虑到贿赂费用,MEV 机器人私下赚取了 0.02 WETH 收益。
让我们更深入地了解 MEV-bot 是如何在 0x1a6 上找到获利机会的。可以看到本次 MEV 交易位于Block 17935927 上,在该交易之前,同一区块还有一笔交易 B,这笔交易在 SmarDex 池中进行了大额 swap(在 SDEX 上 swap 了 8.52 WETH),该交易使该池中的 ETH 价格上涨。
上面的 MEV-bot 很快注意到这一过程,并在这笔交易之后添加了自己的交易,抓住了这个「低入高出」的机会。
在交易被纳入区块之前,MEV 机器人如何发现交易的呢,这就不得不提到 mempool 了,在交易被添加到区块并上链前,它们存在于一个被称为 mempool 的池中,mempool 中的交易尚未确认时会等待纳入到下一个区块。区块构建者负责选择要纳入哪些交易以及按什么顺序纳入,这个过程可能会受到交易费用和 Gas 价格等因素的影响(这是 MEV 机器人为获得参与而支付的费用)。
在上述情况下,MEV 机器人可以查看所有 mempool 交易,并发现该某笔交易存在。随后 MEV 机器人在其后面添加另一笔交易,形成 bundle 以获取利润。MEV 机器人可以使用 Flashbot 等工具创建 bundle,并强制 bundle 交易包含在同一块中并按所需顺序执行。
事实上,在这个特定的区块中发生了更多的 MEV 交易。由于这是一个 Flashbot 构建块,你可以点击进入 Marto 构建的 Flashbot 浏览器来查看更多交易,并在 Sentio 调试器中查看资金流、余额变化和调用跟踪详细信息。
三明治攻击
套利策略通常是在有利可图的交易后追加交易,但三明治攻击是一种通过在目标交易之前和之后添加 1 个(或更多)交易并强制这些交易按顺序执行来获利的策略。让我们从上帝视角看一下典型 MEV 三明治攻击的运作流程,如下图:
首先,用户向 mempool 提交交易,MEV 机器人持续监控所有 mempool 交易,并追踪该交易,并确定该交易是否可以成为三明治的盈利机会。一旦发现机会,MEV 机器人需要通过在目标交易之前和之后插入交易(就像包装三明治)来创建一个 bundle,并向区块构建者提交该 bundle。当 mempool 交易被包含在下一个区块中并执行时,bundle 交易将按照下面的确切顺序执行。
MEV 机器人通过操纵池流动性来产生利润。在抢先交易中,MEV 机器人可以以较低的价格购买资产。在目标交易之后,攻击者以更高的价格出售之前购买的 token。
我们以区块 17786884 上的最近 3 笔交易为例(Position 0—2)。
Position 0(抢先交易): 0x850 开头的交易
该交易是由 MEV 机器人插入的,以 swap 724.6 WETH 为 1.34M USDC,目标交易之前,该交易是按 1857 ETH/USDC 价格进行的。
Position(目标交易者):0xc3ae 开头的交易
目标交易者希望 swap 2743 ETH 为 USDT(Uniswap V3),最终由 Uniswap Router 处理并以平均 1851 ETH/USDC 价格完成交易。由于抢先交易的出现,目标交易者遭受了不同的价格,在 MEV 机器人抢跑的池中以 1850 ETH/USDC 的价格 swap 了 1782 ETH
Position 2(后跑):0x040 开头的交易
该交易是由 MEV-bot 在目标交易之后插入的,134M USDC 被 swap 为 727.6 ETH。Position 0 和 Position 2 结合的最终结果是 MEV-bot 获利了 3 ETH,而目标交易者则遭受了更高的 swap 价格。下面这两个 Position 的持仓变化可以让您快速了解 MEV 机器人获取的利润。
为了保护 swap 免受三明治攻击的影响,你应始终设置最大滑点。否则,滑点将被三明治攻击利用,并成为 MEV-bot 的收入(例如,以编程方式设置时,在应用 UI 或 amountOutMinimum/sqrtpricelimitx 96 参数内的 swap 设置中设置一个百分比)。
清算
MEV 机器人还可以在借贷协议中获利,借贷协议是连接贷款人和借款人的 DEX(例如 MakerDAO、Aave、Compound 等)。借款人提供平台支持的抵押品后可以借入一定价值的资产,当借款人的抵押品无法偿还债务时,就会发生清算,清算人被激励以低价购买抵押品偿还债务。(
让我们以0x652 开头的交易为例。
0x310 地址开头的 MEV 机器人通过从 Balancer 获得闪电贷获得 212 USDT 借款,然后 MEV-bot 在步骤 3-8 中清偿了借款人所欠的 USDT,0x994 地址开头的 MEV 机器人以折扣价获得了抵押品作为回报,在步骤 8-11 中,MEV 机器人将所有收到的 TUSD swap 为 WETH 和 USDT,并在步骤 12 中还清了初始闪电贷,所有步骤都在一次交易中完成。
长尾 MEV
套利、三明治攻击和清算是提取 MEV 的主要方式。此外,MEV 中还有其他一些策略,这些策略是利基的、神秘的和未被发现的(参考链接),这些均被称为长尾 MEV。