This is a token maker code, so its failing to deploy with the following reason:
Deployment Failed
"TokenMaker" hit an invalid opcode while deploying. Try:
* Verifying that your constructor params satisfy all assert conditions.
* Verifying your constructor code doesn't access an array out of bounds.
* Adding reason strings to your assert statements.
Exiting: Review successful transactions manually by checking the transaction hashes above on Etherscan.
Error: *** Deployment Failed ***
"TokenMaker" hit an invalid opcode while deploying. Try:
* Verifying that your constructor params satisfy all assert conditions.
* Verifying your constructor code doesn't access an array out of bounds.
* Adding reason strings to your assert statements.
This is the code below
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract Token is ERC20 { address private _owner; uint8 private _decimals; uint256 private _totalSupply;
constructor(string memory name_, string memory symbol_, address tOwner, uint8 decimals, uint256 tSupply) ERC20(name, symbol_) {
_owner = _tOwner;
decimals = decimals;
_totalSupply = _tSupply * (10 ** uint256(decimals()));
_mint(_owner, _totalSupply);
}
function owner() public view returns(address){
return _owner;
}
function decimals() public view override returns(uint8){
return _decimals;
}
function totalSupply() public view override returns(uint256){
return _totalSupply;
}
} contract TokenMaker{ uint256 public baseFee = 0.0005 ether; mapping(address => address) private _myToken; address public owner; bool locked;
constructor(){
owner = msg.sender;
}
function create(
string memory _name,
string memory _symbol,
address _owner,
uint8 _decimals,
uint256 _totalSupply
) public payable{
require(msg.value == baseFee, "Insufficient Fee");
_myToken[msg.sender] = address(new Token(
_name,
_symbol,
_owner,
_decimals,
_totalSupply
));
}
function withdraw() public {
require(!locked, "Locked");
require(owner == msg.sender, "Not owner");
require(address(this).balance > 0, "Insufficient contract balance");
locked = true;
payable(owner).transfer(address(this).balance);
locked = false;
}
function myToken() public view returns(address){
return _myToken[msg.sender];
}
}
this is the deployment script:
const TokenMaker = artifacts.require('TokenMaker'); const Token = artifacts.require('Token');
module.exports = function(deployer){
deployer.deploy(TokenMaker);
}