客户端JavaScript调用web3获取以太坊交易数据报错求助
问题根因
你的代码报错核心是传错了Web3的RPC节点地址:
https://rinkeby.etherscan.io/tx/是Etherscan供用户浏览交易信息的网页路径,不是Web3兼容的JSON-RPC接口地址,向这个地址发起RPC请求,服务端返回的是HTML格式的错误页面,不符合Web3要求的JSON响应格式,因此抛出Invalid JSON RPC response错误。- 额外注意:Rinkeby测试网已于2023年正式关停,即使填对原Rinkeby官方RPC地址,也无法直接同步节点获取链上数据。
可行修复方案
方案1:测试Web3接口逻辑(替换为可用测试网)
如果只是验证Web3获取交易的代码逻辑,可替换为当前正常运行的Sepolia测试网公开RPC,修改后代码如下:
<!DOCTYPE html> <html> <head> <script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script> <script> async function getData(){ // 填入Sepolia测试网公开RPC地址 var web3 = new Web3(new Web3.providers.HttpProvider('https://rpc.sepolia.org')); // 替换为Sepolia链上真实存在的交易哈希即可获取对应数据 var trans = await web3.eth.getTransaction('填入Sepolia有效交易哈希'); console.log(trans); } </script> </head> <body> <input type="button" value="GetData" id="myCheck" onclick="getData()"> </body> </html>
注意:前端直接调用第三方RPC时,需确认节点服务配置了跨域允许规则,否则会被浏览器CORS策略拦截请求。
方案2:获取指定Rinkeby历史交易数据
如果目标就是拿到你提到的那笔Rinkeby交易的历史数据,不需要走Web3 RPC调用,直接请求Etherscan的开放API即可:
async function getTargetRinkebyTx() { const txHash = '0xd8b3c50230fb2f1d3d8586f5179b514e913dbe7868effd490a5743caaabda6b9'; // 替换为你自己申请的Etherscan API Key即可发起请求 const apiKey = '个人申请的Etherscan API Key'; const response = await fetch(`https://api-rinkeby.etherscan.io/api?module=proxy&action=eth_getTransactionByHash&txhash=${txHash}&apikey=${apiKey}`); const result = await response.json(); console.log(result.result); }
内容的提问来源于stack exchange,提问作者Paul Butler
相关产品推荐
相关产品推荐

