У меня 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.
Проблема ясна, но я не могу экстраполировать ошибочный код на намерение.
Монета не будет развернута, потому что она объявляет функцию 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