Vertrag aus Funktion / Vertrag erstellen

**Hallo Leute ! Ich versuche nur, einen Vertrag abzuschließen, um einen Vertrag zu erstellen.

Es sollte eine ERC-20-Schnittstelle sein, also mein erster Vertrag dafür.

Aber ich weiß nicht, wie ich _mint- und createContract-Funktionen ausführen kann

Ich habe Fehler, also kann mir jemand helfen? Ich werde dankbar sein ** 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;
    }
}

Fehler sind hier: browser/crtcont2.sol:49:19: TypeError: Versuchen, eine Instanz eines abstrakten Vertrags zu erstellen. SubToken st = neues SubToken(); ^----------^ browser/crtcont2.sol:14:5: Fehlende Implementierung: Funktion Allowance(address tokenOwner, address spender) Public View gibt zurück (uint verbleibend); ^------------------------------------------------------------- ------------------------------------------^ browser/crtcont2.sol:16 :5: Fehlende Implementierung: Funktion genehmigen (Adresse Spender, uint Tokens) öffentliche Rückgaben (bool Erfolg); ^------------------------------------------------------------- ---------------------^ browser/crtcont2.sol:13:5: Fehlende Implementierung: Funktion balanceOf(address tokenOwner) public view gibt zurück ( Unint-Guthaben); ^------------------------------------------------------------- -----------------------^ browser/crtcont2.sol:18:5: Fehlende Implementierung: Funktion mint(Adresse von, uint Betrag) öffentliche Rückgaben(bool Erfolg); ^------------------------------------------------------------- -------------------^ browser/crtcont2.sol:12:5: Fehlende Implementierung: Funktion totalSupply() öffentliche Ansicht gibt zurück (uint); ^-------------------------------------------------------------^ browser/crtcont2.sol:15:5: Fehlende Implementierung: Funktionsübertragung (Adresse an, uint-Token) öffentliche Rückgabe (bool Erfolg); ^------------------------------------------------------------- ----------------------^ browser/crtcont2.sol:17:5: Fehlende Implementierung: Funktion transferFrom(Adresse von, Adresse an, uint-Token) öffentliche Rückgaben (boolescher Erfolg); ^------------------------------------------------------------- ----------------------------------------^ ^------------------------------------------------------------- -------------------^ browser/crtcont2.sol:12:5: Fehlende Implementierung: Funktion totalSupply() öffentliche Ansicht gibt zurück (uint); ^-------------------------------------------------------------^ browser/crtcont2.sol:15:5: Fehlende Implementierung: Funktionsübertragung (Adresse an, uint-Token) öffentliche Rückgabe (bool Erfolg); ^------------------------------------------------------------- ----------------------^ browser/crtcont2.sol:17:5: Fehlende Implementierung: Funktion transferFrom(Adresse von, Adresse an, uint-Token) öffentliche Rückgaben (boolescher Erfolg); ^------------------------------------------------------------- ----------------------------------------^ ^------------------------------------------------------------- -------------------^ browser/crtcont2.sol:12:5: Fehlende Implementierung: Funktion totalSupply() öffentliche Ansicht gibt zurück (uint); ^-------------------------------------------------------------^ browser/crtcont2.sol:15:5: Fehlende Implementierung: Funktionsübertragung (Adresse an, uint-Token) öffentliche Rückgabe (bool Erfolg); ^------------------------------------------------------------- ----------------------^ browser/crtcont2.sol:17:5: Fehlende Implementierung: Funktion transferFrom(Adresse von, Adresse an, uint-Token) öffentliche Rückgaben (boolescher Erfolg); ^------------------------------------------------------------- ----------------------------------------^ Fehlende Implementierung: Funktionsübertragung (Adresse an, uint-Token) öffentliche Rückgaben (boolischer Erfolg); ^------------------------------------------------------------- ----------------------^ browser/crtcont2.sol:17:5: Fehlende Implementierung: Funktion transferFrom(Adresse von, Adresse an, uint-Token) öffentliche Rückgaben (boolescher Erfolg); ^------------------------------------------------------------- ----------------------------------------^ Fehlende Implementierung: Funktionsübertragung (Adresse an, uint-Token) öffentliche Rückgaben (boolischer Erfolg); ^------------------------------------------------------------- ----------------------^ browser/crtcont2.sol:17:5: Fehlende Implementierung: Funktion transferFrom(Adresse von, Adresse an, uint-Token) öffentliche Rückgaben (boolescher Erfolg); ^------------------------------------------------------------- ----------------------------------------^
browser/crtcont2.sol:50:20: TypeError: Ungültiger Typ für Argument im Funktionsaufruf. Ungültige implizite Konvertierung vom Vertrags-SubToken zur angeforderten Adresse. verträge.push(st); ^^ browser/crtcont2.sol:51:12: TypeError: Rückgabeargumenttyp Contract SubToken kann nicht implizit in Adresse des erwarteten Typs (Typ der ersten Rückgabevariablen) konvertiert werden. Rückkehr st; ^^

Es wird angenommen, dass es mein Konstruktor ist, aber ich weiß nicht, wie ich es beheben kann :(

Antworten (1)

Um Ihre Fehler zu beheben, müssen Sie anscheinend ein paar Dinge tun:

Zunächst müssen Sie jede Funktion in SubContract definieren. Zum Beispiel,

totalSupply()

benötigt etwas Code, damit der Compiler weiß, was zu tun ist, wenn Sie diese Funktion aufrufen. Alle Fehler "fehlende Schnittstelle" gehen damit einher. Sie müssen definieren

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);

Als Nächstes müssen Sie „st“ in eine Adresse umwandeln, indem Sie „address(st)“ am Ende Ihres Codes verwenden. Wo Ihr Code sagt:

contracts.push(st);
return st;

Der Compiler erwartet eine Adresse, verwenden Sie diese also anstelle von "st"

address(st)

Hey Deric, ich habe meinen Code geändert, aber die Ergebnisse haben sich nicht geändert.