diff --git a/contracts/SafeMath.sol b/contracts/SafeMath.sol index e25589724..fd084967d 100644 --- a/contracts/SafeMath.sol +++ b/contracts/SafeMath.sol @@ -11,6 +11,13 @@ contract SafeMath { return c; } + function safeDiv(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; @@ -22,6 +29,22 @@ contract SafeMath { return c; } + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + function assert(bool assertion) internal { if (!assertion) throw; } diff --git a/contracts/token/GrantableToken.sol b/contracts/token/GrantableToken.sol index 712a53021..79fc328e9 100644 --- a/contracts/token/GrantableToken.sol +++ b/contracts/token/GrantableToken.sol @@ -67,12 +67,12 @@ contract GrantableToken is StandardToken { if (time < cliff) return 0; if (time > vesting) return tokens; - uint256 cliffTokens = safeMul(tokens, (cliff - start) / (vesting - start)); + uint256 cliffTokens = safeMul(tokens, safeDiv(safeSub(cliff, start), safeSub(vesting, start))); vestedTokens = cliffTokens; uint256 vestingTokens = safeSub(tokens, cliffTokens); - vestedTokens = safeAdd(vestedTokens, vestingTokens * (time - cliff) / (vesting - start)); + vestedTokens = safeAdd(vestedTokens, safeMul(vestingTokens, safeDiv(safeSub(time, cliff), safeSub(vesting, start)))); } function nonVestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256) { @@ -102,12 +102,4 @@ contract GrantableToken is StandardToken { return super.transfer(_to, _value); } - - function max64(uint64 a, uint64 b) private constant returns (uint64) { - return a >= b ? a : b; - } - - function min256(uint256 a, uint256 b) private constant returns (uint256) { - return a < b ? a : b; - } }