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

web3.eth调用get_transaction无属性报错及Etherscan API配置问题求助

问题1解决方案

导致该报错的原因有三处:

  • 实例引用错误:你初始化Web3连接时将实例赋值给了w3变量,调用时错误使用了未定义的web3变量,程序无法识别该对象自然找不到对应属性
  • 函数名拼写错误:你代码中写的get_transcation存在拼写错误,正确函数名是get_transaction
  • 业务方法选择错误:如果你需要获取包含日志(logs)的交易回执,应该使用get_transaction_receipt方法,get_transaction返回的交易原始对象不包含logs字段

修正后的对应代码行:

receipt = w3.eth.get_transaction_receipt(transaction_hash)

注意transaction_hash是你的交易哈希变量,不能在变量名中加空格。

问题2解决方案
  • 你将Etherscan API密钥用双引号包裹赋值给mykey的写法完全符合Python语法规范,是可行的
  • 你当前代码的对应片段存在两个可修正的问题:
    • URL拼接时&和apikey之间多了空格,会导致请求参数识别失败,需要删除空格
    • JSON解析方法使用错误:json.load()仅支持接收文件类对象,解析字符串需要使用json.loads(),也可以直接调用requests响应对象的内置json()方法简化写法
完整修正后代码
import json
import requests
from web3 import Web3

# 请自行替换infura_project、transaction_hash为你的实际参数
infura_project = "你的Infura节点地址"
transaction_hash = "你要查询的交易哈希"

w3 = Web3(Web3.HTTPProvider(infura_project))
receipt = w3.eth.get_transaction_receipt(transaction_hash)
log = receipt["logs"][2]
smart_contract = log["address"]
mykey = "你的Etherscan API Key" 
api_endpoint = f"https://api.etherscan.io/api?module=contract&action=getabi&address={smart_contract}&apikey={mykey}"
# 简化写法直接解析响应
rsp = requests.get(api_endpoint, timeout=10)
abi = json.loads(rsp.text)
# 后续解码逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:15:03