¿Por qué me cancelan los pagos de mi ERC20-Contract?

Desplegué mi primera moneda, un contrato ERC20, en Rinkeby. Pero cuando envío ether a la dirección de los contratos, las transacciones se cancelan con un estado llamado "fallo".

Código:

pragma solidity ^0.4.10;

import 'zeppelin-solidity/contracts/math/SafeMath.sol';
import 'zeppelin-solidity/contracts/token/ERC20.sol';

contract StandardToken is ERC20 {
  using SafeMath for uint;

    string internal _name;
    string internal _symbol;
    uint8 internal _decimals;
    uint256 internal __totalSupply;

    mapping (address => uint256) internal balances;
    mapping (address => mapping (address => uint256)) internal allowed;

    constructor(string name, string symbol, uint8 decimals, uint256 totalSupply) public {
        _symbol = symbol;
        _name = name;
        _decimals = decimals;
        __totalSupply = totalSupply;
        balances[msg.sender] = totalSupply;
    }

    function name()
        public
        view
        returns (string) {
        return _name;
    }

    function symbol()
        public
        view
        returns (string) {
        return _symbol;
    }

    function decimals()
        public
        view
        returns (uint8) {
        return _decimals;
    }

   function transfer(address _to, uint256 _value) public returns (bool) {
     require(_to != address(0));
     require(_value <= balances[msg.sender]);
     balances[msg.sender] = SafeMath.sub(balances[msg.sender], _value);
     balances[_to] = SafeMath.add(balances[_to], _value);
     Transfer(msg.sender, _to, _value);
     return true;
   }

  function balanceOf(address _owner) public view returns (uint256 balance) {
    return balances[_owner];
   }

  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
     require(_value <= balances[_from]);
     require(_value <= allowed[_from][msg.sender]);

    balances[_from] = SafeMath.sub(balances[_from], _value);
     balances[_to] = SafeMath.add(balances[_to], _value);
     allowed[_from][msg.sender] = SafeMath.sub(allowed[_from][msg.sender], _value);
    Transfer(_from, _to, _value);
     return true;
   }

   function approve(address _spender, uint256 _value) public returns (bool) {
     allowed[msg.sender][_spender] = _value;
     Approval(msg.sender, _spender, _value);
     return true;
   }

  function allowance(address _owner, address _spender) public view returns (uint256) {
     return allowed[_owner][_spender];
   }

   function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
     allowed[msg.sender][_spender] = SafeMath.add(allowed[msg.sender][_spender], _addedValue);
     Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
     return true;
   }

  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
     uint oldValue = allowed[msg.sender][_spender];
     if (_subtractedValue > oldValue) {
       allowed[msg.sender][_spender] = 0;
     } else {
       allowed[msg.sender][_spender] = SafeMath.sub(oldValue, _subtractedValue);
    }
     Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
     return true;
   }

}

Desplegué este contrato con trufa:

$ truffle migrate --network rinkeby
Using network 'rinkeby'.

Running migration: 2_standard_sale.js
  Deploying StandardToken...
  ... 0xbbeddd52e9c1c648d1cc4b0203c457e2ac65f0c52e32954552c699d32fab4b4b
  StandardToken: 0xf0a1b11c9742eccbfd6aa659359328bcb814edd5
Saving successful migration to network...
  ... 0xa567aa47e110338f60c45f3207fe9b7d5e5aba07165ba6d0179f7bcd8da6eee6
Saving artifacts...

y envía algo de Ether a 0xf0a1b11c9742eccbfd6aa659359328bcb814edd5.

Sin embargo, la transacción se canceló: https://rinkeby.etherscan.io/tx/0x34c8d36783bbdf54cd5f34808dac58c14c0ee77eaed0ce74621b9bf4fa5d6ab0

Desafortunadamente, el Ether enviado ya no está y no fue reembolsado.

¿Qué podría estar mal aquí?

Respuestas (1)

No tiene una payablefunción, por lo tanto, su contrato no puede aceptar transacciones que incluyan ether.

En cuanto a la etherque se ha ido, no entiendo por qué. Normalmente, si su contrato no incluye una payablefunción, cualquier etherenvío al mismo es rechazado. Podría deberse a la versión de solidez que está utilizando.