MEV(Maximal Extractable Value,最大可提取价值)在区块链中是一个非常复杂且具有争议性的议题。它既有潜在的好处,也带来了显著的风险和负面影响。良性MEV可以提高链效率,增加验证者收益,而恶性MEV也将损害普通用户的权利,造成交易抢跑,三明治攻击等。
在当前区块链环境中,交易由用户发起,RPC节点接收,并加入mempool,验证者从mempool中选取多笔交易组成一个区块,执行上链;在整个过程中,交易都是明文传输,从而对于链上任何用户来说都能够知道谁发送了什么交易,交易金额和类型是什么,虽然无法进行交易篡改(因为有签名机制保护),但是却依然能够让一些有利可图者嗅到商机。
首先:验证者的交易选择权/排序权!出块是由验证者完成的,虽然验证者是随机选取的,但是只要成为了验证者就代表着有机会控制自己当前负责的块的交易可以有哪些,以及按哪种顺序执行;虽然没有暗地里的贪腐,但是依然能够在太阳底下把利益最大化。比如说:选择小费给的最高的交易、通过交易排序使更多的交易能够执行成功、如果发现套利机会,可以自己发起交易进行抢跑/夹击等中饱私囊的行为,从而让自己除了gas收益外,再获得额外收益,而且所有这些收益都是合规的;其次,对于像以太坊这种公开mempool的网络,交易都是透明的,任何人都可以获取到目前链上提交的待执行交易,从而存在大量的MEV Bot对交易进行监听分析,发现利益点从而进行攻击,用户的交易没有受到执行机制的保护; 从而一系列的MEV产品应运而生,如Solana的Jito、以太坊的Flashbots等,这些产品存在的意义不是为了消除MEV(因为MEV在当前区块链环境下仍然无法避免),而是让MEV的过程变得更加透明、公平、公正。(其实就是把排序权分离出来,并保证自己能够公平处理排序,既保证普通用户的诉求,又能够最大化验证者的利益)。
让我们以Solana网络中的Jito为例,看下它是如何解决这些问题的:
- 抗抢跑(front-run):Jito建立了私有交易通道,让特殊交易不暴露在public forwarding网络中,从而避免其他validator或者mev bot监测并攻击;
- 缓解三明治攻击:Jito的Block Engine可以通过制定策略拒绝恶意交易,或优先接受用户保护性交易。(因为validator只接受Block Engine提供的区块,无法自己偷偷插入交易);
- 将排序逻辑抽离,保证公开透明的同时,提升链路效率:Jito提供了高性能、结构化的MEV提取和排序模块,从而减轻validator的负载,validator只需接受Jito排好序的区块进行提交上链即可;
- 公平化MEV收益:Jito将MEV收益的80%-90%给到Validator(激励他们使用Jito作为自己的排序模块),只留一小部分给到自己的排序引擎(Block Engine);
看似比较完满的解决了恶性MEV问题,但是又如何确保Jito不作恶呢?确实!用户虽然可以通过私有交易通道提交给到Jito,保证不被其他人抢跑,但是理论上Jito是可以看到交易内容,并且完成抢跑或者三明治攻击的!这时候我们更多的仍然是靠信任作为交易背书,毕竟把交易发给Jito(大公司、大组织),比发到公共网络上被其他MEV Bot伏击更加可靠。
那么有没有什么根本办法去解决MEV问题呢?答案是肯定的,这也是很多MEV厂商的技术进化方向——基于隐私交易和可验证统一排序的抗MEV措施。
我们知道造成MEV的根本原因有两个:1. 交易是明文存在的,用户能够通过分析交易数据知道是否有利可图,从而发起攻击;2. 排序是由验证者主观确定的,权利过于集中,且无后验性,即不同的验证者对于同样的mempool可能会选择不同的交易构建区块。对于第一个问题,我们可以通过交易加密来解决;对于第二个问题,我们将排序和出块的角色分离,参考PBS,builder只负责对加密交易进行排序,无法知道交易的具体信息;proposer只负责从builder选择最优区块,完成解密后执行上链。
该方案的具体实施步骤可以拆分成下面几步:
- 通过基于时间锁的加解密方式,先对用户提交的交易进行加密,加密可以只针对交易意图和操作数据,将gas等信息开放(从而builder可以按照gas priority进行排序,保证最大收益)
- builder拿到密文交易后,由于无法获取用户信息和交易类型,从而杜绝了MEV攻击,但是可以根据非加密字段,如gas和其他可排序字段(可通过出售排序位置最大化区块收益),进行区块构建;
- proposer从builder拿到排序好的区块后,通过时间锁密钥进行交易解密,并验证交易有效性,通过后将完成区块上链;
- 为了保证builder的排序是公平可靠,或者确实按照事先给定的排序规则进行排序的,可以在第2步完成区块构建后,再加入排序证明(可以是VRF驱动的随机排序,或者排序规则符合预设策略,如FIFO、Gas优先等)!该证明可由proposer或任何用户验证,从而保证builder排序的公平公正性。
更进一步,我们可以将builder构建为一个独立的服务,即排序服务,供多个链使用(如:L2),即通过构建跨链共享去中心化排序器,同时提升链的抗MEV能力和L2的去中心化程度。