使用Anvil(Foundry)主网分叉执行交易时遭遇EvmError: NotActivated错误求助
Anvil(Foundry)主网分叉执行交易时遭遇EvmError: NotActivated错误求助
各位大佬好,我现在遇到一个Anvil本地分叉的问题,想请教下解决方案:
我正在用Anvil(Foundry的组件)创建以太坊主网的本地分叉,然后用cast工具在这个分叉上执行自定义交易,但每次运行都会触发EvmError: NotActivated错误,具体的调用栈如下:
EvmError: NotActivated │ ├─ [39] 0x73580081dA937844d57811b69A30378c1606EcF4::balanceOf(0xc40d6F37351622004e48FB8721919DC334ddD946) [staticcall] │ │ └─ ← "EvmError: NotActivated" │ └─ ← "EvmError: Revert" └─ ← ()
我的环境信息:
- Anvil版本:
anvil 0.1.0 (0e72b71 2023-07-19T00:37:38.599511000Z) - 启动分叉的命令参数:
--hardfork shanghai - 执行交易工具:cast(连接本地分叉节点)
可能的解决方向(来自社区经验):
检查合约依赖的EVM特性
你调用的这个合约0x73580081dA937844d57811b69A30378c1606EcF4很可能用到了shanghai硬分叉还没激活的EVM特性(比如Cancun版本新增的PUSH0指令)。你可以试试把启动Anvil的硬分叉参数改成--hardfork cancun,再重新运行交易看看。升级Anvil到最新版本
你的Anvil版本是2023年7月的0.1.0,属于比较早期的版本,Foundry团队后续修复了不少硬分叉相关的兼容性bug。直接在终端执行foundryup命令就能一键升级到最新版,升级完成后重启分叉节点再测试。验证硬分叉参数是否正确生效
有时候可能会出现参数没正确加载的情况,你可以在Anvil启动后,用下面的命令检查当前节点的硬分叉配置:
cast rpc eth_getBlockByNumber "latest" false
查看返回结果里的hardfork字段,确认是不是你指定的shanghai。如果不是,检查启动命令有没有写错,或者有没有其他配置覆盖了参数。
- 确认cast连接的是正确的本地节点
执行交易的时候,一定要给cast加上--rpc-url http://localhost:8545参数(Anvil默认端口是8545),避免不小心连接到主网或者其他测试网,导致环境不匹配。
备注:内容来源于stack exchange,提问作者German.Kuber




