Я работаю над контрактом ICO в стиле голландского аукциона и в настоящее время пытаюсь перенести раннюю стадию моего контракта ERC20, чтобы проверить основные функции (имеет ли оно правильное имя, символ и десятичные дроби).Контракт компилируется, но я не могу его перенести, так как это «абстрактный контракт».Мой контракт токенов наследуется от ERC20Detailed, контракта Open Zeppelin, который, в свою очередь, наследуется от контракта интерфейса IERC20.Что я могу сделать, чтобы это исправить?Я пытался, чтобы мой токен-контракт также унаследовал от ERC20 базовый контракт, но в нем говорилось, что идентификатор уже объявлен.Я вижу возможные ответы от вывода терминала Truffle, но мне любопытно, почему моя реализация не будет работать, и мне хотелось бы получить дополнительную помощь в понимании интерфейсов Solidity и абстрактных контрактов.
Что я могу сделать, чтобы это исправить?Я пытался, чтобы мой токен-контракт также унаследовал от ERC20 базовый контракт, но в нем говорилось, что идентификатор уже объявлен.
pragma solidity ^0.5.8;
import "node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol";
contract Token is ERC20Detailed{
constructor(string memory _name, string memory _symbol, uint8 _decimals)
ERC20Detailed(_name, _symbol, _decimals)
public
{
}
}
Вывод с терминала Bash
«Токен» является абстрактным контрактом или интерфейсом и не может быть развернут.* Импортируйте абстракции в файл .sol, в котором они используются вместо того, чтобы развертывать их отдельно.* Контракты, которые наследуют абстракцию, должны точно реализовывать все сигнатуры своих методов.* Контракт, который реализует только часть унаследованной абстракции, также считается абстрактным.