From 1697518da8c99f9ed21004edf27b6c3520c60ec2 Mon Sep 17 00:00:00 2001 From: Jorge Izquierdo Date: Fri, 10 Feb 2017 15:28:20 +0100 Subject: [PATCH] Make vested stock calculation more testable --- contracts/SafeMath.sol | 1 - contracts/token/GrantableToken.sol | 16 ++++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/contracts/SafeMath.sol b/contracts/SafeMath.sol index 8568ddd91..e25589724 100644 --- a/contracts/SafeMath.sol +++ b/contracts/SafeMath.sol @@ -26,4 +26,3 @@ contract SafeMath { if (!assertion) throw; } } - diff --git a/contracts/token/GrantableToken.sol b/contracts/token/GrantableToken.sol index a97c2ed62..2802a7ee9 100644 --- a/contracts/token/GrantableToken.sol +++ b/contracts/token/GrantableToken.sol @@ -59,16 +59,20 @@ contract GrantableToken is StandardToken { vested = vestedTokens(grant, uint64(now)); } - function vestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256 vestedTokens) { - if (time < grant.cliff) return 0; - if (time > grant.vesting) return grant.value; + function vestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256) { + return calculateVestedTokens(grant.value, uint256(time), uint256(grant.start), uint256(grant.cliff), uint256(grant.vesting)); + } - uint256 cliffTokens = grant.value * uint256(grant.cliff - grant.start) / uint256(grant.vesting - grant.start); + function calculateVestedTokens(uint256 tokens, uint256 time, uint256 start, uint256 cliff, uint256 vesting) constant returns (uint256 vestedTokens) { + if (time < cliff) return 0; + if (time > vesting) return tokens; + + uint256 cliffTokens = safeMul(tokens, (cliff - start) / (vesting - start)); vestedTokens = cliffTokens; - uint256 vestingTokens = safeSub(grant.value, cliffTokens); + uint256 vestingTokens = safeSub(tokens, cliffTokens); - vestedTokens = safeAdd(vestedTokens, vestingTokens * (time - uint256(grant.cliff)) / uint256(grant.vesting - grant.start)); + vestedTokens = safeAdd(vestedTokens, vestingTokens * (time - cliff) / (vesting - start)); } function nonVestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256) {