Remix: Dieser Vertrag implementiert nicht alle Funktionen und kann daher nicht fehlerhaft erstellt werden

Ich habe 2 Verträge:

pragma solidity ^0.4.18;

contract Coin {
    function transfer(address whom, uint256 amount) public;
}

contract ManagedWallet {
    event ReceivedEther(address source, uint256 amount);
    event ContractCalled(address theContract,uint256 value, bytes data);

    function () public payable {
        ReceivedEther(msg.sender,msg.value);
    }

    function sendEther(address whom, uint256 amount) public {
        whom.transfer(amount);
    }

    function sendToken(Coin token, address whom, uint256 amount) public {
        token.transfer(whom,amount);
    }

    function callContract(address theContract, uint256 value, bytes data) public {
        require(theContract.call.value(value)(data));
        ContractCalled(theContract,value,data);
    }

}

Aber wenn ich versuche, diesen Vertrag bereitzustellen Coin, erhalte ich diesen Fehler in Remix.

Dieser Vertrag implementiert nicht alle Funktionen und kann daher nicht erstellt werden

Was fehlt mir hier? Ich weiß Hilfe wirklich zu schätzen, da ich neu in der intelligenten Vertragsentwicklung und Solidity bin.

Antworten (2)

Das Problem ist klar, aber ich kann nicht ganz aus dem fehlerhaften Code auf die Absicht extrapolieren.

Coin wird nicht bereitgestellt, weil es eine Funktion deklariert, transferohne zu definieren, was passieren soll (der {}Block ist nicht definiert). Dies ist ein nützliches Muster, wenn Sie mit der Vererbung beginnen, aber wenn es erlaubt wäre, so eingesetzt zu werden, dann würde es einen Vertrag mit einer undefinierten Funktion geben, und das geht nicht.

Da es noch am Anfang steht, würde ich vielleicht vorschlagen, mit diesem vereinfachten Ding herumzuspielen, das Ihnen helfen könnte, sich ein mentales Bild von dem zu machen, was passiert.

contract Test {

  event LogTest(address sender, address toWhom, uint amount);

  function test(address whom, uint256 amount) public returns(bool success) {
    LogTest(msg.sender, whom, amount);
    return true;
  }
}

Ich hoffe es hilft.

Lesen Sie mehr über Abstract Contracts, um zu verstehen, warum dieser Fehler auftritt. https://solidity.readthedocs.io/en/v0.5.3/contracts.html#abstract-contract