error al implementar token para ropsten usando remix

Estoy tratando de implementar mi token en Ropsten Network usando REMIX IDE, pero sigo recibiendo este error "el contrato puede ser abstracto, no implementar los métodos de un padre abstracto por completo o no invocar correctamente el constructor de un contrato heredado ".

mi código es:

pragma solidity ^0.5.0;

//--------------------------------------------------------------------------------------------------
//                                      ERC20 Interface
//--------------------------------------------------------------------------------------------------
contract ERC20Interface {
    function totalSupply() public view returns (uint);
    function balanceOf(address tokenOwner) public view returns (uint balance);
    function allowance(address tokenOwner, address spender) public view returns (uint remaining);
    function transfer(address to, uint tokens) public returns (bool success);
    function approve(address spender, uint tokens) public returns (bool success);
    function transferFrom (address from, address to, uint tokens)   public returns (bool success);
    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}
//--------------------------------------------------------------------------------------------------
//                                      Safe Math library
//--------------------------------------------------------------------------------------------------
contract SafeMath {
    function safeAdd(uint a, uint b) public pure returns (uint c) {
        c = a + b;
        require(c >= a);
    }
    function safeSub(uint a, uint b) public pure returns (uint c) {
        require(b <= a); 
        c = a - b; 
    } 
}

contract erc20 is ERC20Interface, SafeMath {
    string public name;
    string public symbol;
    uint8 public decimals;
    
    uint256 public _totalSupply;
    
    mapping(address => uint) balances;
    mapping(address => mapping(address => uint)) allowed;
    

    constructor() public {
        name = "erc20";
        symbol = "TCC";
        decimals = 8;
        _totalSupply = 100000000000000000000000000;
        
        balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }
    
    function totalSupply() public view returns (uint) {
        return _totalSupply - balances[address(0)];
    }
    
    function balanceOf(address tokenOwner) public view returns (uint balance) {
        return balances[tokenOwner];
    }
    
    function allowance(address tokenOwner, address spender) public view returns (uint remaining) {
        return allowed[tokenOwner][spender];
    }
    
    function approve(address spender, uint tokens) public returns (bool success) {
        allowed[msg.sender][spender] = tokens;
        emit Approval(msg.sender, spender, tokens);
        return true;
    }
    
    function transfer(address to, uint tokens) public returns (bool success) {
        balances[msg.sender] = safeSub(balances[msg.sender], tokens);
        balances[to] = safeAdd(balances[to], tokens);
        emit Transfer(msg.sender, to, tokens);
        return true;
    }
    
    function transferFrom(address from, address to, uint tokens) public returns (bool success) {
        balances[from] = safeSub(balances[from], tokens);
        allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens);
        balances[to] = safeAdd(balances[to], tokens);
        emit Transfer(from, to, tokens);
        return true;
    }
    
}

ingrese la descripción de la imagen aquíPor favor, dime dónde está el problema.

Respuestas (2)

Solo una suposición, pero podría estar relacionado con el hecho de que emite SafeMath como un contrato en lugar de una biblioteca. Un contrato con solo funciones puras siempre debe ser reemplazado por una biblioteca para ahorrar gas durante la ejecución del código.

Así que mi consejo es cambiar contract SafeMatha library SafeMathy contract erc20 is ERC20Interface, SafeMatha contract erc20 is ERC20Interface.

Además, no olvide agregar using SafeMath for uint256;su contrato erc20.

El problema es que está tratando de implementar la interfaz, cambie esto aerc20ingrese la descripción de la imagen aquí