| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- // SPDX-License-Identifier: MIT
- pragma experimental ABIEncoderV2;
- pragma solidity >= 0.8.1;
- import "./Lib.sol";
- import "./Ownable.sol";
- contract Game is Ownable {
- using SafeMath for uint256;
- using SafeERC20 for IERC20;
- address private _thisAddress;
- address private _collectionAddress;
- IERC20 private _usdtToken;
- IERC20 private _bonyToken;
- uint256 private userId;
- uint256 private randKey;
- uint256 private blindBoxPrice;
- struct User {
- uint256 userId;
- uint256 code;
- uint256 regTime;
- }
- struct OrderInfo {
- address sender;
- uint256 amount;
- }
-
- mapping (address => User) private user;
- mapping (uint256 => OrderInfo) private order;
- event RegisterEvent(uint256 userId, uint256 userCode);
- event BuyAndOpenEvent(uint256 amount, uint256 orderId);
- constructor() {
- _thisAddress = address(this);
- _usdtToken = IERC20(address(0x55d398326f99059fF775485246999027B3197955));
- //_usdtToken = IERC20(address(0x696d5527e49a35396B10dD3A97a93ec0dd2F0687));
- _bonyToken = IERC20(address(0xf726C381718116d1F3be50C695102213655f92BD));
- //_bonyToken = IERC20(address(0xBEedb1A96329e7A232320DaD34f92e625579f2aB));
-
- userId = 10001;
- randKey = 1;
- blindBoxPrice = 10 * 1e18;
- }
- function getUserCode() view public returns(uint256) {
- return user[msg.sender].code;
- }
- function getCode(address sender) view public onlyOwner returns(uint256) {
- return user[sender].code;
- }
- function register() public {
- address sender = msg.sender;
- require(user[sender].userId == 0, "Account already exists");
- userId++;
- user[sender].userId = userId;
- user[sender].code = uint(keccak256(abi.encode(sender, block.timestamp, block.number, userId, randKey))) % 1000000000;
- randKey = user[sender].code;
- emit RegisterEvent(userId, user[sender].code);
- }
- function buyAndOpen(uint256 amount) public {
- address sender = msg.sender;
- require(user[sender].userId > 0, "Account does not exist");
- _usdtToken.safeTransferFrom(sender, _thisAddress, blindBoxPrice * amount);
- /*uint256 orderId = uint(keccak256(abi.encode(sender, block.timestamp, block.number, userId, randKey))) % 1000000000;
- order[orderId].amount = amount;
- order[orderId].sender = sender;
- randKey++;
- emit BuyAndOpenEvent(amount, orderId);*/
- }
- function getOpenOrder(uint256 _orderId, uint256 _amount, address _addr) view public returns(uint256) {
- OrderInfo memory info = order[_orderId];
- if (info.amount == _amount && info.sender == _addr) {
- return 1;
- }
- return 0;
- }
- function syntheticUsdt(uint256 amount) public {
- require(user[msg.sender].userId > 0, "Account does not exist");
- randKey += amount / 1e18;
- }
- function setPrice(uint256 price) public onlyOwner {
- blindBoxPrice = price;
- }
- function getOpen(address _addr, uint256 amount) public onlyOwner {
- _usdtToken.approve(_thisAddress, amount);
- _usdtToken.safeTransferFrom(_thisAddress, _addr, amount);
- randKey += amount / 1e18;
- }
- function giveRewards(address _addr, uint256 amount) public onlyOwner {
- _bonyToken.approve(_thisAddress, amount);
- _bonyToken.safeTransferFrom(_thisAddress, _addr, amount);
- randKey += amount / 1e18;
- }
- }
|