调用QuickNode trace_transaction接口出现non-array args错误求助
解决QuickNode API调用
trace_transaction时的non-array args错误 错误non-array args的核心原因是JSON-RPC规范要求方法参数必须以数组形式传递,你的代码里直接传了单个交易哈希字符串,不符合规范。
修改方案
把调用make_request的代码行,将单个参数包裹进数组即可:
原代码:
result = client.make_request("trace_transaction", trx['transactionHash'].hex())
修改后:
result = client.make_request("trace_transaction", [trx['transactionHash'].hex()])
完整修改后的代码
def get_logs(block_hash): logs_block = w3.eth.get_logs({'blockHash': block_hash}) for log in logs_block: trx = w3.eth.get_transaction_receipt(log['transactionHash']) # 将交易哈希放入数组中作为参数传递 result = client.make_request("trace_transaction", [trx['transactionHash'].hex()]) print(result) get_logs('0xeadccd8a2436ab5d50736ae2f93998aa007d3115089c14733b9a5764f6c7caaf') # number block = 20504126
补充说明
之前代码能正常运行,大概率是因为QuickNode的API之前对参数格式要求宽松,现在调整为严格遵循JSON-RPC 2.0规范,所以必须用数组包裹参数,哪怕只有一个参数。
内容的提问来源于stack exchange,提问作者Ta-enta
相关产品推荐
相关产品推荐

