Game.sol 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. // SPDX-License-Identifier: MIT
  2. pragma experimental ABIEncoderV2;
  3. pragma solidity >= 0.8.1;
  4. import "./Lib.sol";
  5. import "./Ownable.sol";
  6. contract Game is Ownable {
  7. using SafeMath for uint256;
  8. using SafeERC20 for IERC20;
  9. address private _thisAddress;
  10. address private _collectionAddress;
  11. IERC20 private _usdtToken;
  12. IERC20 private _bonyToken;
  13. uint256 private userId;
  14. uint256 private randKey;
  15. uint256 private blindBoxPrice;
  16. struct User {
  17. uint256 userId;
  18. uint256 code;
  19. uint256 regTime;
  20. }
  21. struct OrderInfo {
  22. address sender;
  23. uint256 amount;
  24. }
  25. mapping (address => User) private user;
  26. mapping (uint256 => OrderInfo) private order;
  27. event RegisterEvent(uint256 userId, uint256 userCode);
  28. event BuyAndOpenEvent(uint256 amount, uint256 orderId);
  29. constructor() {
  30. _thisAddress = address(this);
  31. _usdtToken = IERC20(address(0x55d398326f99059fF775485246999027B3197955));
  32. //_usdtToken = IERC20(address(0x696d5527e49a35396B10dD3A97a93ec0dd2F0687));
  33. _bonyToken = IERC20(address(0xf726C381718116d1F3be50C695102213655f92BD));
  34. //_bonyToken = IERC20(address(0xBEedb1A96329e7A232320DaD34f92e625579f2aB));
  35. userId = 10001;
  36. randKey = 1;
  37. blindBoxPrice = 10 * 1e18;
  38. }
  39. function getUserCode() view public returns(uint256) {
  40. return user[msg.sender].code;
  41. }
  42. function getCode(address sender) view public onlyOwner returns(uint256) {
  43. return user[sender].code;
  44. }
  45. function register() public {
  46. address sender = msg.sender;
  47. require(user[sender].userId == 0, "Account already exists");
  48. userId++;
  49. user[sender].userId = userId;
  50. user[sender].code = uint(keccak256(abi.encode(sender, block.timestamp, block.number, userId, randKey))) % 1000000000;
  51. randKey = user[sender].code;
  52. emit RegisterEvent(userId, user[sender].code);
  53. }
  54. function buyAndOpen(uint256 amount) public {
  55. address sender = msg.sender;
  56. require(user[sender].userId > 0, "Account does not exist");
  57. _usdtToken.safeTransferFrom(sender, _thisAddress, blindBoxPrice * amount);
  58. /*uint256 orderId = uint(keccak256(abi.encode(sender, block.timestamp, block.number, userId, randKey))) % 1000000000;
  59. order[orderId].amount = amount;
  60. order[orderId].sender = sender;
  61. randKey++;
  62. emit BuyAndOpenEvent(amount, orderId);*/
  63. }
  64. function getOpenOrder(uint256 _orderId, uint256 _amount, address _addr) view public returns(uint256) {
  65. OrderInfo memory info = order[_orderId];
  66. if (info.amount == _amount && info.sender == _addr) {
  67. return 1;
  68. }
  69. return 0;
  70. }
  71. function syntheticUsdt(uint256 amount) public {
  72. require(user[msg.sender].userId > 0, "Account does not exist");
  73. randKey += amount / 1e18;
  74. }
  75. function setPrice(uint256 price) public onlyOwner {
  76. blindBoxPrice = price;
  77. }
  78. function getOpen(address _addr, uint256 amount) public onlyOwner {
  79. _usdtToken.approve(_thisAddress, amount);
  80. _usdtToken.safeTransferFrom(_thisAddress, _addr, amount);
  81. randKey += amount / 1e18;
  82. }
  83. function giveRewards(address _addr, uint256 amount) public onlyOwner {
  84. _bonyToken.approve(_thisAddress, amount);
  85. _bonyToken.safeTransferFrom(_thisAddress, _addr, amount);
  86. randKey += amount / 1e18;
  87. }
  88. }