Remix: Этот контракт не реализует все функции и поэтому не может быть создан.

У меня 2 контракта:

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

}

Но когда я пытаюсь развернуть этот Coinконтракт, я получаю эту ошибку в Remix.

Этот контракт не реализует все функции и поэтому не может быть создан

Что мне здесь не хватает? Очень ценю помощь, потому что я новичок в разработке смарт-контрактов и Solidity.

Ответы (2)

Проблема ясна, но я не могу экстраполировать ошибочный код на намерение.

Монета не будет развернута, потому что она объявляет функцию transferбез определения того, что должно произойти ( {}блок не определен). Это полезный шаблон, когда вы попадаете в наследование, но если бы его можно было развернуть таким образом, тогда был бы контракт с неопределенной функцией, а это не годится.

Поскольку это только начало, я могу предложить поиграть с этой упрощенной штуковиной, которая может помочь вам сформировать ментальную картину того, что происходит.

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

Надеюсь, поможет.

Прочтите об абстрактных контрактах, и вы получите более глубокое понимание того, почему возникает эта ошибка. https://solidity.readthedocs.io/en/v0.5.3/contracts.html#abstract-contract