nodara-contract 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/README.md +14 -0
  2. package/artifacts/@openzeppelin/contracts/access/Ownable.sol/Ownable.dbg.json +4 -0
  3. package/artifacts/@openzeppelin/contracts/access/Ownable.sol/Ownable.json +63 -0
  4. package/artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.dbg.json +4 -0
  5. package/artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.json +297 -0
  6. package/artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.dbg.json +4 -0
  7. package/artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.json +194 -0
  8. package/artifacts/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol/ERC20Burnable.dbg.json +4 -0
  9. package/artifacts/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol/ERC20Burnable.json +312 -0
  10. package/artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.dbg.json +4 -0
  11. package/artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.json +233 -0
  12. package/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json +4 -0
  13. package/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.json +10 -0
  14. package/artifacts/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol/AccessControlUpgradeable.dbg.json +4 -0
  15. package/artifacts/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol/AccessControlUpgradeable.json +228 -0
  16. package/artifacts/@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol/IAccessControlUpgradeable.dbg.json +4 -0
  17. package/artifacts/@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol/IAccessControlUpgradeable.json +183 -0
  18. package/artifacts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.dbg.json +4 -0
  19. package/artifacts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.json +76 -0
  20. package/artifacts/@openzeppelin/contracts-upgradeable/interfaces/IERC1967Upgradeable.sol/IERC1967Upgradeable.dbg.json +4 -0
  21. package/artifacts/@openzeppelin/contracts-upgradeable/interfaces/IERC1967Upgradeable.sol/IERC1967Upgradeable.json +56 -0
  22. package/artifacts/@openzeppelin/contracts-upgradeable/interfaces/IERC4906Upgradeable.sol/IERC4906Upgradeable.dbg.json +4 -0
  23. package/artifacts/@openzeppelin/contracts-upgradeable/interfaces/IERC4906Upgradeable.sol/IERC4906Upgradeable.json +328 -0
  24. package/artifacts/@openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol/IERC1822ProxiableUpgradeable.dbg.json +4 -0
  25. package/artifacts/@openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol/IERC1822ProxiableUpgradeable.json +24 -0
  26. package/artifacts/@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol/ERC1967UpgradeUpgradeable.dbg.json +4 -0
  27. package/artifacts/@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol/ERC1967UpgradeUpgradeable.json +69 -0
  28. package/artifacts/@openzeppelin/contracts-upgradeable/proxy/beacon/IBeaconUpgradeable.sol/IBeaconUpgradeable.dbg.json +4 -0
  29. package/artifacts/@openzeppelin/contracts-upgradeable/proxy/beacon/IBeaconUpgradeable.sol/IBeaconUpgradeable.json +24 -0
  30. package/artifacts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.dbg.json +4 -0
  31. package/artifacts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.json +24 -0
  32. package/artifacts/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol/UUPSUpgradeable.dbg.json +4 -0
  33. package/artifacts/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol/UUPSUpgradeable.json +113 -0
  34. package/artifacts/@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol/ReentrancyGuardUpgradeable.dbg.json +4 -0
  35. package/artifacts/@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol/ReentrancyGuardUpgradeable.json +24 -0
  36. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol/ERC721Upgradeable.dbg.json +4 -0
  37. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol/ERC721Upgradeable.json +354 -0
  38. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol/IERC721ReceiverUpgradeable.dbg.json +4 -0
  39. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol/IERC721ReceiverUpgradeable.json +45 -0
  40. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol/IERC721Upgradeable.dbg.json +4 -0
  41. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol/IERC721Upgradeable.json +296 -0
  42. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol/ERC721EnumerableUpgradeable.dbg.json +4 -0
  43. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol/ERC721EnumerableUpgradeable.json +410 -0
  44. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721URIStorageUpgradeable.sol/ERC721URIStorageUpgradeable.dbg.json +4 -0
  45. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721URIStorageUpgradeable.sol/ERC721URIStorageUpgradeable.json +386 -0
  46. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/IERC721EnumerableUpgradeable.sol/IERC721EnumerableUpgradeable.dbg.json +4 -0
  47. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/IERC721EnumerableUpgradeable.sol/IERC721EnumerableUpgradeable.json +352 -0
  48. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/IERC721MetadataUpgradeable.sol/IERC721MetadataUpgradeable.dbg.json +4 -0
  49. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/IERC721MetadataUpgradeable.sol/IERC721MetadataUpgradeable.json +341 -0
  50. package/artifacts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.dbg.json +4 -0
  51. package/artifacts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.json +10 -0
  52. package/artifacts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.dbg.json +4 -0
  53. package/artifacts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.json +24 -0
  54. package/artifacts/@openzeppelin/contracts-upgradeable/utils/CountersUpgradeable.sol/CountersUpgradeable.dbg.json +4 -0
  55. package/artifacts/@openzeppelin/contracts-upgradeable/utils/CountersUpgradeable.sol/CountersUpgradeable.json +10 -0
  56. package/artifacts/@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol/StorageSlotUpgradeable.dbg.json +4 -0
  57. package/artifacts/@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol/StorageSlotUpgradeable.json +10 -0
  58. package/artifacts/@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol/StringsUpgradeable.dbg.json +4 -0
  59. package/artifacts/@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol/StringsUpgradeable.json +10 -0
  60. package/artifacts/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol/ERC165Upgradeable.dbg.json +4 -0
  61. package/artifacts/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol/ERC165Upgradeable.json +43 -0
  62. package/artifacts/@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol/IERC165Upgradeable.dbg.json +4 -0
  63. package/artifacts/@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol/IERC165Upgradeable.json +30 -0
  64. package/artifacts/@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol/MathUpgradeable.dbg.json +4 -0
  65. package/artifacts/@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol/MathUpgradeable.json +10 -0
  66. package/artifacts/@openzeppelin/contracts-upgradeable/utils/math/SignedMathUpgradeable.sol/SignedMathUpgradeable.dbg.json +4 -0
  67. package/artifacts/@openzeppelin/contracts-upgradeable/utils/math/SignedMathUpgradeable.sol/SignedMathUpgradeable.json +10 -0
  68. package/artifacts/build-info/0e2d893049ad4fa186582937b6a7ba86.json +1 -0
  69. package/artifacts/build-info/b7890b3cfe499293356f8c290e6e1ee4.json +1 -0
  70. package/artifacts/contracts/CROWD.sol/CROWD.dbg.json +4 -0
  71. package/artifacts/contracts/CROWD.sol/CROWD.json +413 -0
  72. package/artifacts/contracts/CUSDT.sol/CUSDT.dbg.json +4 -0
  73. package/artifacts/contracts/CUSDT.sol/CUSDT.json +413 -0
  74. package/artifacts/contracts/NFT.sol/NFT.dbg.json +4 -0
  75. package/artifacts/contracts/NFT.sol/NFT.json +1158 -0
  76. package/artifacts/contracts/NFTFounder.sol/NFTFounder.dbg.json +4 -0
  77. package/artifacts/contracts/NFTFounder.sol/NFTFounder.json +889 -0
  78. package/artifacts/contracts/NFTGenesis.sol/NFTGenesis.dbg.json +4 -0
  79. package/artifacts/contracts/NFTGenesis.sol/NFTGenesis.json +1149 -0
  80. package/artifacts/contracts/Network.sol/Network.dbg.json +4 -0
  81. package/artifacts/contracts/Network.sol/Network.json +1218 -0
  82. package/artifacts/contracts/Swap.sol/Swap.dbg.json +4 -0
  83. package/artifacts/contracts/Swap.sol/Swap.json +485 -0
  84. package/artifacts/contracts/USDT.sol/USDT.dbg.json +4 -0
  85. package/artifacts/contracts/USDT.sol/USDT.json +413 -0
  86. package/artifacts/contracts/lib/AccessControl.sol/AccessControl.dbg.json +4 -0
  87. package/artifacts/contracts/lib/AccessControl.sol/AccessControl.json +254 -0
  88. package/artifacts/contracts/lib/NFTGetter.sol/NFTGetter.dbg.json +4 -0
  89. package/artifacts/contracts/lib/NFTGetter.sol/NFTGetter.json +186 -0
  90. package/artifacts/contracts/lib/NFTHelpers.sol/NFTHelpers.dbg.json +4 -0
  91. package/artifacts/contracts/lib/NFTHelpers.sol/NFTHelpers.json +10 -0
  92. package/artifacts/contracts/lib/ValhallaBlackList.sol/ValhallaBlackList.dbg.json +4 -0
  93. package/artifacts/contracts/lib/ValhallaBlackList.sol/ValhallaBlackList.json +30 -0
  94. package/artifacts/contracts/lib/ValhallaPool.sol/ValhallaPool.dbg.json +4 -0
  95. package/artifacts/contracts/lib/ValhallaPool.sol/ValhallaPool.json +162 -0
  96. package/contracts/CROWD.sol +32 -0
  97. package/contracts/CUSDT.sol +32 -0
  98. package/contracts/NFT.sol +504 -0
  99. package/contracts/NFTFounder.sol +254 -0
  100. package/contracts/NFTGenesis.sol +343 -0
  101. package/contracts/Network.sol +513 -0
  102. package/contracts/Swap.sol +197 -0
  103. package/contracts/USDT.sol +32 -0
  104. package/contracts/lib/AccessControl.sol +35 -0
  105. package/contracts/lib/NFTGetter.sol +60 -0
  106. package/contracts/lib/NFTHelpers.sol +111 -0
  107. package/contracts/lib/ValhallaBlackList.sol +18 -0
  108. package/contracts/lib/ValhallaPool.sol +44 -0
  109. package/package.json +66 -0
  110. package/typechain-types/@openzeppelin/contracts/access/Ownable.ts +176 -0
  111. package/typechain-types/@openzeppelin/contracts/access/index.ts +4 -0
  112. package/typechain-types/@openzeppelin/contracts/index.ts +7 -0
  113. package/typechain-types/@openzeppelin/contracts/token/ERC20/ERC20.ts +464 -0
  114. package/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.ts +342 -0
  115. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.ts +533 -0
  116. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts +384 -0
  117. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +5 -0
  118. package/typechain-types/@openzeppelin/contracts/token/ERC20/index.ts +7 -0
  119. package/typechain-types/@openzeppelin/contracts/token/index.ts +5 -0
  120. package/typechain-types/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.ts +410 -0
  121. package/typechain-types/@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.ts +341 -0
  122. package/typechain-types/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.ts +188 -0
  123. package/typechain-types/@openzeppelin/contracts-upgradeable/access/index.ts +6 -0
  124. package/typechain-types/@openzeppelin/contracts-upgradeable/index.ts +15 -0
  125. package/typechain-types/@openzeppelin/contracts-upgradeable/interfaces/IERC1967Upgradeable.ts +115 -0
  126. package/typechain-types/@openzeppelin/contracts-upgradeable/interfaces/IERC4906Upgradeable.ts +597 -0
  127. package/typechain-types/@openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol/IERC1822ProxiableUpgradeable.ts +87 -0
  128. package/typechain-types/@openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol/index.ts +4 -0
  129. package/typechain-types/@openzeppelin/contracts-upgradeable/interfaces/index.ts +7 -0
  130. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.ts +127 -0
  131. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/ERC1967/index.ts +4 -0
  132. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/beacon/IBeaconUpgradeable.ts +87 -0
  133. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/beacon/index.ts +4 -0
  134. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/index.ts +9 -0
  135. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.ts +69 -0
  136. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.ts +238 -0
  137. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/index.ts +5 -0
  138. package/typechain-types/@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.ts +69 -0
  139. package/typechain-types/@openzeppelin/contracts-upgradeable/security/index.ts +4 -0
  140. package/typechain-types/@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.ts +631 -0
  141. package/typechain-types/@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.ts +126 -0
  142. package/typechain-types/@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.ts +559 -0
  143. package/typechain-types/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.ts +726 -0
  144. package/typechain-types/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721URIStorageUpgradeable.ts +669 -0
  145. package/typechain-types/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/IERC721EnumerableUpgradeable.ts +654 -0
  146. package/typechain-types/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/IERC721MetadataUpgradeable.ts +619 -0
  147. package/typechain-types/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/index.ts +7 -0
  148. package/typechain-types/@openzeppelin/contracts-upgradeable/token/ERC721/index.ts +8 -0
  149. package/typechain-types/@openzeppelin/contracts-upgradeable/token/index.ts +5 -0
  150. package/typechain-types/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.ts +69 -0
  151. package/typechain-types/@openzeppelin/contracts-upgradeable/utils/index.ts +6 -0
  152. package/typechain-types/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.ts +121 -0
  153. package/typechain-types/@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.ts +103 -0
  154. package/typechain-types/@openzeppelin/contracts-upgradeable/utils/introspection/index.ts +5 -0
  155. package/typechain-types/@openzeppelin/index.ts +7 -0
  156. package/typechain-types/common.ts +46 -0
  157. package/typechain-types/contracts/CROWD.ts +728 -0
  158. package/typechain-types/contracts/CUSDT.ts +728 -0
  159. package/typechain-types/contracts/NFT.ts +1979 -0
  160. package/typechain-types/contracts/NFTFounder.ts +1562 -0
  161. package/typechain-types/contracts/NFTGenesis.ts +1908 -0
  162. package/typechain-types/contracts/Network.ts +2094 -0
  163. package/typechain-types/contracts/Swap.ts +914 -0
  164. package/typechain-types/contracts/USDT.ts +728 -0
  165. package/typechain-types/contracts/index.ts +13 -0
  166. package/typechain-types/contracts/lib/AccessControl.ts +447 -0
  167. package/typechain-types/contracts/lib/NFTGetter.ts +404 -0
  168. package/typechain-types/contracts/lib/ValhallaBlackList.ts +105 -0
  169. package/typechain-types/contracts/lib/ValhallaPool.ts +257 -0
  170. package/typechain-types/contracts/lib/index.ts +7 -0
  171. package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +78 -0
  172. package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +4 -0
  173. package/typechain-types/factories/@openzeppelin/contracts/index.ts +5 -0
  174. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts +350 -0
  175. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +206 -0
  176. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable__factory.ts +327 -0
  177. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts +248 -0
  178. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +5 -0
  179. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +6 -0
  180. package/typechain-types/factories/@openzeppelin/contracts/token/index.ts +4 -0
  181. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable__factory.ts +247 -0
  182. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable__factory.ts +202 -0
  183. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.ts +91 -0
  184. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/index.ts +6 -0
  185. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/index.ts +9 -0
  186. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/interfaces/IERC1967Upgradeable__factory.ts +71 -0
  187. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/interfaces/IERC4906Upgradeable__factory.ts +343 -0
  188. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol/IERC1822ProxiableUpgradeable__factory.ts +43 -0
  189. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol/index.ts +4 -0
  190. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/interfaces/index.ts +6 -0
  191. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable__factory.ts +88 -0
  192. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/ERC1967/index.ts +4 -0
  193. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/beacon/IBeaconUpgradeable__factory.ts +39 -0
  194. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/beacon/index.ts +4 -0
  195. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/index.ts +6 -0
  196. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.ts +39 -0
  197. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable__factory.ts +128 -0
  198. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.ts +5 -0
  199. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable__factory.ts +43 -0
  200. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/security/index.ts +4 -0
  201. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable__factory.ts +406 -0
  202. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable__factory.ts +64 -0
  203. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable__factory.ts +311 -0
  204. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable__factory.ts +429 -0
  205. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721URIStorageUpgradeable__factory.ts +405 -0
  206. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/IERC721EnumerableUpgradeable__factory.ts +371 -0
  207. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/IERC721MetadataUpgradeable__factory.ts +360 -0
  208. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/token/ERC721/extensions/index.ts +7 -0
  209. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/token/ERC721/index.ts +7 -0
  210. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/token/index.ts +4 -0
  211. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.ts +39 -0
  212. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/index.ts +5 -0
  213. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable__factory.ts +58 -0
  214. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable__factory.ts +45 -0
  215. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/introspection/index.ts +5 -0
  216. package/typechain-types/factories/@openzeppelin/index.ts +5 -0
  217. package/typechain-types/factories/contracts/CROWD__factory.ts +459 -0
  218. package/typechain-types/factories/contracts/CUSDT__factory.ts +459 -0
  219. package/typechain-types/factories/contracts/NFTFounder__factory.ts +941 -0
  220. package/typechain-types/factories/contracts/NFTGenesis__factory.ts +1201 -0
  221. package/typechain-types/factories/contracts/NFT__factory.ts +1204 -0
  222. package/typechain-types/factories/contracts/Network__factory.ts +1267 -0
  223. package/typechain-types/factories/contracts/Swap__factory.ts +531 -0
  224. package/typechain-types/factories/contracts/USDT__factory.ts +459 -0
  225. package/typechain-types/factories/contracts/index.ts +12 -0
  226. package/typechain-types/factories/contracts/lib/AccessControl__factory.ts +269 -0
  227. package/typechain-types/factories/contracts/lib/NFTGetter__factory.ts +238 -0
  228. package/typechain-types/factories/contracts/lib/ValhallaBlackList__factory.ts +45 -0
  229. package/typechain-types/factories/contracts/lib/ValhallaPool__factory.ts +177 -0
  230. package/typechain-types/factories/contracts/lib/index.ts +7 -0
  231. package/typechain-types/factories/index.ts +5 -0
  232. package/typechain-types/hardhat.d.ts +375 -0
  233. package/typechain-types/index.ts +84 -0
@@ -0,0 +1,254 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol";
5
+ import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
6
+ import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol";
7
+ import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721URIStorageUpgradeable.sol";
8
+ import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
9
+ import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
10
+ import "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol";
11
+ import "@openzeppelin/contracts-upgradeable/utils/CountersUpgradeable.sol";
12
+
13
+ import "./USDT.sol";
14
+ import "./lib/NFTGetter.sol";
15
+ import "./NFT.sol";
16
+ import "./Network.sol";
17
+
18
+ contract NFTFounder is
19
+ Initializable,
20
+ ERC721Upgradeable,
21
+ OwnableUpgradeable,
22
+ ERC721EnumerableUpgradeable,
23
+ ERC721URIStorageUpgradeable,
24
+ UUPSUpgradeable
25
+ {
26
+ using CountersUpgradeable for CountersUpgradeable.Counter;
27
+
28
+ CountersUpgradeable.Counter private _tokenIdCounter;
29
+ CountersUpgradeable.Counter private _cardIdCounter;
30
+ USDT public usdtERC20;
31
+ Network public valhalla;
32
+
33
+ CardFounder public cardFounder;
34
+ mapping(address => CardsRewardFounder) public nftFounder;
35
+ uint public nftFounderPoolMarker;
36
+ address public receiverAddress;
37
+ address public receiverAddress2;
38
+ uint256 public nftFounderPool;
39
+
40
+ // events
41
+ event BuyNFTs(address indexed _from, uint[] _tokenIds);
42
+ event ClaimReward(address indexed _from, uint value);
43
+ event DistributeRewards(address indexed from, uint value);
44
+
45
+ /// @custom:oz-upgrades-unsafe-allow constructor
46
+ constructor() {
47
+ _disableInitializers();
48
+ }
49
+
50
+ function initialize(
51
+ USDT _usdtERC20,
52
+ Network _valhalla,
53
+ address _receiver
54
+ ) public initializer {
55
+ __ERC721_init("NFTFounder", "NFTF");
56
+ __ERC721Enumerable_init();
57
+ __Ownable_init();
58
+ __UUPSUpgradeable_init();
59
+ valhalla = _valhalla;
60
+ receiverAddress = _receiver;
61
+ usdtERC20 = _usdtERC20;
62
+
63
+ cardFounder.totalMinted = 0;
64
+ _cardIdCounter.increment();
65
+ }
66
+
67
+ modifier onlyValhalla() {
68
+ require(msg.sender == address(valhalla), "Only Admin can perform action");
69
+ _;
70
+ }
71
+
72
+ function setFounderProps(uint _price, uint _maxMinted) public {
73
+ cardFounder.price = _price * 10 ** usdtERC20.decimals();
74
+ cardFounder.maxMinted = _maxMinted;
75
+ }
76
+
77
+ function myNftRewards(address _address) public view returns (uint) {
78
+ CardsRewardFounder memory nftCards = nftFounder[_address];
79
+ uint poolMarker = nftFounderPoolMarker;
80
+
81
+ if (!(poolMarker > nftCards.currentRewards)) return 0;
82
+ return (poolMarker - nftCards.currentRewards) * nftCards.ownedNfts;
83
+ }
84
+
85
+ function buyNFTs(uint amount) public {
86
+ bool isRegistered;
87
+ address referrer;
88
+ (isRegistered, , , referrer, , , , ) = valhalla.accountMap(msg.sender);
89
+
90
+ uint8[3] memory distributedValue = [5, 3, 2];
91
+
92
+ require(isRegistered, "Not registered yet");
93
+
94
+ uint[] memory tokenIds = new uint[](amount);
95
+ // usdtERC20.transferFrom(msg.sender, receiverAddress, cardFounder.price * amount);
96
+
97
+ require(
98
+ cardFounder.maxMinted >= cardFounder.totalMinted + amount,
99
+ "Max minted reached"
100
+ );
101
+
102
+ for (uint i = 0; i < 3; i++) {
103
+ if (referrer == address(0)) {
104
+ usdtERC20.transferFrom(
105
+ msg.sender,
106
+ receiverAddress,
107
+ (distributedValue[i] * cardFounder.price * amount) / 100
108
+ );
109
+ } else {
110
+ usdtERC20.transferFrom(
111
+ msg.sender,
112
+ referrer,
113
+ (distributedValue[i] * cardFounder.price * amount) / 100
114
+ );
115
+ (, , , referrer, , , , ) = valhalla.accountMap(referrer);
116
+ }
117
+ }
118
+
119
+ usdtERC20.transferFrom(
120
+ msg.sender,
121
+ receiverAddress,
122
+ ((36 * cardFounder.price) / 100) * amount
123
+ );
124
+ usdtERC20.transferFrom(
125
+ msg.sender,
126
+ receiverAddress2,
127
+ ((54 * cardFounder.price) / 100) * amount
128
+ );
129
+
130
+ for (uint i = 0; i < amount; i++) {
131
+ uint256 tokenId = _tokenIdCounter.current();
132
+ tokenIds[i] = tokenId;
133
+ _tokenIdCounter.increment();
134
+ _safeMint(msg.sender, tokenId);
135
+ }
136
+
137
+ uint rewards = myNftRewards(msg.sender);
138
+ if (rewards > 0) claimRewards();
139
+
140
+ CardsRewardFounder storage nftCards = nftFounder[msg.sender];
141
+ nftCards.ownedNfts += amount;
142
+ cardFounder.totalMinted += amount;
143
+ nftCards.currentRewards = nftFounderPoolMarker;
144
+
145
+ emit BuyNFTs(msg.sender, tokenIds);
146
+ }
147
+
148
+ function claimRewards() public {
149
+ uint rewards = myNftRewards(msg.sender);
150
+ require(rewards > 0, "No rewards yet");
151
+
152
+ CardsRewardFounder storage nftCards = nftFounder[msg.sender];
153
+ nftCards.currentRewards = nftFounderPoolMarker;
154
+ nftFounderPool -= rewards;
155
+
156
+ usdtERC20.transfer(msg.sender, rewards);
157
+ emit ClaimReward(msg.sender, rewards);
158
+ }
159
+
160
+ function setReceiverAddress2(address _receiver) public onlyOwner {
161
+ receiverAddress2 = _receiver;
162
+ }
163
+
164
+ function distributeFounderRewards(uint value) external onlyValhalla {
165
+ // Always add value to pool so it's tracked
166
+ nftFounderPool += value;
167
+
168
+ // Only distribute per-NFT rewards if NFTs have been minted
169
+ // This prevents division by zero and accumulates rewards for future distribution
170
+ if (cardFounder.totalMinted == 0) return;
171
+
172
+ nftFounderPoolMarker += value / cardFounder.totalMinted;
173
+ }
174
+
175
+ function safeMint(address to) public onlyOwner {
176
+ uint256 tokenId = _tokenIdCounter.current();
177
+ _tokenIdCounter.increment();
178
+ _safeMint(to, tokenId);
179
+ }
180
+
181
+ function _authorizeUpgrade(
182
+ address newImplementation
183
+ ) internal override onlyOwner {}
184
+
185
+ // The following functions are overrides required by Solidity.
186
+
187
+ function _beforeTokenTransfer(
188
+ address from,
189
+ address to,
190
+ uint256 tokenId,
191
+ uint256 batchSize
192
+ ) internal override(ERC721Upgradeable, ERC721EnumerableUpgradeable) {
193
+ super._beforeTokenTransfer(from, to, tokenId, batchSize);
194
+ }
195
+
196
+ function _burn(
197
+ uint256 tokenId
198
+ ) internal override(ERC721Upgradeable, ERC721URIStorageUpgradeable) {
199
+ super._burn(tokenId);
200
+ }
201
+
202
+ function tokenURI(
203
+ uint256 tokenId
204
+ )
205
+ public
206
+ view
207
+ override(ERC721Upgradeable, ERC721URIStorageUpgradeable)
208
+ returns (string memory)
209
+ {
210
+ return super.tokenURI(tokenId);
211
+ }
212
+
213
+ function supportsInterface(
214
+ bytes4 interfaceId
215
+ )
216
+ public
217
+ view
218
+ override(
219
+ ERC721EnumerableUpgradeable,
220
+ ERC721URIStorageUpgradeable,
221
+ ERC721Upgradeable
222
+ )
223
+ returns (bool)
224
+ {
225
+ return super.supportsInterface(interfaceId);
226
+ }
227
+
228
+ function _baseURI() internal pure override returns (string memory) {
229
+ return "https://crowdstrike.club/api/image/founder/";
230
+ }
231
+
232
+ function transferFrom(
233
+ address from,
234
+ address to,
235
+ uint256 tokenId
236
+ ) public override(ERC721Upgradeable, IERC721Upgradeable) {
237
+ super.transferFrom(from, to, tokenId);
238
+
239
+ CardsRewardFounder storage cardSender = nftFounder[from];
240
+
241
+ uint rewards = myNftRewards(from);
242
+ if (rewards > 0) {
243
+ cardSender.currentRewards = nftFounderPoolMarker;
244
+ nftFounderPool -= rewards;
245
+ usdtERC20.transfer(msg.sender, rewards);
246
+ }
247
+
248
+ require(cardSender.ownedNfts > 0, "no card left");
249
+ cardSender.ownedNfts -= 1;
250
+ CardsRewardFounder storage cardReceiver = nftFounder[to];
251
+ cardReceiver.ownedNfts += 1;
252
+ cardReceiver.currentRewards = nftFounderPoolMarker;
253
+ }
254
+ }
@@ -0,0 +1,343 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol";
5
+ import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
6
+ import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol";
7
+ import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721URIStorageUpgradeable.sol";
8
+ import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
9
+ import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
10
+ import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
11
+ import "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol";
12
+ import "@openzeppelin/contracts-upgradeable/utils/CountersUpgradeable.sol";
13
+ import "./lib/NFTGetter.sol";
14
+ import "./NFT.sol";
15
+ import "./CROWD.sol";
16
+ import "./CUSDT.sol";
17
+ import "./Network.sol";
18
+
19
+ contract NFTGenesis is
20
+ Initializable,
21
+ ERC721Upgradeable,
22
+ OwnableUpgradeable,
23
+ ERC721EnumerableUpgradeable,
24
+ ERC721URIStorageUpgradeable,
25
+ UUPSUpgradeable,
26
+ ReentrancyGuardUpgradeable
27
+ {
28
+ using CountersUpgradeable for CountersUpgradeable.Counter;
29
+ using StringsUpgradeable for uint256;
30
+
31
+ CountersUpgradeable.Counter private _tokenIdCounter;
32
+ CountersUpgradeable.Counter private _cardIdCounter;
33
+ CROWD public gnetERC20;
34
+ CUSDT public usdtERC20;
35
+ Network public valhalla;
36
+ NFT valhallaNFT;
37
+
38
+ // define token id
39
+ mapping(uint => uint) public tokenIdToCardId;
40
+ mapping(uint => CardGenesis) public cardMap;
41
+ // address -> nftType -> flagRewards
42
+ mapping(address => mapping(uint => CardsRewardGenesis)) public nftGenesis;
43
+ // nftType -> poolMarker
44
+ mapping(uint => uint) public nftGenesisPoolMarker;
45
+ mapping(address => uint) public genesisReferralRewardMap;
46
+ address public receiverAddress;
47
+ uint256 public nftGenesisPool;
48
+
49
+ // events
50
+ event BuyMultipleNFT(address indexed _from, uint[] _tokenIds);
51
+ event ClaimReward(address indexed _from, uint value);
52
+ event DistributeRewards(address indexed from, uint value);
53
+ event GenesisReferralReward(
54
+ address indexed referrer,
55
+ address indexed buyer,
56
+ uint value
57
+ );
58
+ event GenesisClaimReferralReward(address indexed referrer, uint value);
59
+ event NFTTypeAdded(
60
+ uint indexed cardId,
61
+ uint price,
62
+ uint percentage,
63
+ uint maxMinted
64
+ );
65
+ event GenesisPoolDistributed(
66
+ uint indexed typePool,
67
+ uint value,
68
+ uint newMarker
69
+ );
70
+ event ReceiverAddressUpdated(
71
+ address indexed oldReceiver,
72
+ address indexed newReceiver,
73
+ uint256 timestamp
74
+ );
75
+
76
+ /// @custom:oz-upgrades-unsafe-allow constructor
77
+ constructor() {
78
+ _disableInitializers();
79
+ }
80
+
81
+ function initialize(
82
+ CROWD _gnetERC20,
83
+ CUSDT _usdtERC20,
84
+ NFT _valhallaNFT,
85
+ Network _valhalla,
86
+ address _receiver
87
+ ) public initializer {
88
+ require(address(_gnetERC20) != address(0), "Invalid GNET address");
89
+ require(address(_usdtERC20) != address(0), "Invalid USDT address");
90
+ require(address(_valhallaNFT) != address(0), "Invalid NFT address");
91
+ require(address(_valhalla) != address(0), "Invalid Network address");
92
+ require(_receiver != address(0), "Invalid receiver address");
93
+
94
+ __ERC721_init("NFTGenesis", "NFTG");
95
+ __ERC721Enumerable_init();
96
+ __ERC721URIStorage_init();
97
+ __Ownable_init();
98
+ __UUPSUpgradeable_init();
99
+ __ReentrancyGuard_init();
100
+ gnetERC20 = _gnetERC20;
101
+ valhallaNFT = _valhallaNFT;
102
+ receiverAddress = _receiver;
103
+ usdtERC20 = _usdtERC20;
104
+ valhalla = _valhalla;
105
+ }
106
+
107
+ modifier onlyValhallaNFT() {
108
+ require(
109
+ msg.sender == address(valhallaNFT),
110
+ "Only Admin can perform action"
111
+ );
112
+ _;
113
+ }
114
+
115
+ function amountNftTypes() public view returns (uint) {
116
+ return _cardIdCounter.current();
117
+ }
118
+
119
+ function percentageByNftType(uint nftType) public view returns (uint) {
120
+ return cardMap[nftType].genesisPercentage;
121
+ }
122
+
123
+ function addNft(
124
+ uint _price,
125
+ uint _percentage,
126
+ uint _maxMinted
127
+ ) public onlyOwner {
128
+ require(_price > 0, "Price must be greater than 0");
129
+ require(_percentage > 0 && _percentage <= 100, "Invalid percentage");
130
+ require(_maxMinted > 0, "Max minted must be greater than 0");
131
+
132
+ uint _cardId = _cardIdCounter.current();
133
+ CardGenesis storage _card = cardMap[_cardId];
134
+ _card.price = _price * 10 ** usdtERC20.decimals();
135
+ _card.genesisPercentage = _percentage;
136
+ _card.totalMinted = 0;
137
+ _card.maxMinted = _maxMinted;
138
+ _cardIdCounter.increment();
139
+
140
+ emit NFTTypeAdded(_cardId, _card.price, _percentage, _maxMinted);
141
+ }
142
+
143
+ function myNftRewards(
144
+ uint cardId,
145
+ address _address
146
+ ) public view returns (uint) {
147
+ CardsRewardGenesis memory nftCards = nftGenesis[_address][cardId];
148
+ uint poolMarker = nftGenesisPoolMarker[cardId];
149
+
150
+ if (!(poolMarker > nftCards.currentRewards)) return 0;
151
+ return (poolMarker - nftCards.currentRewards) * nftCards.ownedNfts;
152
+ }
153
+
154
+ function buyMultipleNFT(uint cardId, uint amount) public nonReentrant {
155
+ CardGenesis storage _card = cardMap[cardId];
156
+ require(_card.maxMinted > _card.totalMinted + amount, "Max minted reached");
157
+
158
+ bool isRegistered;
159
+ address referrer;
160
+ (isRegistered, , , referrer, , , , ) = valhalla.accountMap(msg.sender);
161
+ require(isRegistered, "Registration required");
162
+
163
+ uint totalPrice = _card.price * amount;
164
+ uint commission = (totalPrice * 10) / 100;
165
+ uint toReceiver = totalPrice - commission;
166
+ uint rewards = myNftRewards(cardId, msg.sender);
167
+
168
+ CardsRewardGenesis storage nftCards = nftGenesis[msg.sender][cardId];
169
+ nftCards.ownedNfts += amount;
170
+ _card.totalMinted += amount;
171
+ nftCards.currentRewards = nftGenesisPoolMarker[cardId];
172
+
173
+ uint[] memory tokenIds = new uint[](amount);
174
+ for (uint i = 0; i < amount; i++) {
175
+ uint256 tokenId = _tokenIdCounter.current();
176
+ tokenIds[i] = tokenId;
177
+ tokenIdToCardId[tokenId] = cardId;
178
+ _tokenIdCounter.increment();
179
+ }
180
+
181
+ usdtERC20.transferFrom(msg.sender, address(this), totalPrice);
182
+ usdtERC20.transfer(receiverAddress, toReceiver);
183
+
184
+ if (referrer != address(0)) {
185
+ genesisReferralRewardMap[referrer] += commission;
186
+ emit GenesisReferralReward(referrer, msg.sender, commission);
187
+ } else {
188
+ usdtERC20.transfer(receiverAddress, commission);
189
+ }
190
+
191
+ for (uint i = 0; i < amount; i++) {
192
+ _safeMint(msg.sender, tokenIds[i]);
193
+ _setTokenURI(tokenIds[i], cardId.toString());
194
+ }
195
+
196
+ if (rewards > 0) _distributeReward(msg.sender, rewards);
197
+
198
+ emit BuyMultipleNFT(msg.sender, tokenIds);
199
+ }
200
+
201
+ function claimRewards(uint cardId) public nonReentrant {
202
+ uint rewards = myNftRewards(cardId, msg.sender);
203
+ require(rewards > 0, "No rewards yet");
204
+
205
+ CardsRewardGenesis storage nftCards = nftGenesis[msg.sender][cardId];
206
+ nftCards.currentRewards = nftGenesisPoolMarker[cardId];
207
+
208
+ _distributeReward(msg.sender, rewards);
209
+ }
210
+
211
+ function _distributeReward(address to, uint amount) private {
212
+ require(nftGenesisPool >= amount, "Insufficient pool balance");
213
+ nftGenesisPool -= amount;
214
+ gnetERC20.transfer(to, amount);
215
+ emit ClaimReward(to, amount);
216
+ }
217
+
218
+ function claimReferralReward() public nonReentrant {
219
+ uint reward = genesisReferralRewardMap[msg.sender];
220
+ require(reward > 0, "No referral reward to claim");
221
+
222
+ genesisReferralRewardMap[msg.sender] = 0;
223
+ usdtERC20.transfer(msg.sender, reward);
224
+
225
+ emit GenesisClaimReferralReward(msg.sender, reward);
226
+ }
227
+
228
+ function distributeGenesisRewards(
229
+ uint typePool,
230
+ uint value
231
+ ) external onlyValhallaNFT {
232
+ uint totalMinted = cardMap[typePool].totalMinted;
233
+ require(totalMinted > 0, "No NFTs minted for this type");
234
+
235
+ uint perNftReward = value / totalMinted;
236
+ nftGenesisPoolMarker[typePool] += perNftReward;
237
+ nftGenesisPool += value;
238
+
239
+ emit GenesisPoolDistributed(
240
+ typePool,
241
+ value,
242
+ nftGenesisPoolMarker[typePool]
243
+ );
244
+ }
245
+
246
+ function _baseURI() internal pure override returns (string memory) {
247
+ return "https://crowdstrike.club/api/image/genesis/";
248
+ }
249
+
250
+ function safeMint(address to) public onlyOwner {
251
+ uint256 tokenId = _tokenIdCounter.current();
252
+ _tokenIdCounter.increment();
253
+ _safeMint(to, tokenId);
254
+ }
255
+
256
+ function _authorizeUpgrade(
257
+ address newImplementation
258
+ ) internal override onlyOwner {}
259
+
260
+ // The following functions are overrides required by Solidity.
261
+
262
+ function _beforeTokenTransfer(
263
+ address from,
264
+ address to,
265
+ uint256 tokenId,
266
+ uint256 batchSize
267
+ ) internal override(ERC721Upgradeable, ERC721EnumerableUpgradeable) {
268
+ super._beforeTokenTransfer(from, to, tokenId, batchSize);
269
+ }
270
+
271
+ function _burn(
272
+ uint256 tokenId
273
+ ) internal override(ERC721Upgradeable, ERC721URIStorageUpgradeable) {
274
+ super._burn(tokenId);
275
+ }
276
+
277
+ function tokenURI(
278
+ uint256 tokenId
279
+ )
280
+ public
281
+ view
282
+ override(ERC721Upgradeable, ERC721URIStorageUpgradeable)
283
+ returns (string memory)
284
+ {
285
+ return super.tokenURI(tokenId);
286
+ }
287
+
288
+ function transferFrom(
289
+ address from,
290
+ address to,
291
+ uint256 tokenId
292
+ ) public override(ERC721Upgradeable, IERC721Upgradeable) nonReentrant {
293
+ // Get card info and calculate rewards before any state changes
294
+ uint cardId = tokenIdToCardId[tokenId];
295
+ CardsRewardGenesis storage cardSender = nftGenesis[from][cardId];
296
+ uint rewards = myNftRewards(cardId, from);
297
+
298
+ // Update state for sender
299
+ if (rewards > 0) {
300
+ cardSender.currentRewards = nftGenesisPoolMarker[cardId];
301
+ nftGenesisPool -= rewards;
302
+ }
303
+
304
+ require(cardSender.ownedNfts > 0, "no card left");
305
+ cardSender.ownedNfts -= 1;
306
+
307
+ // Update state for receiver
308
+ CardsRewardGenesis storage cardReceiver = nftGenesis[to][cardId];
309
+ cardReceiver.ownedNfts += 1;
310
+ cardReceiver.currentRewards = nftGenesisPoolMarker[cardId];
311
+
312
+ // External calls last
313
+ if (rewards > 0) {
314
+ gnetERC20.transfer(from, rewards); // Send to 'from', not msg.sender
315
+ }
316
+
317
+ super.transferFrom(from, to, tokenId);
318
+ }
319
+
320
+ function supportsInterface(
321
+ bytes4 interfaceId
322
+ )
323
+ public
324
+ view
325
+ override(
326
+ ERC721EnumerableUpgradeable,
327
+ ERC721URIStorageUpgradeable,
328
+ ERC721Upgradeable
329
+ )
330
+ returns (bool)
331
+ {
332
+ return super.supportsInterface(interfaceId);
333
+ }
334
+
335
+ function setReceiverAddress(address _receiver) public onlyOwner {
336
+ require(_receiver != address(0), "Receiver cannot be zero address");
337
+
338
+ address oldReceiver = receiverAddress;
339
+ receiverAddress = _receiver;
340
+
341
+ emit ReceiverAddressUpdated(oldReceiver, _receiver, block.timestamp);
342
+ }
343
+ }