我有一个让我非常绝望的问题,我认为这可能与“等待确认?”有关。问题,但我不知道如何激活它。
问题是,由于对我的 ERC-721 合同功能的请求,我在部署脚本中收到以下消息:
原因:'无法估算气体;交易可能会失败或可能需要手动限制气体”,代码:“UNPREDICTABLE_GAS_LIMIT”,
我认为这可能与命令彼此快速发生有关,因为当我手动在 hardhad 控制台(npx hardhat console --network rinkeby)中执行以下步骤时,一切都可以正常工作而不会出现此错误(即使有<>.confirmations 总是0,什么我不明白)
我在运行的 deploy.js 中有以下命令:
npx 安全帽运行 --network rinkeby 脚本/deploy.js
async function main() {
const BBA = await hre.ethers.getContractFactory("mycontract");
const bba = await BBA.deploy();
await bba.deployed();
console.log("mycontract deployed to:", bba.address);
await bba.safeMint("0x123...", 0, 'https://gateway.pinata.cloud/ipfs/url');
await bba.lockToken(0, "1644598343");
console.log(await bba.getLock(0));
...
}
通过调用 await bba.getLock(0) 我得到 错误:无法估计气体;交易可能会失败或可能需要手动限制气体 (error={"name":"ProviderError","code":-32000,"_isProviderError":true}, method="call", transaction= ...
我基于 openzeppelin 合约向导 https://docs.openzeppelin.com/contracts/4.x/wizard构建了一个 1:1 ERC-721 。
在这份合同中,我添加了一个简单的功能:
mapping(uint256 => uint256) private _locks;
function lockToken(
uint256 targetTokenId,
uint256 since,
) public {
_locks[targetTokenId] = since;
}
function getLock(uint256 targetTokenId) public view returns (uint256) {
return _locks[targetTokenId];
}
我将 INFURA 与以下 hardhat.config.js 一起使用:
const { projectId, mnemonic } = require('./secrets.json');
module.exports = {
rinkeby: {
url: "https://rinkeby.infura.io/v3/" + projectId,
accounts: { mnemonic: mnemonic },
confirmations: 2,
gas: 2100000,
gasPrice: 8000000000,
saveDeployments: true
}
},
solidity: {
version: "0.8.4",
settings: {
evmVersion: "byzantium",
optimizer: {
enabled: true,
runs: 1500,
}
}
}
};
任何人都可以指导我,解决这个问题的原因吗?
提前致谢。