¿No puedes transferir más de 9007000000000000 tokens a la vez?

Estoy usando el código Zeppelin ERC20 y parece que no puedo transferusar más de 9007000000000000 "centavos" de token a la vez.

La dirección atiene un balanceOf1000000000000000000000000 (10 millones de tokens * 1000000000000000000 (porque estoy usando 18 decimales)). Sin embargo, cuando me transfer('b', 1000000000000000000000000)de cuenta a, Remix dice: Error encoding arguments: Error: Assertion failed.

Me da el mismo error para 100000000000000000000000, 10000000000000000000000, 1000000000000000000000, hasta 9007000000000000 (que me permite transferir; falla con un poco más (90008000000) 0000000).

balanceOfpara ambas cuentas sale correctamente después.

Además, cuando comento las assertlíneas en SafeMath, Remix me da el mismo error. No hay otros assertiones en el código.

¿Qué está yendo mal aquí?

pragma solidity ^0.4.15;

library SafeMath {

  function sub(uint256 a, uint256 b) internal constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}



using SafeMath for uint;

mapping(address => uint256) balances;

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

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

Respuestas (1)

Resulta que los números grandes deben estar entre comillas cuando se usa Remix, debido a las limitaciones de Javascript, por lo que `transfer('a', '1000000000000000000000000') funciona.