Skip to content

Commit

Permalink
New contracts added
Browse files Browse the repository at this point in the history
  • Loading branch information
thesved committed Mar 11, 2018
1 parent 97b8a82 commit fd9dc19
Show file tree
Hide file tree
Showing 17 changed files with 881 additions and 326 deletions.
6 changes: 3 additions & 3 deletions contracts/CappedCrowdsale.sol
Expand Up @@ -19,18 +19,18 @@ contract CappedCrowdsale is Crowdsale {

// overriding Crowdsale#validPurchase to add extra cap logic
// @return true if investors can buy at the moment
function validPurchase(uint256 weiAmount) internal view returns (bool) {
function validPurchase(uint256 weiAmount) internal constant returns (bool) {
return super.validPurchase(weiAmount) && !capReached();
}

// overriding Crowdsale#hasEnded to add cap logic
// @return true if crowdsale event has ended
function hasEnded() public view returns (bool) {
function hasEnded() public constant returns (bool) {
return super.hasEnded() || capReached();
}

// @return true if cap has been reached
function capReached() internal view returns (bool) {
function capReached() internal constant returns (bool) {
return weiRaised >= cap;
}

Expand Down
9 changes: 5 additions & 4 deletions contracts/Crowdsale.sol
Expand Up @@ -68,10 +68,11 @@ contract Crowdsale {
require(beneficiary != 0x0);
require(validPurchase(weiAmount));

transferToken(beneficiary, weiAmount);

// update state
weiRaised = weiRaised.add(weiAmount);

transferToken(beneficiary, weiAmount);
forwardFunds(weiAmount);
}

Expand All @@ -93,19 +94,19 @@ contract Crowdsale {
}

// @return true if the transaction can buy tokens
function validPurchase(uint256 weiAmount) internal view returns (bool) {
function validPurchase(uint256 weiAmount) internal constant returns (bool) {
bool withinPeriod = now >= startTime && now <= endTime;
bool nonZeroPurchase = weiAmount != 0;
return withinPeriod && nonZeroPurchase;
}

// @return true if crowdsale event has ended
function hasEnded() public view returns (bool) {
function hasEnded() public constant returns (bool) {
return now > endTime;
}

// @return true if crowdsale has started
function hasStarted() public view returns (bool) {
function hasStarted() public constant returns (bool) {
return now >= startTime;
}
}
47 changes: 47 additions & 0 deletions contracts/ECRecovery.sol
@@ -0,0 +1,47 @@
pragma solidity ^0.4.18;


/**
* @title Eliptic curve signature operations
*
* @dev Based on https://gist.github.com/axic/5b33912c6f61ae6fd96d6c4a47afde6d
*/

library ECRecovery {

/**
* @dev Recover signer address from a message by using his signature
* @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
* @param sig bytes signature, the signature is generated using web3.eth.sign()
*/
function recover(bytes32 hash, bytes sig) public pure returns (address) {
bytes32 r;
bytes32 s;
uint8 v;

//Check the signature length
if (sig.length != 65) {
return (address(0));
}

// Divide the signature in r, s and v variables
assembly {
r := mload(add(sig, 32))
s := mload(add(sig, 64))
v := byte(0, mload(add(sig, 96)))
}

// Version of signature should be 27 or 28, but 0 and 1 are also possible versions
if (v < 27) {
v += 27;
}

// If the version is correct return the signer address
if (v != 27 && v != 28) {
return (address(0));
} else {
return ecrecover(hash, v, r, s);
}
}

}
4 changes: 2 additions & 2 deletions contracts/ERC20.sol
Expand Up @@ -5,9 +5,9 @@ pragma solidity ^0.4.17;
* @dev ERC20 interface
*/
contract ERC20 {
function balanceOf(address who) public view returns (uint256);
function balanceOf(address who) public constant returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
function allowance(address owner, address spender) public view returns (uint256);
function allowance(address owner, address spender) public constant returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
Expand Down
8 changes: 4 additions & 4 deletions contracts/ERC20MiniMe.sol
Expand Up @@ -10,14 +10,14 @@ import "./Controlled.sol";
*/
contract ERC20MiniMe is ERC20, Controlled {
function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool);
function totalSupply() public view returns (uint);
function balanceOfAt(address _owner, uint _blockNumber) public view returns (uint);
function totalSupplyAt(uint _blockNumber) public view returns(uint);
function totalSupply() public constant returns (uint);
function balanceOfAt(address _owner, uint _blockNumber) public constant returns (uint);
function totalSupplyAt(uint _blockNumber) public constant returns(uint);
function createCloneToken(string _cloneTokenName, uint8 _cloneDecimalUnits, string _cloneTokenSymbol, uint _snapshotBlock, bool _transfersEnabled) public returns(address);
function generateTokens(address _owner, uint _amount) public returns (bool);
function destroyTokens(address _owner, uint _amount) public returns (bool);
function enableTransfers(bool _transfersEnabled) public;
function isContract(address _addr) internal view returns(bool);
function isContract(address _addr) constant internal returns(bool);
function claimTokens(address _token) public;
event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount);
event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock);
Expand Down
18 changes: 8 additions & 10 deletions contracts/EthealController.sol
Expand Up @@ -126,23 +126,23 @@ contract EthealController is Pausable, HasNoTokens, TokenController {
////////////////

/// @notice Grant vesting token to an address
function createGrant(address _beneficiary, uint256 _start, uint256 _amount, bool _revocable, bool _advisor) public onlyOwner {
require(_beneficiary != address(0) && _amount > 0 && _start >= now);
function createGrant(address _beneficiary, uint256 _amount, bool _revocable, bool _advisor) public onlyOwner {
require(_beneficiary != address(0) && _amount > 0);

// create token grant
if (_advisor) {
tokenGrants.push(new TokenVesting(_beneficiary, _start, VESTING_ADVISOR_CLIFF, VESTING_ADVISOR_DURATION, _revocable));
tokenGrants.push(new TokenVesting(_beneficiary, now, VESTING_ADVISOR_CLIFF, VESTING_ADVISOR_DURATION, _revocable));
} else {
tokenGrants.push(new TokenVesting(_beneficiary, _start, VESTING_TEAM_CLIFF, VESTING_TEAM_DURATION, _revocable));
tokenGrants.push(new TokenVesting(_beneficiary, now, VESTING_TEAM_CLIFF, VESTING_TEAM_DURATION, _revocable));
}

// transfer funds to the grant
transferToGrant(tokenGrants.length.sub(1), _amount);
require(ethealToken.transfer(address(tokenGrants[tokenGrants.length.sub(1)]), _amount));
}

/// @notice Transfer tokens to a grant until it is starting
function transferToGrant(uint256 _id, uint256 _amount) public onlyOwner {
require(_id < tokenGrants.length && _amount > 0 && now <= tokenGrants[_id].start());
require(_id < tokenGrants.length && _amount > 0 && now < tokenGrants[_id].start());

// transfer funds to the grant
require(ethealToken.transfer(address(tokenGrants[_id]), _amount));
Expand Down Expand Up @@ -182,15 +182,13 @@ contract EthealController is Pausable, HasNoTokens, TokenController {

// send eth
uint256 _stake = this.balance;
if (_stake > 0) {
if (_stake > 0)
_controller.transfer(_stake);
}

// send tokens
_stake = ethealToken.balanceOf(this);
if (_stake > 0) {
if (_stake > 0)
ethealToken.transfer(_controller, _stake);
}
}

/// @notice Set new multisig wallet, to make it upgradable.
Expand Down

0 comments on commit fd9dc19

Please sign in to comment.