Guest User

Untitled

a guest
Jun 18th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.64 KB | None | 0 0
  1. pragma solidity ^0.4.23;
  2.  
  3. import "../node_modules/openzeppelin-solidity/contracts/token/ERC827/ERC827Token.sol";
  4. import "../node_modules/openzeppelin-solidity/contracts/ownership/Ownable.sol";
  5.  
  6. contract GenericToken is ERC827Token, Ownable {
  7.  
  8.  
  9. string public name = "Generic Token";
  10. string public symbol = "GEN";
  11. uint8 public decimals = 8;
  12.  
  13.  
  14. uint256 public initialSupply = 1000000000 * 10 ** uint256(decimals); // 1 billion tokens max
  15. uint256 public totalAirdropTokens = 800000000 * 10 ** uint256(decimals); // 800 million tokens for drop
  16. uint256 public totalBonusTokens = 100000000 * 10 ** uint256(decimals); // 100 million tokens bonus
  17. uint256 public tokensForTeam = 50000000 * 10 ** uint256(decimals); // 50 million tokens for team
  18. uint256 public tokensForPool = 50000000 * 10 ** uint256(decimals); // 50 million tokens for pool
  19.  
  20. mapping(address => bool) blacklist;
  21.  
  22. enum blacklistToggle { screen, unscreen }
  23. blacklistToggle public blacklistState = blacklistToggle.screen;
  24.  
  25. address public receiver = 0x5087293ecbbDE04da046250C270b02Cf9b6fB657;
  26.  
  27. uint256 alreadyAirdroppedTokens;
  28. uint256 alreadyIssuedBonusTokens;
  29.  
  30.  
  31. //TODO: initialize round times
  32. uint256 public airDropRoundOneTime;
  33. uint256 public airDropRoundTwoTime;
  34. uint256 public airDropRoundThreeTime;
  35. uint256 public airDropEndTime;
  36.  
  37. uint256 public bonusPrice1 = 0.006 ether;
  38. uint256 public bonusPrice2 = 0.01 ether;
  39. uint256 public bonusPrice3 = 0.016 ether;
  40.  
  41. uint256 public bonusAmount1 = 50000;
  42. uint256 public bonusAmount2 = 30000;
  43. uint256 public bonusAmount3 = 20000;
  44.  
  45. uint256 public dropAmount;
  46.  
  47.  
  48. constructor (uint256 _dropAmount,
  49. uint256 _airDropRoundOneTime,
  50. uint256 _airDropRoundTwoTime,
  51. uint256 _airDropRoundThreeTime,
  52. uint256 _airDropEndTime ) public {
  53.  
  54. totalSupply_ = initialSupply;
  55. dropAmount = _dropAmount;
  56.  
  57. airDropRoundOneTime = _airDropRoundOneTime;
  58. airDropRoundTwoTime = _airDropRoundTwoTime;
  59. airDropRoundThreeTime = _airDropRoundThreeTime;
  60. airDropEndTime = _airDropEndTime;
  61.  
  62. // balances[msg.sender] = initialSupply;
  63. // emit Transfer(0x0, msg.sender, initialSupply);
  64. }
  65.  
  66.  
  67. function setBonusAmounts(uint256 _bonusAmount1, uint256 _bonusAmount2, uint256 _bonusAmount3) public onlyOwner {
  68. bonusAmount1 = _bonusAmount1;
  69. bonusAmount2 = _bonusAmount2;
  70. bonusAmount3 = _bonusAmount3;
  71. }
  72.  
  73.  
  74. function setRoundTwoTime(uint256 _newRound2Time) public onlyOwner {
  75. airDropRoundTwoTime = _newRound2Time;
  76. }
  77.  
  78.  
  79. function setRoundThreeTime(uint256 _newRound3Time) public onlyOwner {
  80. airDropRoundThreeTime = _newRound3Time;
  81. }
  82.  
  83. function setBlacklistMode(uint intToggle, uint256 _dropAmount) public onlyOwner {
  84. blacklistToggle _blacklistState;
  85.  
  86. if (uint(blacklistToggle.screen) == intToggle) {
  87. _blacklistState = blacklistToggle.screen;
  88.  
  89. } else if (uint(blacklistToggle.unscreen) == intToggle) {
  90. _blacklistState = blacklistToggle.unscreen;
  91. }
  92.  
  93. blacklistState = _blacklistState;
  94. dropAmount = _dropAmount;
  95. }
  96.  
  97.  
  98.  
  99.  
  100.  
  101. function() external payable {
  102. claimAirdrop(msg.sender);
  103. }
  104.  
  105.  
  106. function claimAirdrop(address _beneficiary) public payable {
  107.  
  108. uint256 weiAmount = msg.value;
  109. uint256 tokens;
  110.  
  111. require(validTransaction());
  112.  
  113. if (blacklistState == blacklistToggle.unscreen) {
  114. blacklist[_beneficiary] = false;
  115. }
  116.  
  117. if (weiAmount < bonusPrice1) {
  118. require(totalAirdropTokens > alreadyAirdroppedTokens);
  119. require(!blacklist[_beneficiary]);
  120.  
  121. tokens = dropAmount;
  122. transfer(_beneficiary, tokens);
  123.  
  124. blacklist[_beneficiary] = true;
  125.  
  126. totalAirdropTokens += dropAmount;
  127.  
  128. }
  129. if ( (weiAmount >= bonusPrice1) && (weiAmount < bonusPrice2) ) {
  130.  
  131. require(alreadyIssuedBonusTokens < totalBonusTokens);
  132. tokens = bonusAmount1;
  133.  
  134. transfer(_beneficiary, tokens);
  135.  
  136. alreadyIssuedBonusTokens += bonusAmount1;
  137. }
  138. if ((weiAmount >= bonusPrice2) && (weiAmount < bonusPrice3)) {
  139.  
  140. tokens = bonusAmount2;
  141.  
  142. require(alreadyIssuedBonusTokens < totalBonusTokens);
  143.  
  144. transferFrom(owner, _beneficiary, tokens);
  145.  
  146. alreadyIssuedBonusTokens += bonusAmount2;
  147.  
  148. } else {
  149. require(alreadyIssuedBonusTokens < totalBonusTokens);
  150.  
  151. tokens = bonusAmount3;
  152.  
  153. transfer(_beneficiary, tokens);
  154.  
  155. alreadyIssuedBonusTokens += bonusAmount3;
  156.  
  157. }
  158.  
  159. _forwardFunds();
  160. }
  161.  
  162.  
  163.  
  164. function validTransaction() internal view returns (bool) {
  165. bool withinPeriod = now >= airDropRoundOneTime && now <= airDropEndTime;
  166. return withinPeriod;
  167. }
  168.  
  169. function _forwardFunds() internal {
  170. receiver.transfer(msg.value);
  171. }
  172.  
  173.  
  174.  
  175.  
  176.  
  177. }
Add Comment
Please, Sign In to add comment