| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // SPDX-License-Identifier: MIT
- pragma solidity ^0.8.17;
- import "./Base.sol";
- contract A_Ido is Ownable, Base {
- uint256 private _startTime;
- uint256 private _endTime;
- address private _thisAddress;
- address private _sendAwardAddress;
- address private _collectionAddress;
- uint256 private _successIdo;
- uint256 private _totalPerson;
- uint256 public _perQuantity;
- IERC20 private _okcToken;
- IERC20 private _usdtToken;
- struct OrderInfo {
- address sender;
- uint256 amount;
- }
- mapping (uint256 => OrderInfo) private order;
- mapping (address => uint8) private person;
- constructor() {
- _thisAddress = address(this);
- _sendAwardAddress = address(0xA12CC19e68741327b9AD03D3cb6BD0B4e8Dd2a9B); //发放奖励钱包地址
- _okcToken = IERC20(address(0xF8d6D3Ae255094FA7db192956A4B2A3F5bd8e6e6));
- _usdtToken = IERC20(address(0x55d398326f99059fF775485246999027B3197955));
- _collectionAddress = address(0xE7d8C91B87FbD7b7Ee16759846b41eA7C2Dffe5B);
- _startTime = 1667476800;
- _endTime = 1668772800;
- _perQuantity = 10;
- }
- event BuyEvent(address sender, uint256 orderId, uint256 amount);
- function buy(uint256 orderId, uint256 amount) public {
- require(amount <= _perQuantity, "Exceeds the quantity per purchase");
- require(order[orderId].amount == 0, "Order number already exists");
- require(block.timestamp >= _startTime, "ido not started");
- require(block.timestamp <= _endTime, "ido is over");
-
- address sender = _msgSender();
- emit BuyEvent(sender, orderId, amount);
- order[orderId].sender = sender;
- order[orderId].amount = amount;
- uint256 usdtAmount = amount * 100 * 1e18;
- _usdtToken.transferFrom(sender, _thisAddress, usdtAmount);
- _usdtToken.approve(_thisAddress, usdtAmount);
- _usdtToken.transferFrom(_thisAddress, _collectionAddress, usdtAmount);
- uint256 total = 0;
- uint256 sendAmount = amount * 105 * 1e18;
- total += sendAmount;
- _okcToken.transferFrom(_sendAwardAddress, sender, sendAmount);
- _successIdo += total;
- if (person[sender] == 0) {
- person[sender] = 1;
- _totalPerson += 1;
- }
- }
- function check(uint256 orderId, uint256 amount, address sender) view public returns(uint256) {
- if (order[orderId].amount == amount && order[orderId].sender == sender) {
- return 1;
- }
- return 0;
- }
- function setPerQuantity(uint256 data) public onlyOwner {
- _perQuantity = data;
- }
- function setStartTime(uint256 data) public onlyOwner {
- _startTime = data;
- }
- function getStartTime() view public returns(uint256) {
- return _startTime;
- }
- function setEndTime(uint256 data) public onlyOwner {
- _endTime = data;
- }
- function getEndTime() view public returns(uint256) {
- return _endTime;
- }
- function getSuccessIdo() view public returns(uint256) {
- return _successIdo;
- }
- function getTotalPerson() view public returns(uint256) {
- return _totalPerson;
- }
- }
|