作者:Nic @ imToken Labs
阅读提示
在阅读本文前,需要对 MEV 有基本的认识,知道 Flashbot 的角色及 Flashbot 对 MEV 的影响。
还需要知道 PoS 机制的基本认识以及以太坊合并( The Merge) 带来的改变。
MEV
首先复习一下什么是 MEV。
Miner Extractable Value 如字面上所述,指的是「区块开发者可以榨取出的价值」。
这个价值指的不是用户付给区块开发者请他打包用户交易到区块里的手续费。给予手续费这个动作是经过使用者同意的,使用者可以把手续费调得很低,那他的交易就会很久才会被收入,但至少区块开发者不能对交易收取任意手续费。
阅读提示:现在 MEV 又改称 Maximal Extractable Value,因为目前的发展 MEV 已不再是区块开发者所独占。
「区块开发者可以榨取出的价值」指的是区块开发者透过改变交易排序、插入自己的交易在被榨取的交易前(或后)来获得利益。那区块开发者可以榨取什么样的利益?
例如当有某个火热的 NFT 提供 mint 的名额,只有最快的 100 个人可以 mint 成功,这时和区块开发者是朋友或是链下和区块开发者达成某种协议的 Carol 就可以确保区块开发者透过安排交易顺序,将她的 mint 交易安插其他人的 mint 交易之前。
△ 区块开发者会把 Carol 的 mint 交易排在其他人的 mint 交易之前。
另外常见的 MEV 是夹击用户的 AMM 交易,迫使用户收到(可接受范围里)最差的价格,用户预期的价格与最差价格的价差就是区块开发者榨取的利益。
底下的例子中 Alice 预期用 1 WBTC 换到 21500 USDT,但她知道去中心化世界里她的交易不一定能第一个被执行,当有其他人在她之前也去进行 WBTC/USDT 的交易,AMM 价格就被改变,1 WBTC 就不一定能换到 21500 USDT,所以她设定了可接受范围内的一个最差价格 20500 USDT:
△Alice 预期用 1 WBTC 换到 21500 USDT,但最差可以接受 20500 USDT。
这时 Eve 发现了 Alice 的交易,并决定抢先在 Alice 的交易之前去卖 WBTC,导致 WBTC 价格跌到剩 20500 USDT,接着再执行 Alice 的交易,Alice 就被迫只能用 20500 USDT 的价格成交。
最后 Eve 再将一开始卖 WBTC 所获得的 USDT 拿去买回 WBTC,此时 WBTC 价格会小于 20500 USDT,也就表示 Eve 完成了一次低买高卖(<20500 买,21500 卖),赚得价差。
△ 区块开发者 Eve 发现有利可图,在 Alice 的交易前抢先卖 WBTC,等到 Alice 交易执行完再买回 WBTC 赚价差。
去中心化系统一定会有 MEV
在中心化系统里你可以选择相信负责排序交易的角色(Operator、Sequencer),相信他们会为了声誉所以不做会伤害使用者的坏事,或是你可以选择离开那个系统。这也是目前 L2 的现况,L2 项目方不太可能会自砸招牌去榨取 MEV。
但在去中心化系统里任何人都可以成为区块开发者,而且我们没办法简单客观地证明一个区块开发者的行为是「不好」的,也就表示我们没办法有效禁止区块开发者榨取利益。
我们不该期待区块开发者都会是「好人」,而是要担心如果一个区块开发者因为 MEV 越赚越多,并用来投资更多区块开发设备让他规模越来越大,导致他能淘汰掉其他竞争者,结果就会是在一个去中心化系统只有一个区块开发者的困境,最终他将能任意施加个人的喜好规则到用户的交易上。而这也是 Flashbot 出现的原因。
Flashbot
为了避免 MEV 影响区块开发者去中心化的程度,Flashbot 将 MEV 打造成一个公开的市场,区块开发者和专业的 MEV searcher 合作并分享 MEV,同时区块开发者和 MEV searcher 各自之间又有着高度的竞争。
透过这样的竞争和合作关系,区块开发者和 MEV searcher 都能各自专注在自己的专业,MEV searcher 也不需担心区块开发者有可能抢走自己的套利机会或是故意不收自己的交易。
△ Searcher 从公开交易池中找交易套利并为自己的 Bundle 竞标收入权,送给 Flashbot 后再由区块开发者挑选。
中心化风险
不过 Flashbot 仍然有缺点在,所有 MEV searcher 的套利交易都要经由中心化的 Flashbot 服务器,Flashbot 服务器可以抢走套利机会或审查套利交易。
除了 Flashbot,市场上也出现了像是 Eden Network 的项目。它和 Flashbot 架构基本上一样,除了自己搞无谓的 Staking 、区块内交易优先等级及额外的竞标机制等。不过至少当 Flashbot 开始作恶时,区块开发者和 searcher 还有其他选项。
MEV 是一个必须接受的既定事实
不管是协议设计者或用户都必须要保持对 MEV 的警觉。可以的话将 MEV 纳入协议设计中,让 MEV 变成一个有利的工具是协议设计者接下来在设计机制时必须要好好思考的。后面的文章也会介绍善加利用 MEV 的设计和想法。
The Merge
Ethereum 在 The Merge 后共识切换为 PoS 机制,从用矿机算力竞争的区块开发者变成质押 ETH 就能成为 Validator 来获得 propose 区块的机会,这表示在 PoS 中获得出块的门槛降低许多。而获得出块机会的门槛降低后其实也影响了 Flashbot 不同角色间竞争合作的关系。
阅读提示:这里 propose 维持用英文,避免 propose block 和 build block 的中文因为意思太接近而看错。
信任关系的改变
在 PoS 之前,Searcher 是需要相信区块开发者不会把他的 bundle 内容抢走的,区块开发者即便抢了,Searcher 也只能透过链下的机制去反制,例如提出证据请 Flashbot 将该区块开发者加入黑名单或是在 Twitter 上发文取关。
不过区块开发者基本上都非常配合,这是因为区块开发者和 Searcher 间是属于长期合作的关系,如果区块开发者今天为了某一笔 MEV 利益而抢了 Searcher 导致区块开发者未来收不到任何 MEV 机会,其实是划不来的。
但在 PoS 之后,透过质押 ETH 就能获得出块机会,出块的门槛降低。也因此许多一般人加入成为 Validator,导致获得出块的机会也就慢慢被稀释。
相比于 PoW 中投入许多成本成为为数不多且长期经营的矿池,PoS 中 Validator 偶尔才能获得出块机会,且其区块奖赏加上 MEV 的平均年化即便以 10% 计算的情况下,Validator 仍然有非常足够的动机去抢 Searcher 的 MEV。
阅读提示:可以参考 Flashbot 统计的 MEV leader board,复制下方链接到浏览器跳转查阅相关内容:https://explore.flashbots.net/leaderboard
△ 只要抓住机会抢超过 3.2 ETH 的 MEV 即超过 10% 年化。
因此 Flashbot 的架构需要配合这个信任关系的改变及 PoS 机制进行调整,变成了现在的 mev-boost。
mev-boost
在 mev-boost 中,原本 Flashbot 介于 Searcher 及区块开发者之间的 Relay 角色被拆分成两个,一个是 Builder,一个一样叫做 Relay 但职责不同。
Searcher 将 bundle 交给 Builder,Builder 从多个 bundle 中选出数个 bundle 组成一个区块,并将区块交给 Relay,Validator 再从多个 Relay 提交的区块中选出一个。
△ Searcher 和 Searcher 竞争,Builder 和 Builder 竞争,Validator 从中挑出最有利的区块。
Builder 负责在一个区块的有限容量中找出最有利的 bundle 组合,希望 Validator 能选中自己的区块。
那 Relay 有什么用呢?上面提到信任关系已经改变,因此 Searcher/Builder 不能相信 Validator,所以 mev-boost 中 Validator 需要先做出「我会 propose 你的区块」的承诺才会收到真正的区块内容。
而 Relay 就是作为 Builder 和 Validator 之间的中间人角色帮忙协调:Relay 先保管区块内容,直到拿到 Validator 的承诺才把 Builder 制作的区块交给 Validator。
实际的 Ethereum Beacon Chain 术语中 Builder 制作的区块内容称做 Execution Payload,Validator 会从 Relay 那收到称为 Execution Payload Header 的数据,Header 可以视为是 Payload 的 commitment,对 Header 签名就代表对 Payload 签名。
当 Validator 选好要 propose 哪个 Relay 送来的区块时,他就会把该区块的 Execution Payload Header 放进 Beacon 区块中并签名,接着把签名内容交给 Relay 当作证明,最后 Relay 就可以放心将区块内容给 Validator,让他 propose 区块。
△ Builder 将区块交给 Relay,Relay 将 Header 交给 Validator
△ 如果 Validator 选择该区块,就会将 Header 放进 Beacon Block 里并签名,交给 Relay。
△ Relay 接着将完整区块内容交给 Validator。
如果 Validator 最后背叛 Relay,选择 propose 另一个区块,此时 Relay 就可以将当初 Validator 给他的签名内容公布出去,当作证据证明该 Validator propose 了两个不一样的区块,接着 Validator 就会因为违反 Ethereum Beacon Chain 的规则而被惩罚。
△ Eve 因为 propose 不一样的区块导致他被 slash(一部分质押的 ETH 被没收)。
信任假设
在 mev-boost 中 Validator 反而必须相信 Relay,如果 Relay 最终揭露的区块内容不合法或是实际 Validator 收到的钱不符预期,或甚至 Relay 直接不公布区块内容导致 Validator 没办法 propose 区块,此时 Validator 只能透过链下的机制去反制,例如让其他 Validator 知道该 Relay 的恶意行为。
Circuit Breaker
Validator 没办法 24 小时都有人监控并介入,所以当 Validator 软件发现(同一个或多个)Relay 不断破坏信任时,必须要能做出反应,避免一直因为没有 propose 区块而损失收益。
例如当发现自己超过五个 Slot 都没 propose 区块时,要退回使用自己的节点来制作区块内容。
相关文件可以参考:
https://hackmd.io/@ralexstokes/BJn9N6Thc
Relay Monitor
为了降低 Relay 这个角色作恶产生的影响,Flashbot 社群也在思考设计针对 Relay 行为的监控。
相关文件可以参考:
https://hackmd.io/@ralexstokes/SynPJN_pq?
https://github.com/flashbots/mev-boost/issues/142
Data Availability Committee
一个防止 Relay 不公布区块内容的方式是将区块数据交给一群节点所组成的 Committee,他们负责保管、确保区块内容可取得,也就是将区块内容保管的职责去中心化。
目前有哪些 Builder 和 Relay?
这里可以看到目前的 Builder 及 Relay:
MEV-Boost
查阅网址:https://mevboost.pics
可以看到虽然身为 mev-boost 的主要开发团队,Flashbot 并未拥有主宰的 Relay 地位,这是因为 Flashbot 从一开始便开源开发 mev-boost 且未在 mev-boost 软件中将自己设为默认 Relay。
阅读提示:了解更多请查阅https://twitter.com/bertcmiller/status/1577482319140913153
2023–04–02 针对 mev-boost Relay 的攻击
一个恶意 Validator 发现 Relay 的漏洞:Relay 只要 Validator 有签出合法的签名(不论内容是否合法)就会回传 Bundle 内容给该 Validator。
因此恶意 Validator 签了一个不合法的内容(Header 某些字段的值不合法),Relay 回传 Bundle 内容后 Validator 再偷走 Bundle 里的套利交易,然后 propose 另一个合法的区块。
Relay 尝试广播 Validator 签的 Header,但因为内容不合法所以被其他节点拒绝,所以大家只看到 Validator 自己 propose 的合法区块。事后 Validator 因为签了两个不同的 Header(给 Relay 的和自己 propose 的)而被 Slash 且被踢出 Validator 名单,但伤害已经造成。
更新后的 Relay 现在会先尝试广播 Validator 签的 Header,如果成功被其他节点收入就表示 Validator 签的内容是合法的,而且其他节点会先看到 Relay 广播的区块,如果 Validator 尝试偷 Bundle 内容自己 propose 的话,要赢过 Relay 广播的区块会更难(因为已经有很多节点看到 Relay 广播的区块)。
阅读提示 1:解释这个攻击的 thread 及相关证据和 Relay 补丁可以参考这个 thread,详情请查阅:https://twitter.com/samczsun/status/1642848556590723075
阅读提示 2:恶意 Validator 除了可以偷走 Bundle 里的套利交易,还可以攻击进行三明治夹击的套利者:进行三明治夹击的套利者会在受害者交易前后插入自己的交易 — 抢先受害者买入,并在受害者买入后再卖出,赚取价差,但夹击要能成功必须要前后两笔交易都有执行,否则只有前笔交易被执行的话套利者不但赚不到利差,还会因此赔上自己的资金。
但针对这个攻击所做的补丁会增加区块产出的延迟时间,因此在攻击发生后的数天内 PoS 链的 re-org 发生次数明显上升,目前有数个方案正在设计及实作当中,来避免 MEV-Boost 的出块延迟反而造成 PoS 网络的不稳定。
阅读提示:详细介绍可以复制下方链接到浏览器查阅https://www.paradigm.xyz/2023/04/mev-boost-ethereum-consensus
Flashbot/mev-boost 的影响
影响 Validator 投票效率
因为 Flashbot/mev-boost,区块从生产到真正被 propose 的过程经过了更多的关卡,这导致 Validator propose 区块的时间延迟,其他负责投票的 Validator 就会更晚收到区块,也因此他们投票的时间也就被压缩,这会影响整体 PoS 网络的安全性。
虽然看起来影响不太大:估计投票率减少约 2%、正确投票的 Validator 减少约 1%,不过这是 2022 年 10 月统计的数据,当时只有 1/3 的 Validator 接上 MEV Relay。
阅读提示:相关信息可参考下方链接文章https://www.attestant.io/posts/exploring-the-impact-of-mev-relays
总结与重点
MEV 的产生无可避免,而区块开发者拥有开采 MEV 最大的优势。Flashbot 让 MEV 的开采变成一个公开市场,避免矿工中心化影响整个链的安全。
mev-boost 因应 PoS 带来的改变而诞生,mev-boost 反转 Searcher/Builder 与 Validator 间的信任关系,且让竞争更为开放:有多个 Builder 彼此竞争,有多个 Relay 彼此竞争,进一步降低 Flashbot 的中心化风险。
下一篇将介绍 Proposer-Builder Separation(PBS),将 mev-boost 架构直接整合进 Ethereum 本身的协议里,而不再是 Validator、Builder 和 Searcher 之间私底下的合作,这会让整个 MEV 生态变得更加去中心化及安全。
参考数据与推荐延伸阅读
https://docs.flashbots.net/
https://blog.bitmex.com/flashbots/
https://ethresear.ch/t/mev-boost-merge-ready-flashbots-architecture/11177
https://writings.flashbots.net/searching-post-merge/
https://writings.flashbots.net/why-run-mevboost
https://writings.flashbots.net/beginners-guide-mevboost
数据统计:https://www.mevboost.org
数据统计:https://dune.com/ChainsightAnalytics/mev-after-ethereum-merge
https://www.youtube.com/watch?v=mXGA-u-sH_w