Advertisement
Guest User

Untitled

a guest
Aug 29th, 2022
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | Source Code | 0 0
  1. // SPDX-License-Identifier: UNLICENSED
  2. pragma solidity ^0.8.7;
  3.  
  4. contract upgradeCard {
  5. address private owner;
  6.  
  7. struct Card {
  8. uint id;
  9. string name;
  10. uint price;
  11. }
  12. mapping(uint => Card) public cards;
  13. uint public numberOfTypes;
  14.  
  15. struct Purchase {
  16. Card card;
  17. uint purchaseDate;
  18. }
  19.  
  20. struct User {
  21. uint numberOfCards;
  22. Purchase[] purchase;
  23. bool exist;
  24. }
  25. mapping(address => User) public users;
  26.  
  27. modifier isOwner() {
  28. require(msg.sender == owner, "Caller is not owner");
  29. _;
  30. }
  31.  
  32. constructor() {
  33. owner = msg.sender;
  34. numberOfTypes = 0;
  35. addCard('Basic', 0);
  36. }
  37.  
  38. /// ///
  39.  
  40. function checkExistedUser(address _userAddress) public view returns(bool) {
  41. return users[_userAddress].exist;
  42. }
  43.  
  44. function showRemainingDate(uint _id) public view returns(uint) {
  45. for (uint i = 0; i < users[msg.sender].numberOfCards; i++) {
  46. if (users[msg.sender].purchase[i].card.id == cards[_id].id) {
  47. return 30*86400 - (block.timestamp - users[msg.sender].purchase[i].purchaseDate);
  48. }
  49. }
  50. return 0;
  51. }
  52.  
  53. function checkPurchase(uint _id) public view returns (bool) {
  54. for (uint i = 0; i < users[msg.sender].numberOfCards; i++) {
  55. if (users[msg.sender].purchase[i].card.id == cards[_id].id) {
  56. return true;
  57. }
  58. }
  59. return false;
  60. }
  61.  
  62. ///
  63.  
  64. function addCard(string memory _name, uint _price) public isOwner {
  65. Card storage card = cards[numberOfTypes];
  66. card.id = block.timestamp;
  67. card.name = _name;
  68. card.price = _price;
  69. numberOfTypes++;
  70. }
  71.  
  72. function removeCard(uint _id) public isOwner {
  73. for (uint i = _id; i < numberOfTypes - 1; i++){
  74. cards[i] = cards[i + 1];
  75. }
  76. numberOfTypes--;
  77. delete cards[numberOfTypes];
  78. }
  79.  
  80. function purchaseCard(uint _id) public {
  81. require(0 < _id || _id >= numberOfTypes, "Card does not exist");
  82. User storage user = users[msg.sender];
  83. if (!checkExistedUser(msg.sender)) {
  84. user.exist = true;
  85. user.numberOfCards = 0;
  86. }
  87. user.purchase.push(Purchase(cards[_id], block.timestamp));
  88. user.numberOfCards++;
  89. }
  90.  
  91. function expiredCard(uint _id) public {
  92. uint purchaseId;
  93. for (uint i = 0; i < users[msg.sender].numberOfCards; i++) {
  94. if (users[msg.sender].purchase[i].card.id == cards[_id].id) {
  95. purchaseId = i;
  96. break;
  97. }
  98. }
  99. for (uint i = purchaseId; i < users[msg.sender].numberOfCards - 1; i++) {
  100. users[msg.sender].purchase[i] = users[msg.sender].purchase[i + 1];
  101. }
  102. users[msg.sender].numberOfCards--;
  103. delete users[msg.sender].purchase[ users[msg.sender].numberOfCards ];
  104. }
  105.  
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement