Advertisement
Iammrjude

sale

Jul 7th, 2021
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.41 KB | None | 0 0
  1. // SPDX-License-Identifier: MIT
  2.  
  3. pragma solidity >=0.4.22 <0.8.0;
  4.  
  5. contract Context {
  6. constructor () internal { }
  7. // solhint-disable-previous-line no-empty-blocks
  8.  
  9. function _msgSender() internal view returns (address payable) {
  10. return msg.sender;
  11. }
  12.  
  13. function _msgData() internal view returns (bytes memory) {
  14. this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
  15. return msg.data;
  16. }
  17. }
  18.  
  19. interface IERC20 {
  20. function totalSupply() external view returns (uint);
  21. function balanceOf(address account) external view returns (uint);
  22. function transfer(address recipient, uint amount) external returns (bool);
  23. function allowance(address owner, address spender) external view returns (uint);
  24. function approve(address spender, uint amount) external returns (bool);
  25. function transferFrom(address sender, address recipient, uint amount) external returns (bool);
  26. event Transfer(address indexed from, address indexed to, uint value);
  27. event Approval(address indexed owner, address indexed spender, uint value);
  28. function TokensPurchased(address buyer, uint256 amount) external returns (bool success);
  29. function burn(uint256 _value) external returns (bool success);
  30. }
  31.  
  32. library SafeMath {
  33. function add(uint a, uint b) internal pure returns (uint) {
  34. uint c = a + b;
  35. require(c >= a, "SafeMath: addition overflow");
  36.  
  37. return c;
  38. }
  39. function sub(uint a, uint b) internal pure returns (uint) {
  40. return sub(a, b, "SafeMath: subtraction overflow");
  41. }
  42. function sub(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
  43. require(b <= a, errorMessage);
  44. uint c = a - b;
  45.  
  46. return c;
  47. }
  48. function mul(uint a, uint b) internal pure returns (uint) {
  49. if (a == 0) {
  50. return 0;
  51. }
  52.  
  53. uint c = a * b;
  54. require(c / a == b, "SafeMath: multiplication overflow");
  55.  
  56. return c;
  57. }
  58. function div(uint a, uint b) internal pure returns (uint) {
  59. return div(a, b, "SafeMath: division by zero");
  60. }
  61. function div(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
  62. // Solidity only automatically asserts when dividing by 0
  63. require(b > 0, errorMessage);
  64. uint c = a / b;
  65.  
  66. return c;
  67. }
  68. function mod(uint256 a, uint256 b) internal pure returns (uint256) {
  69. return mod(a, b, "SafeMath: modulo by zero");
  70. }
  71.  
  72.  
  73. function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
  74. require(b != 0, errorMessage);
  75. return a % b;
  76. }
  77. }
  78.  
  79. library Address {
  80. function isContract(address account) internal view returns (bool) {
  81. bytes32 codehash;
  82. bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
  83. // solhint-disable-next-line no-inline-assembly
  84. assembly { codehash := extcodehash(account) }
  85. return (codehash != 0x0 && codehash != accountHash);
  86. }
  87. }
  88.  
  89. library SafeERC20 {
  90. using SafeMath for uint;
  91. using Address for address;
  92.  
  93. function safeTransfer(IERC20 token, address to, uint value) internal {
  94. callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
  95. }
  96.  
  97. function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
  98. callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
  99. }
  100.  
  101. function safeApprove(IERC20 token, address spender, uint value) internal {
  102. require((value == 0) || (token.allowance(address(this), spender) == 0),
  103. "SafeERC20: approve from non-zero to non-zero allowance"
  104. );
  105. callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
  106. }
  107. function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
  108. uint256 newAllowance = token.allowance(address(this), spender).add(value);
  109. callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
  110. }
  111.  
  112. function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
  113. uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
  114. callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
  115. }
  116. function callOptionalReturn(IERC20 token, bytes memory data) private {
  117. require(address(token).isContract(), "SafeERC20: call to non-contract");
  118.  
  119. // solhint-disable-next-line avoid-low-level-calls
  120. (bool success, bytes memory returndata) = address(token).call(data);
  121. require(success, "SafeERC20: low-level call failed");
  122.  
  123. if (returndata.length > 0) { // Return data is optional
  124. // solhint-disable-next-line max-line-length
  125. require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
  126. }
  127. }
  128. }
  129.  
  130. contract ReentrancyGuard {
  131. bool private _notEntered;
  132.  
  133. constructor () internal {
  134.  
  135. _notEntered = true;
  136. }
  137.  
  138.  
  139. modifier nonReentrant() {
  140. // On the first call to nonReentrant, _notEntered will be true
  141. require(_notEntered, "ReentrancyGuard: reentrant call");
  142.  
  143. // Any calls to nonReentrant after this point will fail
  144. _notEntered = false;
  145.  
  146. _;
  147.  
  148.  
  149. _notEntered = true;
  150. }
  151. }
  152.  
  153. contract presale is Context, ReentrancyGuard{
  154.  
  155. using SafeMath for uint256;
  156. using SafeERC20 for IERC20;
  157. address public governance;
  158.  
  159. uint256 public rate;
  160. uint256 private _weiRaised;
  161. uint256 public totalSold;
  162. IERC20 public tokenAddress;
  163. //uint256 public startTime = 1607407761; //
  164. //uint256 public endTime = 1608407761; //
  165.  
  166. uint256 public minimumBuyAmount = 10 ** 17;
  167. uint256 public maximumBuyAmount = 2*10**18;
  168. address payable public walletAddress;
  169. event TokensPurchased(address indexed to, uint256 amount);
  170.  
  171. constructor () public {
  172. governance = tx.origin;
  173. rate = uint256(50);
  174. walletAddress = 0x38dF3A64fBad5c9474E690CF44d673cD20116390; //MultiSender 0x383f7CC1124c255b9DD71F8f8A41c08C10480C1a //TEAM Ropsten 0x30D095D6f0043C9030a545A3B7cFAAE738F44de5 // Ganache 0xB3fA96b68A4e0C4AC358FE6BeE3620C787651256
  175. tokenAddress = IERC20(0x25787D57Ea94c026fbD70c8246357477a0397370); // AmpleForth 0x0c14d945Df4a2A5606490b363ccA33e3b7043706 //0xf62A0f785C28d18774Df1d07A555A68336a5c16E
  176. }
  177.  
  178. function () external payable {
  179. buy();
  180. }
  181.  
  182. function changeWallet (address payable _walletAddress) public {
  183. require(msg.sender == governance, "!governance");
  184. walletAddress = _walletAddress;
  185. }
  186.  
  187. function setToken(IERC20 _tokenAddress) public {
  188. require(msg.sender == governance, "!governance");
  189. tokenAddress = _tokenAddress;
  190. }
  191.  
  192. function buy() public payable {
  193. //require((block.timestamp > startTime ) && (block.timestamp < endTime) , "D01 Token Crowdsate is not active");
  194. uint256 weiValue = msg.value;
  195. IERC20 token = IERC20(tokenAddress);
  196. uint256 senderBal = token.balanceOf(msg.sender);
  197. require((senderBal < maximumBuyAmount.mul(rate)), "You can only buy maximum of 2 Eth worth of tokens");
  198. require((weiValue >= minimumBuyAmount) &&(weiValue<= maximumBuyAmount), "Minimum amount is 0.1 eth and Maximum amount is 2 Eth");
  199. uint256 amount = weiValue.mul(rate);
  200. _weiRaised = _weiRaised.add(weiValue);
  201. token.safeTransfer(msg.sender, amount);
  202. walletAddress.transfer(weiValue);
  203. //require(walletAddress.send(weiValue)); //_fundRaisingWallet.transfer(msg.value);
  204. //require(token.TokensPurchased(msg.sender, amount));
  205. totalSold += amount;
  206. emit TokensPurchased(msg.sender, amount);
  207. }
  208.  
  209. function burnUnsold() public {
  210. require(msg.sender == governance, "!governance");
  211. //require((block.timestamp > endTime), "D01 Token Crowdsate is still active");
  212. IERC20 token = IERC20(tokenAddress);
  213. uint256 amount = token.balanceOf(address(this));
  214. token.burn(amount);
  215. }
  216.  
  217. }
  218.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement