You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重启Ganache后二次运行01_deploy_price_consumer Brownie报ContractNotFound错误

问题根因

报错是Brownie本地部署缓存与重置后的Ganache链数据不匹配导致的:
每次关闭Ganache启动新实例时,原有本地链的所有状态(包括已部署的合约数据)都会被清空,但Brownie会把历史部署的合约地址、ABI等信息存在项目根目录的build/deployments/<对应链ID>文件夹下。再次运行脚本时,Brownie会默认优先加载这些缓存的部署记录,到新的Ganache链上查询对应地址的合约,自然就会抛出ContractNotFound错误。

可用解决方案

方案1:单次运行时添加重置参数(最适配你的需求)

运行部署脚本时加上--reset标识,Brownie会直接忽略之前的部署缓存,完全重新部署所有合约,不会尝试加载旧的地址记录:

brownie run scripts/price_feed_scripts/01_deploy_price_consumer_v3.py --reset

你调整完模拟喂价的返回值后,每次重启Ganache后加该参数运行即可,不需要删除整个仓库重新克隆。

方案2:手动清空部署缓存

如果不想每次加参数,可以在重启Ganache后,手动删除项目根目录下build/deployments文件夹内对应本地网络的子文件夹(Ganache默认链ID为1337,对应子文件夹名称就是1337),也可以直接删除整个build文件夹。Brownie下次运行时会自动生成新的缓存,不会加载旧的部署记录。

方案3:开启Ganache数据持久化(适合长期本地测试)

如果不想每次重启Ganache都重新部署合约,可以在启动Ganache时开启链数据持久化:

  • 若使用Ganache GUI,新建工作区时勾选「SAVE WORKSPACE」保存工作区,后续打开该工作区即可保留历史链数据
  • 若使用Ganache CLI,启动时添加--db <自定义存储路径>参数,链数据会保存在指定路径中
    重启Ganache后原有合约还会保留,不会触发该报错。

内容的提问来源于stack exchange,提问作者john9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:45:03