* @dev Tokens that can be vested for a group of addresses.
* @dev Tokens that can be vested for a group of addresses.
*/
*/
contract VestedToken is StandardToken, LimitedTransferToken {
contract VestedToken is StandardToken, LimitedTransferToken {
uint256 MAX_GRANTS_PER_ADDRESS = 20;
struct TokenGrant {
struct TokenGrant {
address granter; // 20 bytes
address granter; // 20 bytes
uint256 value; // 32 bytes
uint256 value; // 32 bytes
...
@@ -45,6 +48,8 @@ contract VestedToken is StandardToken, LimitedTransferToken {
...
@@ -45,6 +48,8 @@ contract VestedToken is StandardToken, LimitedTransferToken {
throw;
throw;
}
}
if (tokenGrantsCount(_to) > MAX_GRANTS_PER_ADDRESS) throw; // To prevent a user being spammed and have his balance locked (out of gas attack when calculating vesting).
uint count = grants[_to].push(
uint count = grants[_to].push(
TokenGrant(
TokenGrant(
_revokable ? msg.sender : 0, // avoid storing an extra 20 bytes when it is non-revokable
_revokable ? msg.sender : 0, // avoid storing an extra 20 bytes when it is non-revokable