Decouple transferable logic from VestedToken

pull/162/head
Jorge Izquierdo 8 years ago
parent 9c5975a706
commit 72029b6847
  1. 22
      contracts/token/TransferableToken.sol
  2. 20
      contracts/token/VestedToken.sol

@ -0,0 +1,22 @@
pragma solidity ^0.4.8;
import "./ERC20.sol";
contract TransferableToken is ERC20 {
modifier canTransfer(address _sender, uint _value) {
if (_value > transferableTokens(_sender, uint64(now))) throw;
_;
}
function transfer(address _to, uint _value) canTransfer(msg.sender, _value) returns (bool success) {
return super.transfer(_to, _value);
}
function transferFrom(address _from, address _to, uint _value) canTransfer(_from, _value) returns (bool success) {
return super.transferFrom(_from, _to, _value);
}
function transferableTokens(address holder, uint64 time) constant public returns (uint256) {
return balanceOf(holder);
}
}

@ -2,9 +2,9 @@ pragma solidity ^0.4.8;
import "./StandardToken.sol";
import "./TransferableToken.sol";
contract VestedToken is StandardToken {
contract VestedToken is StandardToken, TransferableToken {
struct TokenGrant {
address granter;
uint256 value;
@ -15,19 +15,6 @@ contract VestedToken is StandardToken {
mapping (address => TokenGrant[]) public grants;
modifier canTransfer(address _sender, uint _value) {
if (_value > transferableTokens(_sender, uint64(now))) throw;
_;
}
function transfer(address _to, uint _value) canTransfer(msg.sender, _value) returns (bool success) {
return super.transfer(_to, _value);
}
function transferFrom(address _from, address _to, uint _value) canTransfer(_from, _value) returns (bool success) {
return super.transferFrom(_from, _to, _value);
}
function grantVestedTokens(
address _to,
uint256 _value,
@ -133,11 +120,10 @@ contract VestedToken is StandardToken {
function transferableTokens(address holder, uint64 time) constant public returns (uint256 nonVested) {
uint256 grantIndex = grants[holder].length;
for (uint256 i = 0; i < grantIndex; i++) {
nonVested = safeAdd(nonVested, nonVestedTokens(grants[holder][i], time));
}
return safeSub(balances[holder], nonVested);
return min256(safeSub(balances[holder], nonVested), super.transferableTokens(holder, time));
}
}

Loading…
Cancel
Save