Kann nicht mehr als 9007000000000000 Token auf einmal übertragen werden?

Ich verwende den Zeppelin ERC20-Code und kann nicht transfermehr als 9007000000000000 Token "Cents" gleichzeitig haben.

Die Adresse ahat einen Wert von balanceOf10000000000000000000000 (10 Millionen Token * 100000000000000000 (weil ich 18 Dezimalstellen verwende)). Wenn ich jedoch transfer('b', 1000000000000000000000000)vom Konto agehe, sagt Remix: Error encoding arguments: Error: Assertion failed.

Es gibt mir den gleichen Fehler für 1000000000000000000000, 1000000000000000000000, 100000000000000000000, bis hinunter zu 9007000000000000 (was es mich übertragen lässt; es schlägt mit etwas mehr (900800000)00 fehl).

balanceOffür beide Konten checkt danach korrekt aus.

Auch wenn ich die assertZeilen in SafeMathauskommentiere, gibt Remix mir den gleichen Fehler. Es gibt keine anderen assertIonen im Code.

Was läuft hier schief?

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;
 }

Antworten (1)

Es stellt sich heraus, dass große Zahlen bei der Verwendung von Remix aufgrund von Javascript-Einschränkungen in Anführungszeichen gesetzt werden müssen , damit `transfer('a', '100000000000000000000000') funktioniert.