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

使用Web3 ABI获取以太坊主网合约所有权报execution reverted错误如何解决

问题原因

execution reverted属于合约侧执行回滚错误,和RPC节点兼容性无关,你的猜测方向错误,核心诱因是你使用的ABI和目标合约不匹配,或调用参数不符合合约要求。

排查&解决步骤
  • 第一步:替换为正确的调用逻辑
    你当前手写的ABI存在匹配问题,可直接通过函数签名调用,不需要依赖手写ABI,示例可运行代码如下:
from web3 import Web3

eth_rpc = "https://mainnet.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161"
web3 = Web3(Web3.HTTPProvider(eth_rpc))

contract_address = Web3.toChecksumAddress("0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE")
# 构造owner()方法的调用数据,取函数签名哈希的前4字节
owner_method_sig = web3.keccak(text="owner()")[:4]
# 发起链上调用
response = web3.eth.call({
    "to": contract_address,
    "data": owner_method_sig
})
# 解析返回的地址结果
owner_address = web3.toChecksumAddress(response.hex()[-40:])
print(owner_address)
  • 第二步:校验节点连通性
    如果上述代码依然报错,先运行以下代码验证RPC节点可正常访问:
# 验证节点连接状态
print(web3.isConnected())
# 验证可正常拉取链上数据
print(web3.eth.block_number)

如果返回False或无法获取区块号,说明你的网络无法正常连通Infura节点,替换为可用的以太坊主网RPC节点即可。

  • 第三步:适配web3版本
    如果你使用的web3.py版本>=6.0.0,toChecksumAddress方法已经迁移到web3.utils.address模块下,需要调整对应导入路径,旧版本的写法会触发调用错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:24:06