Commit 12aadbed by Jorge Izquierdo

Move check to transferFrom and add tests

parent 23703280
...@@ -15,17 +15,17 @@ contract VestedToken is StandardToken { ...@@ -15,17 +15,17 @@ contract VestedToken is StandardToken {
mapping (address => TokenGrant[]) public grants; mapping (address => TokenGrant[]) public grants;
modifier canTransfer(uint _value) { modifier canTransfer(address _sender, uint _value) {
if (_value > transferableTokens(msg.sender, uint64(now))) throw; if (_value > transferableTokens(_sender, uint64(now))) throw;
_; _;
} }
function transfer(address _to, uint _value) canTransfer(_value) returns (bool success) { function transfer(address _to, uint _value) canTransfer(msg.sender, _value) returns (bool success) {
return super.transfer(_to, _value); return super.transfer(_to, _value);
} }
function approve(address _spender, uint _value) canTransfer(_value) returns (bool success) { function transferFrom(address _from, address _to, uint _value) canTransfer(_from, _value) returns (bool success) {
return super.approve(_spender, _value); return super.transferFrom(_from, _to, _value);
} }
function grantVestedTokens( function grantVestedTokens(
......
...@@ -52,6 +52,16 @@ contract('VestedToken', function(accounts) { ...@@ -52,6 +52,16 @@ contract('VestedToken', function(accounts) {
assert.fail('should have thrown before'); assert.fail('should have thrown before');
}) })
it('throws when trying to transfer from non vested tokens', async () => {
try {
await token.approve(accounts[7], 1, { from: receiver })
await token.transferFrom(receiver, accounts[7], tokenAmount, { from: accounts[7] })
} catch(error) {
return assertJump(error);
}
assert.fail('should have thrown before');
})
it('can be revoked by granter', async () => { it('can be revoked by granter', async () => {
await token.revokeTokenGrant(receiver, 0, { from: granter }); await token.revokeTokenGrant(receiver, 0, { from: granter });
assert.equal(await token.balanceOf(receiver), 0); assert.equal(await token.balanceOf(receiver), 0);
...@@ -78,5 +88,12 @@ contract('VestedToken', function(accounts) { ...@@ -78,5 +88,12 @@ contract('VestedToken', function(accounts) {
await token.transfer(accounts[7], tokenAmount, { from: receiver }) await token.transfer(accounts[7], tokenAmount, { from: receiver })
assert.equal(await token.balanceOf(accounts[7]), tokenAmount); assert.equal(await token.balanceOf(accounts[7]), tokenAmount);
}) })
it('can approve and transferFrom all tokens after vesting ends', async () => {
await timer(vesting + 1);
await token.approve(accounts[7], tokenAmount, { from: receiver })
await token.transferFrom(receiver, accounts[7], tokenAmount, { from: accounts[7] })
assert.equal(await token.balanceOf(accounts[7]), tokenAmount);
})
}) })
}); });
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment