运行npx hardhat test对接Moralis分叉测试网时出现HH110未授权报错
核心原因
你遇到的HardhatError: HH110: Invalid JSON-RPC response received: {"error":"unauthorized"}报错,根源是Hardhat配置文件中网络字段的RPC地址填写错误:你填入的是Moralis Dapp的Server URL,该地址仅用于对接Moralis SDK,不支持Hardhat原生的JSON-RPC链上交互请求,因此返回未授权错误。
修复步骤
第一步:修正
hardhat.config.js的网络配置
把kovan和local网络的url替换为对应网络的JSON-RPC端点:- Kovan网络可以直接使用你测试脚本中已有的Moralis Speedy Nodes地址
- 本地分叉网络的RPC地址填写你启动Moralis本地分叉时终端输出的地址(默认一般为
http://localhost:8545)
修正后的配置参考如下:
module.exports = { solidity: "0.8.4", networks: { kovan: { url: "https://speedy-nodes-nyc.moralis.io/6ee15640b2e5107f0e110d0e/eth/kovan", accounts: ["你的私钥,请注意不要泄露"] }, local: { url: "http://localhost:8545", // 替换为你实际的本地分叉RPC地址 accounts: ["你的私钥,请注意不要泄露"] } }, etherscan: { apiKey: "你的Etherscan ApiKey" } };注意:你当前公开的账户私钥已经泄露,请立即更换该私钥,不要在任何主网/测试网环境下继续使用该地址,避免资产损失
第二步:清理测试脚本冗余代码
你测试脚本中已经通过Hardhat导入了ethers实例,Hardhat会自动根据你运行命令时指定的--network参数加载对应网络的provider,不需要额外初始化新的JsonRpcProvider,重复定义会导致网络配置冲突。请删除测试脚本中以下三行冗余代码:const NODE_URL = "https://speedy-nodes-nyc.moralis.io/6ee15640b2e5107f0e110d0e/eth/kovan"; const provider = new ethers.providers.JsonRpcProvider(NODE_URL); const signer = provider.getSigner();如果你需要使用signer,可直接通过Hardhat的ethers实例获取:
const [signer] = await ethers.getSigners()第三步:核对节点访问权限
确认你使用的Speedy Nodes地址是你Moralis后台生成的有效地址,如果你开启了节点的IP白名单限制,需要把你运行测试的设备公网IP加入白名单,否则也会触发未授权报错。第四步:验证配置与运行测试
先执行npx hardhat accounts --network kovan验证配置是否正常,无报错后再执行npx hardhat test --network kovan或对应本地网络的测试命令。
内容的提问来源于stack exchange,提问作者VGabriel45

