Last active
March 13, 2018 16:46
-
-
Save Credits-com/68544c15c05fcd0a0fa5e18b7d8ddba6 to your computer and use it in GitHub Desktop.
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.16; | |
contract ERC20Basic { | |
uint256 public totalSupply; | |
function balanceOf(address who) constant returns (uint256); | |
function transfer(address to, uint256 value) returns (bool); | |
event Transfer(address indexed from, address indexed to, uint256 value); | |
} | |
contract ERC20 is ERC20Basic { | |
function allowance(address owner, address spender) constant returns (uint256); | |
function transferFrom(address from, address to, uint256 value) returns (bool); | |
function approve(address spender, uint256 value) returns (bool); | |
event Approval(address indexed owner, address indexed spender, uint256 value); | |
} | |
library SafeMath { | |
function mul(uint256 a, uint256 b) internal constant returns (uint256) { | |
uint256 c = a * b; | |
assert(a == 0 || c / a == b); | |
return c; | |
} | |
function div(uint256 a, uint256 b) internal constant returns (uint256) { | |
// assert(b > 0); | |
uint256 c = a / b; | |
// assert(a == b * c + a % b); | |
return c; | |
} | |
function sub(uint256 a, uint256 b) internal constant returns (uint256) { | |
assert(b <= a); | |
return a - b; | |
} | |
function add(uint256 a, uint256 b) internal constant returns (uint256) { | |
uint256 c = a + b; | |
assert(c >= a); | |
return c; | |
} | |
} | |
contract Ownable { | |
address public owner; | |
function Ownable() { | |
owner = msg.sender; | |
} | |
modifier onlyOwner() { | |
require(msg.sender == owner); | |
_; | |
} | |
} | |
contract Crowdsale is Ownable { | |
using SafeMath for uint256; | |
address public multisig; | |
ERC20 public token; | |
uint public startTime; | |
uint public endTime; | |
uint256 public hardcap; | |
uint public rate; | |
uint public bonusPercent; | |
uint256 public tokensSold = 0; | |
uint256 public weiRaised = 0; | |
uint public investorCount = 0; | |
mapping (address => uint256) public investedAmountOf; | |
mapping (address => uint256) public tokenAmountOf; | |
struct Promo { | |
uint bonus; | |
uint EndTime; | |
} | |
mapping (address => Promo) PromoList; | |
mapping (uint=>uint) amountBonus; | |
uint public level_1_amount=50 ether; | |
uint public level_2_amount=100 ether; | |
uint public level_3_amount=250 ether; | |
uint public level_4_amount=500 ether; | |
uint public level_5_amount=1000 ether; | |
uint public level_6_amount=100000 ether; | |
uint public level_7_amount=1000000 ether; | |
uint public level_8_amount=1000000 ether; | |
uint public level_9_amount=1000000 ether; | |
uint public level_1_percent=20; | |
uint public level_2_percent=25; | |
uint public level_3_percent=30; | |
uint public level_4_percent=35; | |
uint public level_5_percent=40; | |
uint public level_6_percent=50; | |
uint public level_7_percent=50; | |
uint public level_8_percent=50; | |
uint public level_9_percent=50; | |
function Crowdsale(address _multisig, uint _bonusPercent, uint _rate, uint _startTime, | |
uint _endTime, uint256 _hardcap, address _token) { | |
multisig =_multisig; | |
bonusPercent=_bonusPercent; | |
rate =_rate; | |
startTime =_startTime; | |
endTime=_endTime; | |
hardcap = _hardcap; | |
token=ERC20(_token); | |
} | |
function setEndTime(uint _endTime) public onlyOwner{ | |
require(_endTime>=now&&_endTime>=startTime); | |
endTime=_endTime; | |
} | |
function setHardcap(uint256 _hardcap) public onlyOwner{ | |
hardcap=_hardcap; | |
} | |
function setPromo(address _address,uint _amount,uint _endtime) public onlyOwner{ | |
PromoList[_address].bonus=_amount; | |
PromoList[_address].EndTime=_endtime; | |
} | |
function resetAmountBonuses() public onlyOwner | |
{ | |
level_1_amount=0; | |
level_2_amount=0; | |
level_3_amount=0; | |
level_4_amount=0; | |
level_5_amount=0; | |
level_6_amount=0; | |
level_7_amount=0; | |
level_8_amount=0; | |
level_9_amount=0; | |
level_1_percent=0; | |
level_2_percent=0; | |
level_3_percent=0; | |
level_4_percent=0; | |
level_5_percent=0; | |
level_6_percent=0; | |
level_7_percent=0; | |
level_8_percent=0; | |
level_9_percent=0; | |
} | |
function setAmountBonuses(uint _level,uint _amount,uint _percent) public onlyOwner | |
{ | |
if (_level==1) | |
{ | |
level_1_amount=(_amount).mul(1 ether); | |
level_1_percent=_percent; | |
} | |
else if (_level==2) | |
{ | |
level_2_amount=_amount.mul(1 ether); | |
level_2_percent=_percent; | |
} | |
else if (_level==3) | |
{ | |
level_3_amount=_amount.mul(1 ether); | |
level_3_percent=_percent; | |
} | |
else if (_level==4) | |
{ | |
level_4_amount=_amount.mul(1 ether); | |
level_4_percent=_percent; | |
} | |
else if (_level==5) | |
{ | |
level_5_amount=_amount.mul(1 ether); | |
level_5_percent=_percent; | |
} | |
else if (_level==6) | |
{ | |
level_6_amount=_amount.mul(1 ether); | |
level_6_percent=_percent; | |
} | |
else if (_level==7) | |
{ | |
level_7_amount=_amount.mul(1 ether); | |
level_7_percent=_percent; | |
} | |
else if (_level==8) | |
{ | |
level_8_amount=_amount.mul(1 ether); | |
level_8_percent=_percent; | |
} | |
else if (_level==9) | |
{ | |
level_9_amount=_amount.mul(1 ether); | |
level_9_percent=_percent; | |
} | |
} | |
modifier saleIsOn(){ | |
require(now > startTime && now <= endTime); | |
_; | |
} | |
modifier isUnderHardCap() { | |
require(tokensSold <= hardcap); | |
_; | |
} | |
function calcToken() | |
returns (uint256) | |
{ | |
uint bonus; | |
uint256 tokens=0; | |
bonus=bonusPercent; | |
if (PromoList[msg.sender].EndTime >=now) | |
{ | |
bonus += PromoList[msg.sender].bonus; | |
} | |
if (msg.value>=level_1_amount && msg.value<level_2_amount ) | |
{ | |
bonus+=level_1_percent; | |
} | |
else | |
if (msg.value>=level_2_amount && msg.value<level_3_amount ) | |
{ | |
bonus+=level_2_percent; | |
} | |
else | |
if (msg.value>=level_3_amount && msg.value<level_4_amount ) | |
{ | |
bonus+=level_3_percent; | |
} | |
else | |
if (msg.value>=level_4_amount && msg.value<level_5_amount ) | |
{ | |
bonus+=level_4_percent; | |
} | |
else | |
if (msg.value>=level_5_amount && msg.value<level_6_amount ) | |
{ | |
bonus+=level_5_percent; | |
} | |
else | |
if (msg.value>=level_6_amount && msg.value<level_7_amount ) | |
{ | |
bonus+=level_6_percent; | |
} | |
else | |
if (msg.value>=level_7_amount && msg.value<level_8_amount ) | |
{ | |
bonus+=level_7_percent; | |
} | |
else | |
if (msg.value>=level_8_amount && msg.value<level_9_amount ) | |
{ | |
bonus+=level_8_percent; | |
} | |
else | |
if (msg.value>=level_9_amount) | |
{ | |
bonus+=level_9_percent; | |
} | |
uint256 multiplier = 10 **6; | |
tokens = multiplier.mul(msg.value).div(1 ether).mul(rate).div(100).mul(bonus); | |
return tokens; | |
} | |
function createTokens() payable saleIsOn isUnderHardCap { | |
uint256 tokens=calcToken(); | |
assert (tokens >= 10000); | |
token.transferFrom(0x0a6d9df476577C0D4A24EB50220fad007e444db8,msg.sender, tokens); | |
if(investedAmountOf[msg.sender] == 0) { | |
investorCount++; | |
} | |
investedAmountOf[msg.sender] = investedAmountOf[msg.sender].add(msg.value); | |
tokenAmountOf[msg.sender] = tokenAmountOf[msg.sender].add(tokens); | |
weiRaised = weiRaised.add(msg.value); | |
tokensSold = tokensSold.add(tokens); | |
multisig.transfer(msg.value); | |
} | |
function() external payable { | |
createTokens(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Who can help me to check it out please. Many thanks in advance. Why CS is a new blockchain platform but hash is "0x"?