使用Hardhat部署Solidity合约异常,链上无创建交易调用无返回
问题排查与解决方法
核心原因
你遇到的所有异常表现本质都是合约并未实际成功部署到Rinkeby链上,Hardhat返回的只是部署交易的预计算合约地址,并未上链确认。
分步排查操作
- 第一步:先找到部署时Hardhat返回的
部署交易hash,不要直接用返回的合约地址查询,先拿该交易hash在Rinkeby Etherscan搜索:- 若搜索不到该交易:说明交易根本没有广播到Rinkeby公网,排查以下配置项:
- 检查
hardhat.config.js中Rinkeby网络的chainId是否设置为4,链ID配置错误会导致交易发送到错误的网络 - 确认你使用的Rinkeby RPC节点服务正常,失效的公共RPC会在本地模拟交易返回结果但不会实际广播到链上,可更换可用RPC后重新部署
- 检查部署所用钱包的Rinkeby ETH余额是否足够覆盖部署gas费用,余额不足时部分节点会直接返回预计算地址但不广播交易
- 检查
- 若能搜索到交易但状态为Pending:说明你设置的gas参数过低,交易未被矿工打包:
- 在hardhat.config的Rinkeby网络配置中调高
gasPrice,或直接设置gas: "auto"让Hardhat自动估算合适的gas参数 - 也可以用相同nonce发送一笔gas价格更高的交易,覆盖当前pending的部署交易
- 在hardhat.config的Rinkeby网络配置中调高
- 若搜索不到该交易:说明交易根本没有广播到Rinkeby公网,排查以下配置项:
- 第二步:部署交易确认上链后,先验证合约地址的链上状态
- 确认该地址下存在合约字节码,而非普通空账户
- 确认构造函数参数正确传入,合约已完成初始化
- 第三步:修复后重新验证交互
等合约实际部署上链后,再导入Remix就可以正常调用greeting()方法获取返回值,也可以正常发起setGreeting交易。
内容的提问来源于stack exchange,提问作者Bram Hoogenkamp
相关产品推荐
相关产品推荐

