令牌合约是抽象的,因此不会迁移

时间:2019-07-10 21:49:52

标签: solidity truffle erc20 open-zeppelin

我正在研究荷兰式拍卖形式的ICO合同,目前正在尝试迁移ERC20合同的早期阶段以测试基本功能(它具有正确的名称,符号和小数点)。该合同可以编译,但是由于它是“抽象合同”,所以我不能迁移它。我的令牌合同继承自Open Zeppelin合同ERC20Detailed,而ERC20Detailed又继承了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”文件中,而不是单独部署它们。    *继承抽象的协定必须完全实现其所有方法签名。    *仅实现一部分继承抽象的合同也被视为抽象。

1 个答案:

答案 0 :(得分:1)

如果您靠近ERC20Detailed contract,您会注意到ERC20Detailed is IERC20。用简单的英语说,“此ERC20Detailed继承了IERC20的所有功能”。

现在,看看IERC20 contract。您会注意到那里的所有功能都以;终止,没有逻辑。这就是我们所谓的Abstract Contracts

您的前端合同(令牌)希望使用以下所有功能:

  • ERC20Detailed-文件中包含所有实现
  • IERC20(通过ERC20Detailed)-文件中没有实现

这就是为什么您遇到This contract does not implement all functions and thus cannot be created错误的原因。

要解决此问题,请尝试以下方法:

pragma solidity ^0.5.8;

import "path-to/ERC20/ERC20.sol";
import "path-to/ERC20/ERC20Detailed.sol";

contract Token is ERC20, ERC20Detailed {
   constructor(string memory name, string memory symbol, uint8 decimals) 
    ERC20Detailed(name,symbol,decimals) 
    public {
        // TODO    
    }
}

ERC20 contract具有IERC20合同的所有实现。您可以在下面的Remix首先this code中进行尝试:

pragma solidity ^0.5.8;

import "github.com/OpenZeppelin/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol";
import "github.com/OpenZeppelin/openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol";

contract Token is ERC20, ERC20Detailed {
   constructor(string memory name, string memory symbol, uint8 decimals) 
    ERC20Detailed(name,symbol,decimals) 
    public {
        // TODO    
    }
}

enter image description here