在使用安全帽点火部署合约时,我遇到了这个奇怪的错误。我正在 sepolia testNet 上部署。
这是我的投票智能合约:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Voting {
struct Candidate {
string name;
uint256 voteCount;
}
Candidate[] public candidates;
address owner;
mapping(address => bool) public voters;
uint256 public votingStart;
uint256 public votingEnd;
constructor(string[] memory _candidateName, uint256 _durationInMinutes) {
for (uint256 i = 0; i < _candidateName.length; i++) {
candidates.push(Candidate({name: _candidateName[i], voteCount: 0}));
}
owner = msg.sender;
votingStart = block.timestamp;
votingEnd = block.timestamp + (_durationInMinutes * 1 minutes);
}
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
function addCandidate(string memory _name) public onlyOwner {
candidates.push(Candidate({name: _name, voteCount: 0}));
}
function vote(uint256 _candidateIndex) public {
require(!voters[msg.sender], "You have already voted.");
require(
_candidateIndex < candidates.length,
"Invalid candidate index."
);
candidates[_candidateIndex].voteCount++;
voters[msg.sender] = true;
}
function getAllVotesOfCandiates() public view returns (Candidate[] memory) {
return candidates;
}
function getVotingStatus() public view returns (bool) {
return (block.timestamp >= votingStart && block.timestamp < votingEnd);
}
function getRemainingTime() public view returns (uint256) {
require(block.timestamp >= votingStart, "Voting has not started yet.");
if (block.timestamp >= votingEnd) {
return 0;
}
return votingEnd - block.timestamp;
}
}
部署脚本
const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules");
module.exports = buildModule("VoteModule", (m) => {
const Candidates = ["Atharva", "Pratham"];
const Time = 120;
const vote = m.contract("Voting", [Candidates, Time]);
return { vote };
});
错误:
Batch #1
Executing VoteModule#Voting...
An unexpected error occurred:
IgnitionError: IGN1: Internal Hardhat Ignition invariant was violated: Expected failed simulation after having failed to estimate gas
at assertIgnitionInvariant (C:\Users\HP\OneDrive\Desktop\sample\node_modules\@nomicfoundation\ignition-core\src\internal\utils\assertions.ts:9:11)
at sendTransactionForOnchainInteraction (C:\Users\HP\OneDrive\Desktop\sample\node_modules\@nomicfoundation\ignition-core\src\internal\execution\future-processor\helpers\network-interaction-execution.ts:156:28)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at sendTransaction (C:\Users\HP\OneDrive\Desktop\sample\node_modules\@nomicfoundation\ignition-core\src\internal\execution\future-processor\handlers\send-transaction.ts:86:18)
at FutureProcessor.processFuture (C:\Users\HP\OneDrive\Desktop\sample\node_modules\@nomidules\@nomicfoundation\ignition-core\src\internal\execution\execution-engine.ts:153:30)
at ExecutionEngine.executeModule (C:\Users\HP\OneDrive\Desktop\sample\node_modules\@nomicfoundation\ignition-core\src\internal\execution\execution-engine.ts:114:25)
at Deployer.deploy (C:\Users\HP\OneDrive\Desktop\sample\node_modules\@nomicfoundation\ignition-core\src\internal\deployer.ts:194:25)
at SimpleTaskDefinition.action (C:\Users\HP\OneDrive\Desktop\sample\node_modules\@nomicfoundation\hardhat-ignition\src\index.ts:302:24)
at Environment._runTaskDefinition (C:\Users\HP\OneDrive\Desktop\sample\node_modules\hardhat\src\internal\core\runtime-environment.ts:359:14)
我可以使用sepolia测试网上已经编写的脚本来部署hardhat的核心合约。
我面临着同样的错误。就我而言,我的私钥不正确。
错误
IgnitionError: IGN1: Internal Hardhat Ignition invariant was violated: Expected failed simulation after having failed to estimate gas
意味着你没有足够的以太坊作为gas来部署智能合约。有关更多详细信息,请参阅https://github.com/NomicFoundation/hardhat-ignition/issues/750。我需要 0.6 ETH 来部署合约,但我认为我不需要那么多,所以这就是问题所在。