Move check to transferFrom and add tests
This commit is contained in:
@ -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) {
|
|||||||
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) {
|
|||||||
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);
|
||||||
|
})
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user