Goerli测试网NFT铸造交易长时间Pending问题求助
解决NFT铸造交易Pending无法获取回执的问题
可能原因及对应解决方案
1. Gas参数设置不合理(最常见原因)
你的代码仅通过getGasPrice()获取基础Gas价格,但Goerli测试网的矿工有时需要更高的优先级费用或总费用才会打包交易。当前输出的Gas价格约40.68 Gwei,可能低于网络当前的最低要求。
修复方法:
改用EIP-1559动态费用机制,显式设置优先级费用和总费用:
// 替换原mintNFT调用,根据网络情况调整数值 const mintNftTx = await BasicNft.mintNFT({ maxPriorityFeePerGas: ethers.utils.parseUnits("5", "gwei"), maxFeePerGas: ethers.utils.parseUnits("50", "gwei") })
也可以额外设置Gas Limit,避免合约执行时Gas不足:
const mintNftTx = await BasicNft.mintNFT({ gasLimit: 300000, // BasicNFT mint一般消耗15-20万Gas,预留冗余量 maxPriorityFeePerGas: ethers.utils.parseUnits("5", "gwei"), maxFeePerGas: ethers.utils.parseUnits("50", "gwei") })
2. 合约实例未正确连接到签名钱包
代码中用ethers.getContract("BasicNft")获取合约实例,但未指定签名者,可能默认使用的账户存在权限或nonce问题。
修复方法:
将合约连接到你的部署者钱包:
// 获取部署者账户 const [deployer] = await ethers.getSigners() // 绑定签名者到合约 const BasicNft = await ethers.getContract("BasicNft", deployer) const NftMarketplace = await ethers.getContract("NftMarketplace", deployer)
3. RPC节点同步问题
你使用的Alchemy RPC节点可能出现延迟或同步异常,导致交易状态无法及时更新。
修复方法:
- 更换其他Goerli测试网RPC节点,修改
.env中的GOERLI_RPC_URL。 - 清理Hardhat缓存后重试:执行
npx hardhat clean,再重新运行脚本。
4. 交易Nonce冲突
如果钱包存在未确认的历史交易,新交易的nonce可能重复或顺序错误,导致交易卡住。
修复方法:
手动指定交易nonce,确保与钱包当前nonce一致:
const nonce = await deployer.getTransactionCount() const mintNftTx = await BasicNft.mintNFT({ nonce: nonce, // 加上Gas参数 })
也可以在钱包中取消所有Pending交易后,重新运行脚本。
5. 合约代码逻辑异常
检查BasicNft合约的mintNFT函数是否存在问题:
- 确认函数是公开可调用的,没有额外的访问控制限制(比如仅白名单地址可 mint)。
- 确认函数内部逻辑无错误(比如缺少tokenURI参数、状态变量异常),可以先在Hardhat本地网络运行脚本验证功能。
临时排查步骤
- 若控制台输出有交易哈希,复制到Goerli区块浏览器查询状态,查看是否有明确错误提示。
- 执行
npx hardhat balance --account <你的钱包地址> --network goerli,确认钱包ETH余额充足。 - 去掉
--network goerli参数,在本地网络运行脚本,验证代码逻辑是否正常。
内容的提问来源于stack exchange,提问作者Mei Kei
相关产品推荐
相关产品推荐

