Dieser Vertrag implementiert nicht alle Funktionen und kann daher nicht veröffentlicht werden

Bei Remix erhalte ich beim Implementieren des hier vorgeschlagenen Vertrags - https://www.youtube.com/watch?v=JHrQ3l2tT78 - die Fehlermeldung "Dieser Vertrag implementiert nicht alle Funktionen und kann daher nicht veröffentlicht werden."

Ich habe andere Beiträge gesehen, die besagen, dass die Konstruktorfunktion Parameter auflisten muss, aber ich habe erfolglos versucht, Parameter zu „NewToken“ hinzuzufügen. Vielleicht füge ich diese falsch hinzu, aber da das tut keine hat, denke ich, dass ich vielleicht etwas anderes falsch mache.

Schätzen Sie jede Hilfe.

pragma solidity ^0.4.11;

import './IERC20.sol';

/**
 * @title Standard ERC20 token
 */
contract NewToken is IERC20 {

    uint public constant _totalSupply = 1000000;
    uint8 public constant _decimals = 3;
    string public constant _symbol = 'NTK';
    string public constant _name = 'NewToken';

    mapping(address => uint256) balances;
    mapping(address => mapping(address => uint256)) approved;


    function NewToken() public {
        balances[msg.sender] = _totalSupply;
    }

    function decimals() public constant returns (uint8 decimals) {
        return _decimals;
    }

    function totalSupply() public constant returns (uint256 totalSupply) {
        return _totalSupply;
    }

    function balanceOf(address _owner) public constant returns (uint256 balance) {
        return balances[_owner];
    }

    function transfer(address _to, uint256 _value) public returns (bool success) {
        require(
            balances[msg.sender] >= _value && _value > 0    
        );
        balances[msg.sender] -= _value;
        balances[_to] += _value;
        Transfer(msg.sender, _to, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        require(
            approved[_from][msg.sender] >= _value && balances[_from] >= _value && _value > 0
        );
        balances[_from] -= _value;
        balances[_to] += _value;
        approved[_from][msg.sender] -= _value;
        Transfer(_from, _to, _value);
        return true;
    }

    function approve(address _spender, uint256 _value) public returns (bool success) {
        approved[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {
        return approved[_owner][_spender];
    }

    event Transfer(address indexed _from, address indexed _to, uint256 _value);

    event Approval(address indexed _owner, address indexed _spender, uint256 _value);

}

IERC20.sol

pragma solidity ^0.4.11;

interface IERC20 {
    function decimals() public constant returns (uint8 decimals);
    function totalSupply() public constant returns (uint256 totalSupply);
    function balanceOf(address _owner) public constant returns (uint256 balance);
    function transfer(address _to, uint256 _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
    function approve(address _spender, uint256 _value) public returns (bool success);
    function allowance(address _owner, address _spender) public constant returns (uint256 remaining);
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

Antworten (5)

Ich habe mich entschieden, Ihren Code in Remix zu laden und mich selbst davon zu überzeugen, und ... keine Probleme.

Möglicherweise liegt das Problem in der Vertrautheit mit Remix oder Solidity. Der IERC20Vertrag kann nicht kompiliert werden, da er nur eine Reihe von Funktionssignaturen beschreibt, ohne zu definieren, was sie tun. Das NewTokentut es. Hauptsache, Sie können NewTokenwie erwartet kompilieren, erstellen und bereitstellen. Remix lässt Sie wählen, aber nur eine Wahl wird erfolgreich sein.

Ebenfalls. es gibt einen ganz neuen Remix, an den ich mich noch nicht ganz gewöhnt habe. Das Bild verwendet den alten Remix unter https://yann300.github.io/remix04 . Ich würde nicht ausschließen, dass Ihre Probleme auf die Frische der Remix-Veröffentlichung zurückzuführen sind.

Hier ist es in Remix, um zu zeigen, dass es funktioniert.

Geben Sie hier die Bildbeschreibung ein

Ich hoffe es hilft.

Hm, danke. Ich denke, es ist der alte vs. der neue Remix. Er zeigt auch den alten Remix in seinem Sample, und dieser neue wirkt auf andere Weise fehlerhaft. Wie kommt man zum "alten" Remix?

Ich hatte die gleiche Warnung, aber in meinem Fall bezog sie sich auf den Konstruktor-Zugriffsmodifikator. Ich musste "intern" in "öffentlich" ändern und es war alles glatt :) nur um zu sagen, dass es verschiedene Fälle gibt, in denen Sie diese Situation haben können.

Arg, ja, in der neuen Benutzeroberfläche (und vielleicht der alten) wählen Sie aus, welche Sie auf Schwarm veröffentlichen oder erstellen möchten, und ich musste nur das Dropdown-Menü zum Vertrag anstelle der Benutzeroberfläche ändern. War aus dem Tutorial nicht ersichtlich. Blöd, aber hoffentlich findet jemand anderes das nützlich. Vielen Dank!

Ich habe diesen Fehler; und dies war die Lösung: Wenn Sie Vererbung verwenden und die Superklasse a hat constructor, die Argumente akzeptiert, haben Sie zwei Möglichkeiten, davon zu erben:

contract Base {
    uint x;
    constructor(uint _x) public { x = _x; }
}

// Either directly specify in the inheritance list...
contract Derived1 is Base(7) {
    constructor() public {}
}

// or through a "modifier" of the derived constructor.
contract Derived2 is Base {
    constructor(uint _y) Base(_y * _y) public {}
}

Quelle: https://solidity.readthedocs.io/en/v0.5.0/contracts.html#arguments-for-base-constructors

Die neue Remix-Schnittstelle gibt diesen Fehler aus, wenn eine Ihrer Funktionen ein internes/privates Sichtbarkeitsschlüsselwort hat, aber öffentlich/extern sein sollte.

Eine doppelte Überprüfung Ihrer Sichtbarkeits-Keywords sollte das Problem beheben.

Danke @thegostep, aber siehe oben, die Antwort war, dass die falsche Funktion ausgewählt wurde.