开源MEV模拟器介绍

shutter 发布于 2026-06-19 阅读 89

本文介绍了一个开源的MEV模拟器,用于量化公开mempool与加密mempool对交易者的影响。模拟设定:每笔交易约3000美元,每周3次,持续一年。结果显示,公开mempool交易者因三明治攻击每年损失约12,406美元(占交易量的2.65%),而加密mempool交易者无此损失。文章讨论了模拟的局限(如100%夹击率、无gas费),并指出实际损失可能在1-3%。提供了本地运行模拟器的步骤,并鼓励社区扩展。

介绍开源 MEV 模拟器

今天,我们为社区发布一个开源的 MEV 模拟器。

它旨在帮助研究人员、开发者、钱包、教育者和 DeFi 用户模拟不同的 MEV 攻击,运行本地实验,改变假设,并用新的场景扩展模拟器。

对于本次 MEV 模拟器的发布,我们准备了尽可能简单的场景来展示它的运行。这个场景提出了一个问题:

如果我每笔交易大约交易 3000 美元,每周三次,持续一年,与使用加密或私有 mempool 相比,我的交易量中有多少百分比会无声地损失在三明治攻击中?

再次强调,这并不能准确反映现实,其目的是展示模拟器的运行,并让人们了解这个问题的范围。

设置

为回答这个问题,我们构建了一个本地区块链模拟器来计算损失。每笔交易约 3000 美元,每周三次,持续一整年。我们在一个受控环境中使用 Anvil (Foundry) 作为 EVM 后端和一个中等规模的 Uniswap V2 AMM 池,让两个模拟交易者相互对抗。

  • 公开交易者: 每笔交换都公开提交到公共 mempool。
  • 隐私交易者: 每笔交换都提交到加密/私有 mempool(对机器人不可见)。
  • 夹击者(MEV 机器人): 监控公共 mempool 并无情地利用每一个有利可图的机会。
参数 理由
池流动性 每边 1,000,000 个代币 ~200 万美元的池(中等规模的 DEX 对)
交易规模 3,000 个代币 每笔交易约 3000 美元
MEV 机器人抢跑交易 15,000 个代币 受害者规模的 5 倍(中等机器人)
模拟交易次数 156 3 次/周 × 52 周
AMM 手续费 0.3% 标准 Uniswap V2

两个交易者在每个区块中随机做出买入/卖出决定。他们之间唯一的系统性差异是 mempool 的可见性。

结果:损失 12,000 美元

当你观察单笔交易时,损失看起来像是一个舍入误差。它通常是一个很小的百分比,大多数人会认为是正常的市场波动。但当你放眼一整年,影响是残酷的。

1 年财务明细

公共 mempool 加密 mempool 差异
全年盈亏总额 −$56,382 −$43,976 −$12,406
每笔交易三明治攻击损失 $79.53
三明治攻击损失占交易规模百分比 2.65%
年交易量 $468,000 $468,000

🛑 结论

通过使用公共 mempool,交易者无声地损失了其总交易量的 2.65% 给 MEV 机器人。这相当于每笔交易被盗 79.53 美元,全年总计 12,406 美元。

隐私交易者支付了完全相同的 0.3% AMM 手续费,并面临相同的自然滑点。12,406 美元的差额是来自三明治攻击的纯粹损失——这些价值在年初存在于你的钱包中,到年底消失,且对你没有任何好处。

注意事项和现实性说明

这个模拟被有意简化。与以太坊主网的关键区别:

  • 100% 夹击率: 在这个模型中,机器人夹击每一笔公开交易。实际上,Gas 成本(每笔交易 2–50 美元)设定了最小盈利交易规模,因此较小的交易通常会被跳过。对于 3000 美元的交易,实际的夹击率可能是 20–50%。
  • 无 Gas 成本: 模拟没有考虑交易费用。加入实际的 Gas 会减少有效的 MEV 损失(一些夹击变得无利可图),并使机器人的盈亏平衡行为更准确。
  • 无滑点保护: 交易者接受任何输出金额。实际钱包默认滑点容忍度为 0.5–1%;严格的滑点限制会导致受害交易在被夹击时回退,从而将“每笔交易损失”转换为“交易失败率”。
  • 无竞争机器人: 在主网上,数百个机器人通过优先 Gas 拍卖竞争相同的套利机会,将更多 MEV 价值推给验证者,而不是单个机器人。
  • 无外部价格预言机: 实际的 AMM 通过套利者与中心化交易所价格保持同步。在这里,池价格随着随机交易漂移,增加了与 MEV 无关的盈亏噪声。

考虑到 100% 夹击率的假设,对于这种交易规模在流动的主网池上,更现实的估计可能是交易量的 1–3%——而这正是我们 2.65% 模拟结果所落在的范围,当机器人规模保守(受害者规模的 5 倍)时。

结论

  1. 成本是真实且可量化的。即使在保守假设下,使用公共 mempool 会让一个常规 DeFi 交易者损失大约 1–3% 的交易量作为 MEV 提取。
  2. 对于 3000 美元/笔 × 3 次/周,这大约是每年 12,000–26,000 美元,具体取决于机器人的资本规模。
  3. 修复很简单。使用加密 mempool(Flashbots Protect、MEV Blocker、CoW Swap 或类似工具)可以完全消除夹击风险,且对用户零成本。
  4. 严格的滑点容忍度是部分防御。将最大滑点设置为 0.5–1% 会导致被夹击的交易回退而非以糟糕价格执行——尽管这引入了交易失败风险。
  5. MEV 并非全部进入机器人。在竞争激烈、流动性强的市场中,提取的价值主要流向流动性提供者和验证者,而不是夹击者本身。

自己运行

想要对这些数字进行压力测试或调整池规模?整个模拟器可以在你的本地机器上运行。

1. 克隆并安装

此模拟完全在本地运行。你需要安装 Python 3.11+、Node.js 20+ 和 Foundry

git clone https://github.com/brainbot-com/mev-simulator
cd mev-simulator

## Python 后端
python -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install -e ".[dev,server]"

## 前端
cd frontend && npm install && cd ..

2. 通过 UI 交互式探索

启动后端:

uvicorn server.main:app --port 8000

启动前端(在第二个终端中):

cd frontend && npm run dev

打开 http://localhost:5173。选择 UniswapV2 三明治攻击 场景,点击加载,然后开始。实时观察区块构建,mempool 查看器显示公开交易被夹击,图表显示发散的盈亏曲线。

3. 调整参数

编辑 scenarios/uniswap_v2_sandwich/default_config.json,或通过 UI 的 JSON 配置字段传入自定义配置:

{
  "initial_liquidity": 1000000.0,
  "trader_amount": 3000.0,
  "front_run_amount": 15000.0,
  "trader_interval": 12.0
}

关键参数:

  • front_run_amount — 控制机器人的资本规模;直接设置每笔交易的 MEV 百分比
  • initial_liquidity — 池深度;更大的池 = 每笔交易的价格影响更小
  • trader_amount — 受害者交易规模
  • trader_interval — 交易之间的秒数(12 = 每个区块;增加以分散交易)

4. 用 AI 编码助手提问

如果你用代理编码工具(Claude Code、Cursor、OpenCode、GitHub Copilot Agent Mode 或类似工具)打开该仓库,你可以直接让它为你设计和运行自定义场景。这正是本次分析的生成方式。你无需触碰代码。有效的示例提示词:

  • "理解这个项目并在我本地运行它"
  • "创建一个场景:每笔交易 3000 美元,每周交易 3 次,持续一年。运行它并告诉我数字"
  • "我们怎样才能将 MEV 损失降低到约 3%?用这些更改再次运行"
  • "给我一份报告,用于与博客文章一起发布"

代理读取代码、设计场景配置、启动服务器、运行模拟并解释结果——全部在一次对话中完成。

贡献

MEV 模拟器是开源的,并且设计为可扩展。

因此,运行你自己的场景,挑战假设,改进模型,或添加新的示例供他人学习。

有害的 MEV 是每个人的问题,但其影响并不总是容易看到。这个模拟器是让这种影响更可见、可量化且更容易理解的一种方式。

  • 原文链接: blog.shutter.network/int...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论