上一次讲过使用 Foundry 的 Anvil 来 Fork 当前的链状态在本地快速的进行交易测试,因为 Anvil 能够快速的运行一个本地节点,那么作为用 Rust 语言实现的以太坊虚拟机 - REVM,它能够快速的 build 一个虚拟机,并可以将交易在本地虚拟机中运行。
再加上 revm:: database ,之前我们说过使用它来构建我们的内存数据库,那么现在可以就非常完美的使用 InMemoryDB 构建一个 EVM 实例,快速的在环境中测试交易,并且 Anvil 的底层就是使用 REVM 实现的,配合 InMemoryDB 同样减少了 RPC 调用的次数,减少节点压力。
在这里可以查看 solidquant/revm-is-all-you-need 和之前分享过 mevlog-rs 的大佬博客文章 revm-alloy-anvil-arbitrage,非常清楚的讲了 revm 构建一个实例的原理,以及各种本地模拟方法的性能比较。
当然有小伙伴感兴趣的话我也可以用中文详细的写一篇,以便我更加的巩固去学习这方面的知识。
有问题也欢迎大佬指点一二!
打了几天狗,继续把之前的 Arb/Mev 状态捡回来。
hardhat 和 foundry是目前优秀且最受欢迎的两个 solidity 合约开发工具,而目前大佬们使用 foundry 更加多一点,同比 hardhat 它的运行速度更快,可以直接使用 Solidity 测试,并且支持 Fork 主网环境进行本地测试,比如常用的 uniswap 就非常方便。
Foundry 包含 4 个工具:forge, cast, anvil, chisel
- forge 用于项目的编译、部署、测试等
- cast 可以轻松的交互 RPC,如拉取链上信息,发送交易以及交互合约等,有些时候我甚至会用 AI Agent 配合它来获取一些地址/合约的最新状态
- anvil 可以在本地创建测试节点,支持 RPC 分叉,快速的模拟主网环境
- chisel 本地开启 solidity 环境,能够在命令行中运行 solidity 代码
在我学习 arb 的过程中,发现 anvil 也可以用于分叉当前的链状态并在本地快速的检测套利机会,过程中 anvil 会按需从 RPC 获取必要的链上数据,如 eth_getCode、eth_getBalance 等,之后的请求都在本地的 anvil 进行以便快速运行节省节点性能。