Add safeDiv and min/max functions to SafeMath

This commit is contained in:
Jorge Izquierdo
2017-02-10 16:17:02 +01:00
parent abc646a95c
commit 917b129517
2 changed files with 25 additions and 10 deletions

View File

@ -11,6 +11,13 @@ contract SafeMath {
return c; 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) { function safeSub(uint a, uint b) internal returns (uint) {
assert(b <= a); assert(b <= a);
return a - b; return a - b;
@ -22,6 +29,22 @@ contract SafeMath {
return c; 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 { function assert(bool assertion) internal {
if (!assertion) throw; if (!assertion) throw;
} }

View File

@ -67,12 +67,12 @@ contract GrantableToken is StandardToken {
if (time < cliff) return 0; if (time < cliff) return 0;
if (time > vesting) return tokens; 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; vestedTokens = cliffTokens;
uint256 vestingTokens = safeSub(tokens, 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) { function nonVestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256) {
@ -102,12 +102,4 @@ contract GrantableToken is StandardToken {
return super.transfer(_to, _value); 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;
}
} }