0

**Hey guys ! I just try to make a contract for create a contract.

It supposed to be ERC-20 interface so my first contract for this.

But I don’t know how can I do _mint and createContract functions

I got errors so anyone can help me ? I will be appreciative** pragma solidity ^0.5.0;

library SafeMath {
    function add(uint a, uint b) internal pure returns (uint c) {
        c = a + b;
        require(c >= a);
    }
    function sub(uint a, uint b) internal pure returns (uint c) {
        require(b <= a);
        c = a - b;
    }
    function mul(uint a, uint b) internal pure returns (uint c) {
        c = a * b;
        require(a == 0 || c / a == b);
    }
    function div(uint a, uint b) internal pure returns (uint c) {
        require(b > 0);
        c = a / b;
    }
}
contract SubToken  {
    function totalSupply() public view returns (uint);
    function balanceOf(address tokenOwner) public view returns (uint balance);
    function allowance(address tokenOwner, address spender) public view returns (uint remaining);
    function transfer(address to, uint tokens) public returns (bool success);
    function approve(address spender, uint tokens) public returns (bool success);
    function transferFrom(address from, address to, uint tokens) public returns (bool success);
    function mint(address from, uint amount) public returns(bool success);
    constructor(string memory name,string memory symbol,uint8 decimals,uint256 initialSupply) 
    public{
        mint(msg.sender, initialSupply);

    }

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);

}
contract MainContrat{
    mapping(address => uint) _balances;
    mapping(address => mapping(address => uint)) allowed;
    mapping(address => SubToken) public tokenlist;
    address[] public contracts;
    address owner = msg.sender;

    using SafeMath for uint;
    string public symbol;
    string public  name;
    uint8 public decimals;
    uint _totalSupply;

    constructor(string memory name,string memory symbol,uint8 decimals,uint256 initialSupply) public{
        _mint(msg.sender, initialSupply);
    }    

    function _mint(address account, uint256 amount) internal {
        //require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        //emit Transfer(address(0), account, amount);
    }
    function createNewContract(string memory name,string memory symbol,uint8 decimals,uint256 initialSupply) public returns(address newContract){
    SubToken st = new SubToken(name,symbol,decimals,initialSupply);
    contracts.push(st);
    return st;
    }
}

errors is here : browser/crtcont2.sol:49:19: TypeError: Trying to create an instance of an abstract contract. SubToken st = new SubToken(); ^----------^ browser/crtcont2.sol:14:5: Missing implementation: function allowance(address tokenOwner, address spender) public view returns (uint remaining); ^-------------------------------------------------------------------------------------------^ browser/crtcont2.sol:16:5: Missing implementation: function approve(address spender, uint tokens) public returns (bool success); ^---------------------------------------------------------------------------^ browser/crtcont2.sol:13:5: Missing implementation: function balanceOf(address tokenOwner) public view returns (uint balance); ^------------------------------------------------------------------------^ browser/crtcont2.sol:18:5: Missing implementation: function mint(address from, uint amount) public returns(bool success); ^--------------------------------------------------------------------^ browser/crtcont2.sol:12:5: Missing implementation: function totalSupply() public view returns (uint); ^------------------------------------------------^ browser/crtcont2.sol:15:5: Missing implementation: function transfer(address to, uint tokens) public returns (bool success); ^-----------------------------------------------------------------------^ browser/crtcont2.sol:17:5: Missing implementation: function transferFrom(address from, address to, uint tokens) public returns (bool success); ^-----------------------------------------------------------------------------------------^
browser/crtcont2.sol:50:20: TypeError: Invalid type for argument in function call. Invalid implicit conversion from contract SubToken to address requested. contracts.push(st); ^^ browser/crtcont2.sol:51:12: TypeError: Return argument type contract SubToken is not implicitly convertible to expected type (type of first return variable) address. return st; ^^

it will suppose to be my constructor but I dont know how can I fix :(

1 Answer 1

1

Looks like to fix your errors you'll need to do a few things:

First, for every function in SubContract, you'll need to define them. For instance,

totalSupply()

needs some code to go with it, so the compiler knows what to do when you call that function. All of the "missing interface" errors go with that. You need to define

function totalSupply() public view returns (uint);
function balanceOf(address tokenOwner) public view returns (uint balance);
function allowance(address tokenOwner, address spender) public view returns (uint remaining);
function transfer(address to, uint tokens) public returns (bool success);
function approve(address spender, uint tokens) public returns (bool success);
function transferFrom(address from, address to, uint tokens) public returns (bool success);
function mint(address from, uint amount) public returns(bool success);

Next, you'll need to cast "st" to an address by using "address(st)" at the bottom of your code. Where your code says:

contracts.push(st);
return st;

the compiler is expecting an address, so use this instead of "st"

address(st)

2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.