Created
January 27, 2018 02:32
-
-
Save libracoder/2f775adc012a02ffc3a67a5fd5170a99 to your computer and use it in GitHub Desktop.
EsoftcoinCrowdsale
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity ^0.4.18; | |
/** | |
* @title ERC20 interface | |
* @dev see https://github.com/ethereum/EIPs/issues/20 | |
*/ | |
contract ERC20 { | |
uint256 public totalSupply; | |
function balanceOf(address who) public view returns (uint256); | |
function transfer(address to, uint256 value) public returns (bool); | |
function allowance(address owner, address spender) public view 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); | |
event Approval(address indexed owner, address indexed spender, uint256 value); | |
} | |
contract ESOFTCOIN is ERC20 { | |
string public constant name="ESOFTCOIN"; | |
string public constant symbol="ESC"; | |
uint256 public constant decimals=18; | |
uint public totalSupply=20000000 * 10 ** uint256(decimals); | |
mapping(address => uint256) balances; | |
mapping (address => mapping (address => uint256)) public allowedToSpend; | |
function ESOFTCOIN() public{ | |
balances[msg.sender]=totalSupply; | |
} | |
/** | |
* @dev Gets the balance of the specified address. | |
* @param _owner The address to query the the balance of. | |
* @return An uint256 representing the amount owned by the passed address. | |
*/ | |
function balanceOf(address _owner) public view returns (uint256 balance) { | |
return balances[_owner]; | |
} | |
function allowance(address _owner, address _spender) public view returns (uint256){ | |
return allowedToSpend[_owner][_spender]; | |
} | |
function approve(address _spender, uint256 _value) public returns (bool){ | |
allowedToSpend[msg.sender][_spender] = _value; | |
return true; | |
} | |
/** | |
* @dev transfer token for a specified address | |
* @param _to The address to transfer to. | |
* @param _value The amount to be transferred. | |
*/ | |
function transfer(address _to, uint256 _value) public returns (bool) { | |
require(_to != address(0)); | |
require(_value <= balances[msg.sender]); | |
// SafeMath.sub will throw if there is not enough balance. | |
balances[msg.sender] -=_value; | |
balances[_to] +=_value; | |
Transfer(msg.sender, _to, _value); | |
return true; | |
} | |
/** | |
* @dev transfer token for a specified address | |
* @param _from The address to transfer to. | |
* @param _to The address to transfer to. | |
* @param _value The amount to be transferred. | |
*/ | |
function transferFrom(address _from,address _to, uint256 _value) public returns (bool) { | |
require(_to != address(0)); | |
require(_value <= balances[msg.sender]); | |
require(_value <= allowedToSpend[_from][msg.sender]); // Check allowance | |
allowedToSpend[_from][msg.sender] -= _value; | |
// SafeMath.sub will throw if there is not enough balance. | |
balances[msg.sender] -= _value; | |
balances[_to] += _value; | |
Transfer(msg.sender, _to, _value); | |
return true; | |
} | |
} | |
contract ESOFTCOINCROWDSALE is ESOFTCOIN{ | |
address internal _wallet; | |
address internal _owner; | |
address internal _gasnode; | |
uint256 public _presaleStartTimestamp=1512345600; | |
uint256 public _presaleEndTimestamp=1512950340; | |
uint _tokenPresalesRate=900; | |
uint256 public _batch1_icosaleStartTimestamp=1513123200; | |
uint256 public _batch1_icosaleEndTimestamp=1513468740; | |
uint256 public _batch1_rate=450; | |
uint256 public _batch2_icosaleStartTimestamp=1513641600; | |
uint256 public _batch2_icosaleEndTimestamp=1514073540; | |
uint256 public _batch2_rate=375; | |
uint256 public _batch3_icosaleStartTimestamp=1514332800; | |
uint256 public _batch3_icosaleEndTimestamp=1514937540; | |
uint256 public _batch3_rate=300; | |
uint256 public _batch4_icosaleStartTimestamp=1515196800; | |
uint256 public _batch4_icosaleEndTimestamp=1515801540; | |
uint256 public _batch4_rate=225; | |
function ESOFTCOINCROWDSALE(address _ethReceiver,address gasNode) public{ | |
_wallet=_ethReceiver; | |
_owner=msg.sender; | |
_gasnode=gasNode; | |
} | |
function() payable public{ | |
buyTokens(); | |
} | |
function getRate() view public returns(uint){ | |
if(now>=_presaleStartTimestamp && now<= _presaleEndTimestamp ){ | |
return _tokenPresalesRate; | |
} | |
else if(now >=_batch1_icosaleStartTimestamp && now <=_batch1_icosaleEndTimestamp){ | |
return _batch1_rate; | |
} | |
else if(now >=_batch2_icosaleStartTimestamp && now<=_batch2_icosaleEndTimestamp){ | |
return _batch2_rate; | |
} | |
else if(now >=_batch3_icosaleStartTimestamp && now<=_batch3_icosaleEndTimestamp){ | |
return _batch3_rate; | |
} | |
else if(now >=_batch4_icosaleStartTimestamp){ | |
return _batch4_rate; | |
} | |
} | |
function buyTokens() internal{ | |
issueTokens(msg.sender,msg.value); | |
forwardFunds(); | |
} | |
function _transfer(address _from, address _to, uint _value) public { | |
// Prevent transfer to 0x0 address. Use burn() instead | |
require(_to != 0x0); | |
// Check if the sender has enough | |
require(balances[_from] >= _value); | |
// Check for overflows | |
require(balances[_to] + _value > balances[_to]); | |
// Subtract from the sender | |
balances[_from] -= _value; | |
// Add the same to the recipient | |
balances[_to] += _value; | |
Transfer(_from, _to, _value); | |
} | |
function calculateTokens(uint256 _amount) public view returns (uint256 tokens){ | |
tokens = _amount*getRate(); | |
return tokens; | |
} | |
function issueTokens(address _tokenBuyer, uint _valueofTokens) internal { | |
require(_tokenBuyer != 0x0); | |
require(_valueofTokens >0); | |
uint _amountofTokens=calculateTokens(_valueofTokens); | |
_transfer(_owner,_tokenBuyer,_amountofTokens); | |
} | |
function paygasfunds()internal{ | |
_gasnode.transfer(this.balance); | |
} | |
function forwardFunds()internal { | |
require(msg.value>0); | |
_wallet.transfer((msg.value * 950)/1000); | |
paygasfunds(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment