2024年 5月 1日

【MEV】全称Maximal Extractable Value,即最大可提取价值。方法是通过改变区块链内部交易顺序或增删交易获取利润。MEV并不全是指不良攻击,从另一个方面而言,MEV有效得提高了交易速度、为DEX提供了流动性,比如套利交易;同时三明治攻击、机器人抢跑则攫取了市场利润,使整个市场的用户遭受损失。

     想要了解MEV,首先从区块链的运行机制开始说起:

1. 区块链运行机制

(1) 交易过程

     比特币系统和以太坊系统除了共识机制已经大为不同外,在交易的处理方式上从创造之初就选择了不同的路线。

比特币:在比特币系统中,每个人的账户并没有余额的概念,而是UTXO(Unspent Transaction Output),就是“未使用的输出”。怎么说呢?首先区分两个概念:输出(Output)和输入(Input)。假设一只Rabbit此时发起了一笔交易,它想要转1个BTC给Fish。那么在这笔交易中,涉及到的输出是Rabbit,输入是Fish;交易达成后,Fish在比特币系统中就会多一笔1个BTC的UTXO,另一方面而言,Rabbit转给Fish的BTC一定也是来源于它原先的UTXO。如果之后Fish需要转回0.7比特币给Rabbit,那它应该怎么做?首先使用UTXO,假设Fish只有原先这1个BTC的UTXO。然后在这笔交易中Fish会有一笔0.7BTC的输出,同时还有一笔0.3BTC的输入;另外一侧,Rabbit会有一笔0.7BTC的输入。

比特币区块头实例

以太坊:在以太坊的系统中,交易十分易懂,即涉及修改两个以太坊账户的余额。对于Rabbit而言,每一笔交易都按顺序有一个Nonce,如果想要取消个人以太坊账户的某笔交易,发送0ETH到自己的账户,同时将Nonce设置为想要取消的那笔交易的Nonce即可。前提是在交易上链之前。

(2)Mempool

     以比特币系统为例,当Rabbit用户将自己的交易发起后,交易会先到达Mempool,内存池。内存池是储存并收集当前发起交易的地方,它是对所有用户公开的。当交易提交到内存池后,验证者会选择适当数量的交易,将它们添加进区块。

     在PoW的系统中,一般是选择Gas费最高的一定数量交易。

(3)广播验证

     交易打包进区块后,验证者将此区块向周围广播。相邻节点收到广播,做出一系列验证:如Nonce验证(不同于以太坊的Nonce,比特币的Nonce是用于矿工解题的16进制数字)、Merkle树根验证等等。验证通过向周围区块后进行二次广播。

2.Miner Extractable Value

     MEV最开始被称作Miner Extractable Value,由Phil Daian提出。指的是在工作量证明(PoW)的系统中,用户提交的交易并不会立即上链,而是先发送到Mempool(内存池)里面,由矿工选择部分交易打包进块。所以矿工在选择交易的时候,可以根据矿工意愿改变交易顺序或者增删交易;当这些行为可以为矿工赚取额外利润时,便称矿工获取了MEV。

     在以太坊从Pow转到权益证明(PoS)后,验证交易的人从矿工变成了质押者,但是交易上链的自主选择权仍然掌握在验证者手中,所以MEV的含义从Miner Extractable Value(矿工可提取利润)变成了Maximal Extractable Value(最大可提取利润)。

3.Maximal Extractable Value

     在理论的状态中,MEV应该被验证者获得。但是现实情况往往是:某些用户通过外部算法或者人为监控内存池获得池中交易的状态,通过附加更高的gas,让自己的交易领先于某些有利可图的交易,比它们更先执行。理论上而言,如果有相当数量的套利者在互相竞争,gas费会一直增加到利润的90%。

     经典的方式有:

  • DEX(去中心化交易所)套利

     Dex套利是最早期的MEV攻击。具体方式是通过发现两个或以上交易所代币兑换比率差异,在一个交易所兑换代币,并在另一个交易所换回代币。通过一来一回的兑换价差,获取超过交易手续费的利润。

     比如说:

     Rabbit在Uniswap交易所上看到ETH:BTC=10:1;在Sushiswap上发现ETH:BTC=10.5:1,于是Rabbit用手中的10个ETH在Uniswap上兑换成1个BTC;然后跑到Sushiswap上将一个比特币兑换成10.5个ETH,假设手续费是0.01ETH,一来一回净赚0.49ETH,真正实现了无风险收益。

  • 三明治攻击

     了解三明治攻击必须先了解AMM(自动做市商)机制。早期,大部分的去中心化交易所模仿UniswapV1采用X*Y=K的AMM机制。其中X是代币1的数量,Y是代币2的数量,K是池中需要保持的恒定常数。

UniswapV1采用的AMM曲线

     简单举个例子:假设现在有ETH和BTC的交易兑换池,此时100ETH兑换1个BTC,现在池中有1,000个ETH和10个BTC,1,000*10=10,000,这个时候K=10,000。因此,任何时刻池中的ETH数量和BTC数量的乘积都必须等于10,000。

     假设Rabbit手中有10个ETH,它并不能换到1个BTC,它能换到多少呢?

     解方程:当X=1,010,K=10,000时,Y=9.9,即当它投进10个ETH后,池中还需要保持有1,010个ETH,9.9个BTC,说明它这个时候能得到0.1个BTC。基本满足兑换需求。

     那么三明治攻击怎么做到得呢?假设Tiger监测到Rabbit此时想做大额兑换单,将手中的200ETH换成BTC。同样的计算方法可以算出:

     X=1,200,K=10,000时,Y=8.333;Rabbit只能换得到1.7个BTC,这就是所谓的滑点。

     当Rabbit兑换完成后,池中还有1,200个ETH和8.333个BTC,此时BTC比ETH更值钱。三明治攻击即Tiger在监测到Rabbit的大额订单后,提前先用手中的ETH按100:1的比率换成BTC,在Rabbit完成订单后,以8.33:1200=1:144的比率换回ETH。

4. MEV的影响

优点:

  • 提高交易速度。不断的DEX套利能将交易所的兑换比率维持在市场比率。
  • 自动清算,提高市场效率。

缺点:

  • 损失用户利益,造成网络拥堵,用户体验变差。
  • gas费用恶性竞争,不断提高gas费使得交易达成。
  • 区块重组,损坏共识系统。

5. MEV分配方案

     Flashbot是专门针对MEV问题的一个研究组织,致力于平衡验证者、Searcher(搜索套利机会的人)、用户之间的利益分配,消除MEV的负面影响。

     Flashbot的MEV-boost通过将区块构建分配给第三方的方式来实现gas费的降低。它将搜寻交易、编辑交易顺序和上传区块分割成两个独立的部分,分别由Searcher和验证者承担。Searcher寻找有利可图的交易,或者将自己想要秘密达成的交易,按照自定义的顺序将其打包成区块发送给验证者,验证者如果发现Searcher发送的区块总Gas更高,就会放弃原先打包的区块,选择它的区块。

     由于双方都需要使用MEV-geth,即Flashbot通过修改以太坊的客户端代码设计的新客户端,Searcher发送的交易并不会在公开的Mempool上面显示,即创造了一个隐私池。

Related Post

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注