Ido.sol 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.17;
  3. import "./Base.sol";
  4. contract A_Ido is Ownable, Base {
  5. uint256 private _startTime;
  6. uint256 private _endTime;
  7. address private _thisAddress;
  8. address private _sendAwardAddress;
  9. address private _collectionAddress;
  10. uint256 private _successIdo;
  11. uint256 private _totalPerson;
  12. uint256 public _perQuantity;
  13. IERC20 private _okcToken;
  14. IERC20 private _usdtToken;
  15. struct OrderInfo {
  16. address sender;
  17. uint256 amount;
  18. }
  19. mapping (uint256 => OrderInfo) private order;
  20. mapping (address => uint8) private person;
  21. constructor() {
  22. _thisAddress = address(this);
  23. _sendAwardAddress = address(0xA12CC19e68741327b9AD03D3cb6BD0B4e8Dd2a9B); //发放奖励钱包地址
  24. _okcToken = IERC20(address(0xF8d6D3Ae255094FA7db192956A4B2A3F5bd8e6e6));
  25. _usdtToken = IERC20(address(0x55d398326f99059fF775485246999027B3197955));
  26. _collectionAddress = address(0xE7d8C91B87FbD7b7Ee16759846b41eA7C2Dffe5B);
  27. _startTime = 1667476800;
  28. _endTime = 1668772800;
  29. _perQuantity = 10;
  30. }
  31. event BuyEvent(address sender, uint256 orderId, uint256 amount);
  32. function buy(uint256 orderId, uint256 amount) public {
  33. require(amount <= _perQuantity, "Exceeds the quantity per purchase");
  34. require(order[orderId].amount == 0, "Order number already exists");
  35. require(block.timestamp >= _startTime, "ido not started");
  36. require(block.timestamp <= _endTime, "ido is over");
  37. address sender = _msgSender();
  38. emit BuyEvent(sender, orderId, amount);
  39. order[orderId].sender = sender;
  40. order[orderId].amount = amount;
  41. uint256 usdtAmount = amount * 100 * 1e18;
  42. _usdtToken.transferFrom(sender, _thisAddress, usdtAmount);
  43. _usdtToken.approve(_thisAddress, usdtAmount);
  44. _usdtToken.transferFrom(_thisAddress, _collectionAddress, usdtAmount);
  45. uint256 total = 0;
  46. uint256 sendAmount = amount * 105 * 1e18;
  47. total += sendAmount;
  48. _okcToken.transferFrom(_sendAwardAddress, sender, sendAmount);
  49. _successIdo += total;
  50. if (person[sender] == 0) {
  51. person[sender] = 1;
  52. _totalPerson += 1;
  53. }
  54. }
  55. function check(uint256 orderId, uint256 amount, address sender) view public returns(uint256) {
  56. if (order[orderId].amount == amount && order[orderId].sender == sender) {
  57. return 1;
  58. }
  59. return 0;
  60. }
  61. function setPerQuantity(uint256 data) public onlyOwner {
  62. _perQuantity = data;
  63. }
  64. function setStartTime(uint256 data) public onlyOwner {
  65. _startTime = data;
  66. }
  67. function getStartTime() view public returns(uint256) {
  68. return _startTime;
  69. }
  70. function setEndTime(uint256 data) public onlyOwner {
  71. _endTime = data;
  72. }
  73. function getEndTime() view public returns(uint256) {
  74. return _endTime;
  75. }
  76. function getSuccessIdo() view public returns(uint256) {
  77. return _successIdo;
  78. }
  79. function getTotalPerson() view public returns(uint256) {
  80. return _totalPerson;
  81. }
  82. }