调用极简Solidity函数触发VirtualMachineError: revert问题求助
调用Ganache上的Solidity视图函数触发VirtualMachineError: revert的排查方案
问题场景
使用Python/Brownie调用本地Ganache实例上的Solidity视图函数时,反复触发VirtualMachineError: revert错误。已将合约函数简化至最简逻辑仍无法解决:
Solidity合约代码
function testFunction(uint256 _value) public view returns (uint256) { uint256 value = _value; return value; }
Python调用代码
print(Agreement.testFunction(2))
错误栈
File "brownie/_cli/run.py", line 51, in main return_value, frame = run( File "brownie/project/scripts.py", line 110, in run return_value = f_locals[method_name](*args, **kwargs) File "./scripts/GetAgreementData.py", line 18, in main print(Agreement.testFunction(2)) File "brownie/network/multicall.py", line 115, in _proxy_call result = ContractCall.__call__(*args, **kwargs) # type: ignore File "brownie/network/contract.py", line 1902, in __call__ return self.call(*args, block_identifier=block_identifier, override=override) File "brownie/network/contract.py", line 1693, in call raise VirtualMachineError(e) from None VirtualMachineError: revert
排查步骤
确认合约部署有效性
检查合约是否成功部署到Ganache:- 打开
brownie console,输入Agreement查看是否存在有效合约地址; - 查看Ganache的交易记录,确认部署交易无失败;
- 确保部署账户有足够Gas完成部署(虽然视图函数不消耗Gas,但部署需要)。
- 打开
验证ABI与地址匹配
若修改合约后未重新部署,会导致ABI不匹配:- 删除项目根目录下的
build文件夹; - 重新编译合约:
brownie compile; - 重新运行部署脚本完成合约部署。
- 删除项目根目录下的
检查网络连接一致性
确认Brownie连接的是目标Ganache网络:- 执行
brownie networks list查看当前激活网络; - 若连接错误,在脚本开头显式指定网络:
network.connect("ganache-local")(根据你的Ganache网络名称调整); - 核对Brownie配置(
brownie-config.yaml)中的Ganache端口与本地Ganache实例端口一致(默认7545)。
- 执行
重置Ganache状态
重启本地Ganache实例,清除异常状态后重新部署合约并测试调用。调整调用方式
显式使用call()方法调用视图函数:print(Agreement.testFunction.call(2))
内容的提问来源于stack exchange,提问作者Jose Maria
相关产品推荐
相关产品推荐

