## MEVless 协议
扩展: 针对 Layer2/3 的无需信任的链上反 MEV 解决方案
### 先决条件
MEVless适用攻击场景:
- 夹心攻击
- 抢先交易攻击
MEVless适用链:
这里,作者不建议在 L1 公链层面(尤其是像ETH和Solana这样的通用区块链)使用 MEVless 协议,因为 MEVless 需要对区块本身进行针对性的修改,而这些区块是专门为抵抗 MEV 而设计的,可能不适合其他业务类型(尤其是不需要抵抗 MEV 的业务)。作者建议将 MEVless 放置在专用的 DeFi 应用链或 L2 上,然后返回ETH L1 进行结算。
### 原则
MEVless 的原理在于限制矿工在交易排序过程中的行为。我们的方法是防止矿工在排序过程中看到具体的交易内容。交易排序时矿工无法看到交易内容,因此即使是矿工也无法进行 MEV 攻击,因为他们不知道具体的交易内容。排序完成后,需要将交易序列发布到公共网络,以便其他节点和用户知晓。此时,交易顺序已最终确定并包含在The Block中,因此当后续提交具体的交易内容时,将按照此共识顺序执行,不再进行 MEV 操作。
我们将链上区块分为两种类型:
- 排序区块,只完成三件事:接收交易哈希、扣除用户预付款、提供交易排序承诺
- 执行区块,与普通区块无异,只需要按照前一个排序区块中提交的顺序执行交易
这两类区块交替产生,例如创世区块之后,奇数块高度的区块为排序块,偶数块高度的区块为执行块。
### 过程
1. 区块 N(排序区块)开始出块
2. 用户将交易哈希发送到链上并支付一定的预付款。预付款由两部分组成:
交易哈希的 Gas 费用:用于存储交易哈希以及下单时的计算费用。该费用通常是固定且强制性的。
额外提示:用户支付的额外费用,以确保其交易能够尽早完成。此金额不固定,可以为零。
3. 链节点收到交易哈希后,将完成以下步骤:
- 检查交易账户是否有足够的资金支付预付款
- 根据预付款金额从高到低对交易哈希进行排序
- 从交易账户中扣除预付款金额
- 将排序后的交易顺序作为承诺存储在The Block中,并发布到P2P网络
4. 用户订阅并查询自己提交到链上的交易哈希的排序序列号后,将具体的交易内容发送到链上,并发送DA(DA为可选)
5. 区块N+1(执行区块)开始出块
6. 链节点收到交易内容后,会完成以下步骤:
- 从 DA 中提取交易内容(如果前一个区块中提交排序的所有 txHash 都有对应的交易内容,则跳过此步骤)
- 检查交易内容是否与之前提交的排序txHash匹配,如果不匹配则丢弃
- 根据先前提交的顺序执行交易
这个过程循环往复。
### DA 的角色(可选)
在这种方案中,可能会出现这样的情况:交易内容发送到链上后,矿工发现该交易有利可图,可能会恶意扣留该交易,阻止其上链,然后等待用户重新发送相同的交易进行攻击。此时,用户不仅交易利润仍然会被蚕食,还会浪费之前发送的交易哈希的预付款。
因此,我们需要 DA(例如ETH Blob)来确保用户发送的交易一定会被记录在链上。这样,即使出块节点恶意扣留交易,其他验证节点和全节点仍然可以接收交易内容,并在后续的出块过程中执行该交易。这迫使出块节点必须将该交易记录到自己的区块中,避免与其他节点的状态不一致。
在此过程中,DA 为用户提供了额外的保护,且并非强制性的。如果用户认为交易已充分传播到 P2P 网络中足够多的全节点,则可以选择不使用 DA。引入 DA 还可以防止链上矿工联合垄断和扣留用户交易。
## 优点
1. 与加密内存池相比,MEVless 解决方案开销更低,无需执行耗费 CPU 和内存的解密操作。MEVless 只需先对交易哈希进行排序,哈希长度仅为 32 字节(甚至更短)。排序完成后,传播对网络带宽的负担极小。
2. 相比于PBS,MEVless从MEV攻击的源头——交易下单权限上进行约束,在下单前阻断攻击者获取交易信息的权限,消除了攻击者进行MEV攻击的前提条件。
3. 有利于去中心化执行和结果可验证。所有对抗 MEV 的方法和步骤均在代码层面硬编码。全节点只要按照此代码执行,结果就是确定性的,这使得暗箱操作的 MEV 攻击变得困难。