代币合约不会迁移,因为它是抽象的

Chr*_*ert 1 solidity truffle erc20 openzeppelin

我正在开发荷兰式拍卖风格的 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
        {

        }


}
Run Code Online (Sandbox Code Playgroud)

Bash 终端的输出

“Token”是抽象合约或接口,无法部署。* 将抽象导入到使用它们的“.sol”文件中,而不是单独部署它们。* 继承抽象的合约必须准确实现其所有方法签名。* 仅实现继承抽象的一部分的合约也被认为是抽象的。

Zul*_*din 5

如果您仔细查看ERC20详细合约,您会注意到ERC20Detailed is IERC20。用简单的英语来说,它说“这个 ERC20Detailed 继承了 IERC20 的所有功能”

现在,看一下IERC20 合约;您会注意到所有函数都被毫无逻辑地终止。这就是我们所说的Solidity 中的抽象合约

您的前端合约(令牌)想要使用以下位置的所有功能:

  • 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    
    }
}
Run Code Online (Sandbox Code Playgroud)

ERC20合约具有IERC20合约的所有实现。您可以先在Remix中尝试一下,如下代码

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    
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述