@rarible/external-contracts 3.11.4

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 (439) hide show
  1. package/LICENSE.md +201 -0
  2. package/README.md +144 -0
  3. package/contracts/base/ERC1155Base.sol +282 -0
  4. package/contracts/base/ERC1155DelayedReveal.sol +117 -0
  5. package/contracts/base/ERC1155Drop.sol +368 -0
  6. package/contracts/base/ERC1155LazyMint.sol +286 -0
  7. package/contracts/base/ERC1155SignatureMint.sol +132 -0
  8. package/contracts/base/ERC20Base.sol +111 -0
  9. package/contracts/base/ERC20Drop.sol +157 -0
  10. package/contracts/base/ERC20DropVote.sol +135 -0
  11. package/contracts/base/ERC20SignatureMint.sol +100 -0
  12. package/contracts/base/ERC20SignatureMintVote.sol +107 -0
  13. package/contracts/base/ERC20Vote.sol +111 -0
  14. package/contracts/base/ERC721Base.sol +210 -0
  15. package/contracts/base/ERC721DelayedReveal.sol +118 -0
  16. package/contracts/base/ERC721Drop.sol +312 -0
  17. package/contracts/base/ERC721LazyMint.sol +219 -0
  18. package/contracts/base/ERC721Multiwrap.sol +262 -0
  19. package/contracts/base/ERC721SignatureMint.sol +120 -0
  20. package/contracts/base/Staking1155Base.sol +189 -0
  21. package/contracts/base/Staking20Base.sol +179 -0
  22. package/contracts/base/Staking721Base.sol +186 -0
  23. package/contracts/eip/ERC1155.sol +294 -0
  24. package/contracts/eip/ERC1271.sol +18 -0
  25. package/contracts/eip/ERC165.sol +29 -0
  26. package/contracts/eip/ERC721A.sol +580 -0
  27. package/contracts/eip/ERC721AUpgradeable.sol +625 -0
  28. package/contracts/eip/ERC721AVirtualApprove.sol +582 -0
  29. package/contracts/eip/ERC721AVirtualApproveUpgradeable.sol +598 -0
  30. package/contracts/eip/interface/IERC1155.sol +132 -0
  31. package/contracts/eip/interface/IERC1155Enumerable.sol +11 -0
  32. package/contracts/eip/interface/IERC1155Metadata.sol +15 -0
  33. package/contracts/eip/interface/IERC1155Receiver.sol +58 -0
  34. package/contracts/eip/interface/IERC1155Supply.sol +11 -0
  35. package/contracts/eip/interface/IERC165.sol +25 -0
  36. package/contracts/eip/interface/IERC20.sol +24 -0
  37. package/contracts/eip/interface/IERC20Metadata.sol +14 -0
  38. package/contracts/eip/interface/IERC20Permit.sol +60 -0
  39. package/contracts/eip/interface/IERC2981.sol +23 -0
  40. package/contracts/eip/interface/IERC4906.sol +17 -0
  41. package/contracts/eip/interface/IERC721.sol +128 -0
  42. package/contracts/eip/interface/IERC721A.sol +109 -0
  43. package/contracts/eip/interface/IERC721Enumerable.sol +24 -0
  44. package/contracts/eip/interface/IERC721Metadata.sol +20 -0
  45. package/contracts/eip/interface/IERC721Receiver.sol +27 -0
  46. package/contracts/eip/interface/IERC721Supply.sol +13 -0
  47. package/contracts/eip/queryable/ERC721AQueryable.sol +168 -0
  48. package/contracts/eip/queryable/ERC721AQueryableUpgradeable.sol +193 -0
  49. package/contracts/eip/queryable/ERC721AStorage.sol +57 -0
  50. package/contracts/eip/queryable/ERC721AUpgradeable.sol +1075 -0
  51. package/contracts/eip/queryable/ERC721A__Initializable.sol +75 -0
  52. package/contracts/eip/queryable/ERC721A__InitializableStorage.sol +29 -0
  53. package/contracts/eip/queryable/IERC721AQueryable.sol +69 -0
  54. package/contracts/eip/queryable/IERC721AQueryableUpgradeable.sol +69 -0
  55. package/contracts/eip/queryable/IERC721AUpgradeable.sol +269 -0
  56. package/contracts/extension/AppURI.sol +37 -0
  57. package/contracts/extension/BatchMintMetadata.sol +143 -0
  58. package/contracts/extension/BurnToClaim.sol +60 -0
  59. package/contracts/extension/ContractMetadata.sol +48 -0
  60. package/contracts/extension/DelayedReveal.sol +111 -0
  61. package/contracts/extension/Drop.sol +284 -0
  62. package/contracts/extension/Drop1155.sol +300 -0
  63. package/contracts/extension/DropSinglePhase.sol +237 -0
  64. package/contracts/extension/DropSinglePhase1155.sol +215 -0
  65. package/contracts/extension/Initializable.sol +136 -0
  66. package/contracts/extension/LazyMint.sol +56 -0
  67. package/contracts/extension/LazyMintWithTier.sol +112 -0
  68. package/contracts/extension/Multicall.sol +40 -0
  69. package/contracts/extension/NFTMetadata.sol +58 -0
  70. package/contracts/extension/OperatorFilterToggle.sol +22 -0
  71. package/contracts/extension/OperatorFilterer.sol +73 -0
  72. package/contracts/extension/OperatorFiltererUpgradeable.sol +69 -0
  73. package/contracts/extension/Ownable.sol +58 -0
  74. package/contracts/extension/Permissions.sol +159 -0
  75. package/contracts/extension/PermissionsEnumerable.sol +111 -0
  76. package/contracts/extension/PlatformFee.sol +117 -0
  77. package/contracts/extension/PrimarySale.sol +57 -0
  78. package/contracts/extension/Proxy.sol +84 -0
  79. package/contracts/extension/ProxyForUpgradeable.sol +32 -0
  80. package/contracts/extension/Royalty.sol +134 -0
  81. package/contracts/extension/SeaportEIP1271.sol +88 -0
  82. package/contracts/extension/SeaportOrderParser.sol +550 -0
  83. package/contracts/extension/SharedMetadata.sol +63 -0
  84. package/contracts/extension/SignatureAction.sol +67 -0
  85. package/contracts/extension/SignatureActionUpgradeable.sol +71 -0
  86. package/contracts/extension/SignatureMintERC1155.sol +78 -0
  87. package/contracts/extension/SignatureMintERC1155Upgradeable.sol +84 -0
  88. package/contracts/extension/SignatureMintERC20.sol +70 -0
  89. package/contracts/extension/SignatureMintERC20Upgradeable.sol +77 -0
  90. package/contracts/extension/SignatureMintERC721.sol +96 -0
  91. package/contracts/extension/SignatureMintERC721Upgradeable.sol +102 -0
  92. package/contracts/extension/SoulboundERC721A.sol +51 -0
  93. package/contracts/extension/Staking1155.sol +516 -0
  94. package/contracts/extension/Staking1155Upgradeable.sol +516 -0
  95. package/contracts/extension/Staking20.sol +376 -0
  96. package/contracts/extension/Staking20Upgradeable.sol +383 -0
  97. package/contracts/extension/Staking721.sol +362 -0
  98. package/contracts/extension/Staking721Upgradeable.sol +364 -0
  99. package/contracts/extension/TokenBundle.sol +130 -0
  100. package/contracts/extension/TokenStore.sol +97 -0
  101. package/contracts/extension/Upgradeable.sol +95 -0
  102. package/contracts/extension/interface/IAccountPermissions.sol +114 -0
  103. package/contracts/extension/interface/IAppURI.sol +24 -0
  104. package/contracts/extension/interface/IBurnToClaim.sol +43 -0
  105. package/contracts/extension/interface/IBurnableERC1155.sol +16 -0
  106. package/contracts/extension/interface/IBurnableERC20.sol +26 -0
  107. package/contracts/extension/interface/IBurnableERC721.sol +15 -0
  108. package/contracts/extension/interface/IClaimCondition.sol +48 -0
  109. package/contracts/extension/interface/IClaimConditionMultiPhase.sol +39 -0
  110. package/contracts/extension/interface/IClaimConditionsSinglePhase.sol +31 -0
  111. package/contracts/extension/interface/IClaimableERC1155.sol +39 -0
  112. package/contracts/extension/interface/IClaimableERC721.sol +37 -0
  113. package/contracts/extension/interface/IContractFactory.sol +20 -0
  114. package/contracts/extension/interface/IContractMetadata.sol +25 -0
  115. package/contracts/extension/interface/IDelayedReveal.sol +33 -0
  116. package/contracts/extension/interface/IDelayedRevealDeprecated.sol +38 -0
  117. package/contracts/extension/interface/IDrop.sol +72 -0
  118. package/contracts/extension/interface/IDrop1155.sol +75 -0
  119. package/contracts/extension/interface/IDropSinglePhase.sol +70 -0
  120. package/contracts/extension/interface/IDropSinglePhase1155.sol +74 -0
  121. package/contracts/extension/interface/IERC2771Context.sol +6 -0
  122. package/contracts/extension/interface/ILazyMint.sol +33 -0
  123. package/contracts/extension/interface/ILazyMintWithTier.sol +43 -0
  124. package/contracts/extension/interface/IMintableERC1155.sol +24 -0
  125. package/contracts/extension/interface/IMintableERC20.sol +20 -0
  126. package/contracts/extension/interface/IMintableERC721.sol +19 -0
  127. package/contracts/extension/interface/IMulticall.sol +16 -0
  128. package/contracts/extension/interface/INFTMetadata.sol +17 -0
  129. package/contracts/extension/interface/IOperatorFilterRegistry.sol +54 -0
  130. package/contracts/extension/interface/IOperatorFilterToggle.sol +12 -0
  131. package/contracts/extension/interface/IOwnable.sol +21 -0
  132. package/contracts/extension/interface/IPermissions.sol +88 -0
  133. package/contracts/extension/interface/IPermissionsEnumerable.sol +31 -0
  134. package/contracts/extension/interface/IPlatformFee.sol +33 -0
  135. package/contracts/extension/interface/IPrimarySale.sol +21 -0
  136. package/contracts/extension/interface/IRoyalty.sol +39 -0
  137. package/contracts/extension/interface/IRoyaltyEngineV1.sol +42 -0
  138. package/contracts/extension/interface/IRoyaltyPayments.sol +37 -0
  139. package/contracts/extension/interface/IRulesEngine.sol +58 -0
  140. package/contracts/extension/interface/ISharedMetadata.sol +30 -0
  141. package/contracts/extension/interface/ISharedMetadataBatch.sol +57 -0
  142. package/contracts/extension/interface/ISignatureAction.sol +44 -0
  143. package/contracts/extension/interface/ISignatureMintERC1155.sol +77 -0
  144. package/contracts/extension/interface/ISignatureMintERC20.sol +64 -0
  145. package/contracts/extension/interface/ISignatureMintERC721.sol +75 -0
  146. package/contracts/extension/interface/IStaking1155.sol +110 -0
  147. package/contracts/extension/interface/IStaking20.sol +97 -0
  148. package/contracts/extension/interface/IStaking721.sol +83 -0
  149. package/contracts/extension/interface/ITokenBundle.sol +52 -0
  150. package/contracts/extension/interface/plugin/IContext.sol +10 -0
  151. package/contracts/extension/interface/plugin/IPluginMap.sol +31 -0
  152. package/contracts/extension/interface/plugin/IRouter.sol +30 -0
  153. package/contracts/extension/plugin/ContractMetadataLogic.sol +52 -0
  154. package/contracts/extension/plugin/ContractMetadataStorage.sol +25 -0
  155. package/contracts/extension/plugin/ERC2771ContextConsumer.sol +34 -0
  156. package/contracts/extension/plugin/ERC2771ContextLogic.sol +43 -0
  157. package/contracts/extension/plugin/ERC2771ContextStorage.sol +22 -0
  158. package/contracts/extension/plugin/ERC2771ContextUpgradeableLogic.sol +47 -0
  159. package/contracts/extension/plugin/ERC2771ContextUpgradeableStorage.sol +20 -0
  160. package/contracts/extension/plugin/PermissionsEnumerableLogic.sol +101 -0
  161. package/contracts/extension/plugin/PermissionsEnumerableStorage.sol +41 -0
  162. package/contracts/extension/plugin/PermissionsLogic.sol +182 -0
  163. package/contracts/extension/plugin/PermissionsStorage.sol +28 -0
  164. package/contracts/extension/plugin/PlatformFeeLogic.sol +56 -0
  165. package/contracts/extension/plugin/PlatformFeeStorage.sol +28 -0
  166. package/contracts/extension/plugin/PluginMap.sol +81 -0
  167. package/contracts/extension/plugin/ReentrancyGuardLogic.sol +69 -0
  168. package/contracts/extension/plugin/ReentrancyGuardStorage.sol +22 -0
  169. package/contracts/extension/plugin/Router.sol +270 -0
  170. package/contracts/extension/plugin/RouterImmutable.sol +26 -0
  171. package/contracts/extension/plugin/RoyaltyPayments.sol +121 -0
  172. package/contracts/extension/upgradeable/AccountPermissions.sol +253 -0
  173. package/contracts/extension/upgradeable/BatchMintMetadata.sol +144 -0
  174. package/contracts/extension/upgradeable/BurnToClaim.sol +83 -0
  175. package/contracts/extension/upgradeable/ContractMetadata.sol +73 -0
  176. package/contracts/extension/upgradeable/DelayedReveal.sol +126 -0
  177. package/contracts/extension/upgradeable/Drop.sol +278 -0
  178. package/contracts/extension/upgradeable/ERC2771Context.sol +64 -0
  179. package/contracts/extension/upgradeable/ERC2771ContextConsumer.sol +32 -0
  180. package/contracts/extension/upgradeable/ERC2771ContextUpgradeable.sol +72 -0
  181. package/contracts/extension/upgradeable/Initializable.sol +110 -0
  182. package/contracts/extension/upgradeable/LazyMint.sol +77 -0
  183. package/contracts/extension/upgradeable/OperatorFilterToggle.sol +47 -0
  184. package/contracts/extension/upgradeable/OperatorFiltererUpgradeable.sol +58 -0
  185. package/contracts/extension/upgradeable/Ownable.sol +75 -0
  186. package/contracts/extension/upgradeable/Permissions.sol +197 -0
  187. package/contracts/extension/upgradeable/PermissionsEnumerable.sol +134 -0
  188. package/contracts/extension/upgradeable/PlatformFee.sol +131 -0
  189. package/contracts/extension/upgradeable/PrimarySale.sol +69 -0
  190. package/contracts/extension/upgradeable/ReentrancyGuard.sol +53 -0
  191. package/contracts/extension/upgradeable/Royalty.sol +144 -0
  192. package/contracts/extension/upgradeable/RoyaltyPayments.sol +121 -0
  193. package/contracts/extension/upgradeable/RulesEngine.sol +163 -0
  194. package/contracts/extension/upgradeable/SharedMetadataBatch.sol +98 -0
  195. package/contracts/extension/upgradeable/impl/ContractMetadataImpl.sol +34 -0
  196. package/contracts/extension/upgradeable/impl/MetaTx.sol +8 -0
  197. package/contracts/extension/upgradeable/impl/PermissionsEnumerableImpl.sol +28 -0
  198. package/contracts/extension/upgradeable/impl/PlatformFeeImpl.sol +34 -0
  199. package/contracts/extension/upgradeable/init/ContractMetadataInit.sol +17 -0
  200. package/contracts/extension/upgradeable/init/ERC2771ContextInit.sol +19 -0
  201. package/contracts/extension/upgradeable/init/ERC721AInit.sol +23 -0
  202. package/contracts/extension/upgradeable/init/ERC721AQueryableInit.sol +21 -0
  203. package/contracts/extension/upgradeable/init/OwnableInit.sol +18 -0
  204. package/contracts/extension/upgradeable/init/PermissionsEnumerableInit.sol +23 -0
  205. package/contracts/extension/upgradeable/init/PermissionsInit.sol +27 -0
  206. package/contracts/extension/upgradeable/init/PlatformFeeInit.sol +25 -0
  207. package/contracts/extension/upgradeable/init/PrimarySaleInit.sol +19 -0
  208. package/contracts/extension/upgradeable/init/ReentrancyGuardInit.sol +18 -0
  209. package/contracts/extension/upgradeable/init/RoyaltyInit.sol +22 -0
  210. package/contracts/external-deps/chainlink/LinkTokenInterface.sol +28 -0
  211. package/contracts/external-deps/chainlink/VRFV2WrapperConsumerBase.sol +83 -0
  212. package/contracts/external-deps/chainlink/VRFV2WrapperInterface.sol +35 -0
  213. package/contracts/external-deps/openzeppelin/ERC1155PresetUpgradeable.sol +160 -0
  214. package/contracts/external-deps/openzeppelin/cryptography/EIP712ChainlessDomain.sol +100 -0
  215. package/contracts/external-deps/openzeppelin/finance/PaymentSplitterUpgradeable.sol +231 -0
  216. package/contracts/external-deps/openzeppelin/governance/utils/IVotes.sol +54 -0
  217. package/contracts/external-deps/openzeppelin/metatx/ERC2771Context.sol +44 -0
  218. package/contracts/external-deps/openzeppelin/metatx/ERC2771ContextUpgradeable.sol +50 -0
  219. package/contracts/external-deps/openzeppelin/metatx/MinimalForwarderEOAOnly.sol +67 -0
  220. package/contracts/external-deps/openzeppelin/proxy/Clones.sol +88 -0
  221. package/contracts/external-deps/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol +32 -0
  222. package/contracts/external-deps/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol +173 -0
  223. package/contracts/external-deps/openzeppelin/proxy/IERC1822Proxiable.sol +20 -0
  224. package/contracts/external-deps/openzeppelin/proxy/Proxy.sol +86 -0
  225. package/contracts/external-deps/openzeppelin/proxy/beacon/IBeacon.sol +16 -0
  226. package/contracts/external-deps/openzeppelin/proxy/utils/Initializable.sol +138 -0
  227. package/contracts/external-deps/openzeppelin/security/ReentrancyGuard.sol +32 -0
  228. package/contracts/external-deps/openzeppelin/security/ReentrancyGuardUpgradeable.sol +44 -0
  229. package/contracts/external-deps/openzeppelin/token/ERC1155/IERC1155Receiver.sol +58 -0
  230. package/contracts/external-deps/openzeppelin/token/ERC1155/utils/ERC1155Holder.sol +36 -0
  231. package/contracts/external-deps/openzeppelin/token/ERC1155/utils/ERC1155Receiver.sol +19 -0
  232. package/contracts/external-deps/openzeppelin/token/ERC20/ERC20.sol +359 -0
  233. package/contracts/external-deps/openzeppelin/token/ERC20/extensions/ERC20Permit.sol +117 -0
  234. package/contracts/external-deps/openzeppelin/token/ERC20/extensions/ERC20Votes.sol +246 -0
  235. package/contracts/external-deps/openzeppelin/token/ERC20/utils/SafeERC20.sol +78 -0
  236. package/contracts/external-deps/openzeppelin/token/ERC721/IERC721Receiver.sol +27 -0
  237. package/contracts/external-deps/openzeppelin/token/ERC721/utils/ERC721Holder.sol +23 -0
  238. package/contracts/external-deps/openzeppelin/utils/Base64.sol +92 -0
  239. package/contracts/external-deps/openzeppelin/utils/Context.sol +24 -0
  240. package/contracts/external-deps/openzeppelin/utils/Counters.sol +43 -0
  241. package/contracts/external-deps/openzeppelin/utils/Create2.sol +58 -0
  242. package/contracts/external-deps/openzeppelin/utils/ERC1155/ERC1155Holder.sol +36 -0
  243. package/contracts/external-deps/openzeppelin/utils/ERC1155/ERC1155Receiver.sol +19 -0
  244. package/contracts/external-deps/openzeppelin/utils/ERC721/ERC721Holder.sol +23 -0
  245. package/contracts/external-deps/openzeppelin/utils/EnumerableSet.sol +367 -0
  246. package/contracts/external-deps/openzeppelin/utils/cryptography/ECDSA.sol +217 -0
  247. package/contracts/external-deps/openzeppelin/utils/cryptography/EIP712.sol +104 -0
  248. package/contracts/external-deps/openzeppelin/utils/math/Math.sol +43 -0
  249. package/contracts/external-deps/openzeppelin/utils/math/SafeCast.sol +241 -0
  250. package/contracts/external-deps/openzeppelin/utils/math/SafeMath.sol +215 -0
  251. package/contracts/external-deps/openzeppelin/utils/structs/EnumerableSet.sol +367 -0
  252. package/contracts/infra/ContractPublisher.sol +268 -0
  253. package/contracts/infra/TWFactory.sol +140 -0
  254. package/contracts/infra/TWFee.sol +162 -0
  255. package/contracts/infra/TWMinimalFactory.sol +47 -0
  256. package/contracts/infra/TWMultichainRegistry.sol +116 -0
  257. package/contracts/infra/TWProxy.sol +42 -0
  258. package/contracts/infra/TWRegistry.sol +70 -0
  259. package/contracts/infra/TWStatelessFactory.sol +47 -0
  260. package/contracts/infra/forwarder/Forwarder.sol +76 -0
  261. package/contracts/infra/forwarder/ForwarderChainlessDomain.sol +90 -0
  262. package/contracts/infra/forwarder/ForwarderConsumer.sol +25 -0
  263. package/contracts/infra/forwarder/ForwarderEOAOnly.sol +23 -0
  264. package/contracts/infra/interface/IContractDeployer.sol +54 -0
  265. package/contracts/infra/interface/IContractPublisher.sol +128 -0
  266. package/contracts/infra/interface/ITWFee.sol +6 -0
  267. package/contracts/infra/interface/ITWMultichainRegistry.sol +28 -0
  268. package/contracts/infra/interface/ITWRegistry.sol +24 -0
  269. package/contracts/infra/interface/IThirdwebContract.sol +19 -0
  270. package/contracts/infra/interface/IWETH.sol +10 -0
  271. package/contracts/infra/registry/entrypoint/TWMultichainRegistryRouter.sol +61 -0
  272. package/contracts/infra/registry/registry-extension/TWMultichainRegistryLogic.sol +120 -0
  273. package/contracts/infra/registry/registry-extension/TWMultichainRegistryStorage.sol +30 -0
  274. package/contracts/legacy-contracts/extension/BatchMintMetadata_V1.sol +89 -0
  275. package/contracts/legacy-contracts/extension/DropSinglePhase1155_V1.sol +268 -0
  276. package/contracts/legacy-contracts/extension/DropSinglePhase_V1.sol +252 -0
  277. package/contracts/legacy-contracts/extension/LazyMintWithTier_V1.sol +112 -0
  278. package/contracts/legacy-contracts/extension/LazyMint_V1.sol +52 -0
  279. package/contracts/legacy-contracts/extension/PlatformFee_V1.sol +69 -0
  280. package/contracts/legacy-contracts/extension/PrimarySale_V1.sol +53 -0
  281. package/contracts/legacy-contracts/extension/interface/IClaimCondition_V1.sol +54 -0
  282. package/contracts/legacy-contracts/extension/interface/IDropSinglePhase1155_V1.sol +58 -0
  283. package/contracts/legacy-contracts/extension/interface/IDropSinglePhase_V1.sol +54 -0
  284. package/contracts/legacy-contracts/extension/interface/IPlatformFee_V1.sol +21 -0
  285. package/contracts/legacy-contracts/extension/interface/IPrimarySale_V1.sol +21 -0
  286. package/contracts/legacy-contracts/interface/ISignatureMintERC721_V1.sol +18 -0
  287. package/contracts/legacy-contracts/interface/drop/IDropClaimCondition_V2.sol +82 -0
  288. package/contracts/legacy-contracts/interface/drop/IDropERC1155_V2.sol +96 -0
  289. package/contracts/legacy-contracts/interface/drop/IDropERC20_V2.sol +73 -0
  290. package/contracts/legacy-contracts/interface/drop/IDropERC721_V3.sol +98 -0
  291. package/contracts/legacy-contracts/pre-builts/DropERC1155_V2.sol +731 -0
  292. package/contracts/legacy-contracts/pre-builts/DropERC20_V2.sol +521 -0
  293. package/contracts/legacy-contracts/pre-builts/DropERC721_V3.sol +745 -0
  294. package/contracts/legacy-contracts/pre-builts/SignatureDrop_V4.sol +360 -0
  295. package/contracts/legacy-contracts/smart-wallet/interface/IAccountPermissions_V1.sol +115 -0
  296. package/contracts/lib/Address.sol +244 -0
  297. package/contracts/lib/BitMaps.sol +52 -0
  298. package/contracts/lib/BytesLib.sol +18 -0
  299. package/contracts/lib/CurrencyTransferLib.sol +96 -0
  300. package/contracts/lib/FeeType.sol +10 -0
  301. package/contracts/lib/MerkleProof.sol +40 -0
  302. package/contracts/lib/NFTMetadataRenderer.sol +91 -0
  303. package/contracts/lib/StorageSlot.sol +54 -0
  304. package/contracts/lib/StringSet.sol +107 -0
  305. package/contracts/lib/Strings.sol +195 -0
  306. package/contracts/prebuilts/account/dynamic/DynamicAccount.sol +48 -0
  307. package/contracts/prebuilts/account/dynamic/DynamicAccountFactory.sol +61 -0
  308. package/contracts/prebuilts/account/interfaces/IAccount.sol +39 -0
  309. package/contracts/prebuilts/account/interfaces/IAccountCore.sol +11 -0
  310. package/contracts/prebuilts/account/interfaces/IAccountExecute.sol +17 -0
  311. package/contracts/prebuilts/account/interfaces/IAccountFactory.sol +16 -0
  312. package/contracts/prebuilts/account/interfaces/IAccountFactoryCore.sol +40 -0
  313. package/contracts/prebuilts/account/interfaces/IAggregator.sol +41 -0
  314. package/contracts/prebuilts/account/interfaces/IEntryPoint.sol +204 -0
  315. package/contracts/prebuilts/account/interfaces/INonceManager.sol +25 -0
  316. package/contracts/prebuilts/account/interfaces/IOracle.sol +10 -0
  317. package/contracts/prebuilts/account/interfaces/IPaymaster.sol +63 -0
  318. package/contracts/prebuilts/account/interfaces/IStakeManager.sol +94 -0
  319. package/contracts/prebuilts/account/interfaces/PackedUserOperation.sol +28 -0
  320. package/contracts/prebuilts/account/managed/ManagedAccount.sol +33 -0
  321. package/contracts/prebuilts/account/managed/ManagedAccountFactory.sol +68 -0
  322. package/contracts/prebuilts/account/non-upgradeable/Account.sol +169 -0
  323. package/contracts/prebuilts/account/non-upgradeable/AccountFactory.sol +54 -0
  324. package/contracts/prebuilts/account/token-bound-account/TokenBoundAccount.sol +252 -0
  325. package/contracts/prebuilts/account/token-bound-account/erc6551-utils/ERC6551AccountLib.sol +44 -0
  326. package/contracts/prebuilts/account/token-bound-account/erc6551-utils/ERC6551BytecodeLib.sol +20 -0
  327. package/contracts/prebuilts/account/token-bound-account/erc6551-utils/IERC6551Account.sol +51 -0
  328. package/contracts/prebuilts/account/token-paymaster/BasePaymaster.sol +151 -0
  329. package/contracts/prebuilts/account/token-paymaster/TokenPaymaster.sol +212 -0
  330. package/contracts/prebuilts/account/utils/AccountCore.sol +245 -0
  331. package/contracts/prebuilts/account/utils/AccountCoreStorage.sol +21 -0
  332. package/contracts/prebuilts/account/utils/AccountExtension.sol +172 -0
  333. package/contracts/prebuilts/account/utils/AccountSeaportBulkSigSupport.sol +40 -0
  334. package/contracts/prebuilts/account/utils/BaseAccount.sol +106 -0
  335. package/contracts/prebuilts/account/utils/BaseAccountFactory.sol +168 -0
  336. package/contracts/prebuilts/account/utils/EntryPoint.sol +725 -0
  337. package/contracts/prebuilts/account/utils/Exec.sol +56 -0
  338. package/contracts/prebuilts/account/utils/Helpers.sol +88 -0
  339. package/contracts/prebuilts/account/utils/NonceManager.sol +39 -0
  340. package/contracts/prebuilts/account/utils/OracleHelper.sol +154 -0
  341. package/contracts/prebuilts/account/utils/SenderCreator.sol +28 -0
  342. package/contracts/prebuilts/account/utils/StakeManager.sol +126 -0
  343. package/contracts/prebuilts/account/utils/TokenCallbackHandler.sol +55 -0
  344. package/contracts/prebuilts/account/utils/UniswapHelper.sol +119 -0
  345. package/contracts/prebuilts/account/utils/UserOperationLib.sol +127 -0
  346. package/contracts/prebuilts/airdrop/Airdrop.sol +616 -0
  347. package/contracts/prebuilts/drop/DropERC1155.sol +388 -0
  348. package/contracts/prebuilts/drop/DropERC20.sol +262 -0
  349. package/contracts/prebuilts/drop/DropERC721.sol +397 -0
  350. package/contracts/prebuilts/evolving-nfts/EvolvingNFT.sol +101 -0
  351. package/contracts/prebuilts/evolving-nfts/EvolvingNFTLogic.sol +251 -0
  352. package/contracts/prebuilts/evolving-nfts/extension/RulesEngineExtension.sol +26 -0
  353. package/contracts/prebuilts/interface/ILoyaltyCard.sol +27 -0
  354. package/contracts/prebuilts/interface/ILoyaltyPoints.sol +24 -0
  355. package/contracts/prebuilts/interface/IMultiwrap.sol +49 -0
  356. package/contracts/prebuilts/interface/IPack.sol +69 -0
  357. package/contracts/prebuilts/interface/IPackVRFDirect.sol +85 -0
  358. package/contracts/prebuilts/interface/airdrop/IAirdropERC1155.sol +45 -0
  359. package/contracts/prebuilts/interface/airdrop/IAirdropERC1155Claimable.sol +40 -0
  360. package/contracts/prebuilts/interface/airdrop/IAirdropERC20.sol +46 -0
  361. package/contracts/prebuilts/interface/airdrop/IAirdropERC20Claimable.sol +33 -0
  362. package/contracts/prebuilts/interface/airdrop/IAirdropERC721.sol +42 -0
  363. package/contracts/prebuilts/interface/airdrop/IAirdropERC721Claimable.sol +33 -0
  364. package/contracts/prebuilts/interface/drop/IDropClaimCondition.sol +82 -0
  365. package/contracts/prebuilts/interface/drop/IDropERC1155.sol +92 -0
  366. package/contracts/prebuilts/interface/drop/IDropERC20.sol +68 -0
  367. package/contracts/prebuilts/interface/drop/IDropERC721.sol +94 -0
  368. package/contracts/prebuilts/interface/marketplace/IMarketplace.sol +329 -0
  369. package/contracts/prebuilts/interface/staking/IEditionStake.sol +45 -0
  370. package/contracts/prebuilts/interface/staking/INFTStake.sol +45 -0
  371. package/contracts/prebuilts/interface/staking/ITokenStake.sol +46 -0
  372. package/contracts/prebuilts/interface/token/ITokenERC1155.sol +84 -0
  373. package/contracts/prebuilts/interface/token/ITokenERC20.sol +68 -0
  374. package/contracts/prebuilts/interface/token/ITokenERC721.sol +77 -0
  375. package/contracts/prebuilts/loyalty/LoyaltyCard.sol +339 -0
  376. package/contracts/prebuilts/marketplace/IMarketplace.sol +512 -0
  377. package/contracts/prebuilts/marketplace/direct-listings/DirectListingsLogic.sol +579 -0
  378. package/contracts/prebuilts/marketplace/direct-listings/DirectListingsStorage.sol +30 -0
  379. package/contracts/prebuilts/marketplace/english-auctions/EnglishAuctionsLogic.sol +546 -0
  380. package/contracts/prebuilts/marketplace/english-auctions/EnglishAuctionsStorage.sol +30 -0
  381. package/contracts/prebuilts/marketplace/entrypoint/MarketplaceV3.sol +184 -0
  382. package/contracts/prebuilts/marketplace/offers/OffersLogic.sol +358 -0
  383. package/contracts/prebuilts/marketplace/offers/OffersStorage.sol +28 -0
  384. package/contracts/prebuilts/marketplace-legacy/Marketplace.sol +907 -0
  385. package/contracts/prebuilts/multiwrap/Multiwrap.sol +264 -0
  386. package/contracts/prebuilts/open-edition/OpenEditionERC721.sol +268 -0
  387. package/contracts/prebuilts/open-edition/OpenEditionERC721FlatFee.sol +298 -0
  388. package/contracts/prebuilts/pack/Pack.sol +463 -0
  389. package/contracts/prebuilts/pack/PackVRFDirect.sol +516 -0
  390. package/contracts/prebuilts/signature-drop/SignatureDrop.sol +371 -0
  391. package/contracts/prebuilts/split/Split.sol +182 -0
  392. package/contracts/prebuilts/staking/EditionStake.sol +211 -0
  393. package/contracts/prebuilts/staking/NFTStake.sol +201 -0
  394. package/contracts/prebuilts/staking/TokenStake.sol +197 -0
  395. package/contracts/prebuilts/tiered-drop/TieredDrop.sol +607 -0
  396. package/contracts/prebuilts/token/TokenERC1155.sol +576 -0
  397. package/contracts/prebuilts/token/TokenERC20.sol +312 -0
  398. package/contracts/prebuilts/token/TokenERC721.sol +469 -0
  399. package/contracts/prebuilts/unaudited/airdrop/AirdropERC1155.sol +154 -0
  400. package/contracts/prebuilts/unaudited/airdrop/AirdropERC1155Claimable.sol +199 -0
  401. package/contracts/prebuilts/unaudited/airdrop/AirdropERC20.sol +194 -0
  402. package/contracts/prebuilts/unaudited/airdrop/AirdropERC20Claimable.sol +180 -0
  403. package/contracts/prebuilts/unaudited/airdrop/AirdropERC721.sol +143 -0
  404. package/contracts/prebuilts/unaudited/airdrop/AirdropERC721Claimable.sol +197 -0
  405. package/contracts/prebuilts/unaudited/burn-to-claim-drop/BurnToClaimDropERC721.sol +137 -0
  406. package/contracts/prebuilts/unaudited/burn-to-claim-drop/extension/BurnToClaimDrop721Logic.sol +362 -0
  407. package/contracts/prebuilts/unaudited/burn-to-claim-drop/extension/BurnToClaimDrop721Storage.sol +21 -0
  408. package/contracts/prebuilts/unaudited/contract-builder/CoreRouter.sol +60 -0
  409. package/contracts/prebuilts/unaudited/contract-builder/extension/PermissionOverride.sol +52 -0
  410. package/contracts/prebuilts/unaudited/loyalty/LoyaltyPoints.sol +249 -0
  411. package/contracts/prebuilts/vote/VoteERC20.sol +167 -0
  412. package/js/DropERC1155.d.ts +1198 -0
  413. package/js/DropERC1155.js +2 -0
  414. package/js/DropERC1155.js.map +1 -0
  415. package/js/DropERC721.d.ts +1247 -0
  416. package/js/DropERC721.js +2 -0
  417. package/js/DropERC721.js.map +1 -0
  418. package/js/OpenEditionERC721FlatFee.d.ts +1207 -0
  419. package/js/OpenEditionERC721FlatFee.js +2 -0
  420. package/js/OpenEditionERC721FlatFee.js.map +1 -0
  421. package/js/common.d.ts +22 -0
  422. package/js/common.js +2 -0
  423. package/js/common.js.map +1 -0
  424. package/js/factories/DropERC1155__factory.d.ts +1751 -0
  425. package/js/factories/DropERC1155__factory.js +2279 -0
  426. package/js/factories/DropERC1155__factory.js.map +1 -0
  427. package/js/factories/DropERC721__factory.d.ts +1826 -0
  428. package/js/factories/DropERC721__factory.js +2380 -0
  429. package/js/factories/DropERC721__factory.js.map +1 -0
  430. package/js/factories/OpenEditionERC721FlatFee__factory.d.ts +1707 -0
  431. package/js/factories/OpenEditionERC721FlatFee__factory.js +2219 -0
  432. package/js/factories/OpenEditionERC721FlatFee__factory.js.map +1 -0
  433. package/js/factories/index.d.ts +1 -0
  434. package/js/factories/index.js +5 -0
  435. package/js/factories/index.js.map +1 -0
  436. package/js/index.d.ts +3 -0
  437. package/js/index.js +3 -0
  438. package/js/index.js.map +1 -0
  439. package/package.json +74 -0
@@ -0,0 +1,397 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.11;
3
+
4
+ /// @author rarible
5
+
6
+ // $$$$$$$\ $$\ $$\ $$\
7
+ // $$ __$$\ \__|$$ | $$ |
8
+ // $$ | $$ | $$$$$$\ $$$$$$\ $$\ $$$$$$$\ $$ | $$$$$$\
9
+ // $$$$$$$ | \____$$\ $$ __$$\ $$ |$$ __$$\ $$ |$$ __$$\
10
+ // $$ __$$< $$$$$$$ |$$ | \__|$$ |$$ | $$ |$$ |$$$$$$$$ |
11
+ // $$ | $$ |$$ __$$ |$$ | $$ |$$ | $$ |$$ |$$ ____|
12
+ // $$ | $$ |\$$$$$$$ |$$ | $$ |$$$$$$$ |$$ |\$$$$$$$\
13
+ // \__| \__| \_______|\__| \__|\_______/ \__| \_______|
14
+
15
+ // ========== External imports ==========
16
+
17
+ import "../../extension/Multicall.sol";
18
+ import "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol";
19
+ import "@openzeppelin/contracts-upgradeable/interfaces/IERC2981Upgradeable.sol";
20
+
21
+ import "../../eip/ERC721AVirtualApproveUpgradeable.sol";
22
+
23
+ // ========== Internal imports ==========
24
+
25
+ import "../../external-deps/openzeppelin/metatx/ERC2771ContextUpgradeable.sol";
26
+ import "../../lib/CurrencyTransferLib.sol";
27
+
28
+ // ========== Features ==========
29
+
30
+ import "../../extension/ContractMetadata.sol";
31
+ import "../../extension/PlatformFee.sol";
32
+ import "../../extension/Royalty.sol";
33
+ import "../../extension/PrimarySale.sol";
34
+ import "../../extension/Ownable.sol";
35
+ import "../../extension/DelayedReveal.sol";
36
+ import "../../extension/LazyMint.sol";
37
+ import "../../extension/PermissionsEnumerable.sol";
38
+ import "../../extension/Drop.sol";
39
+
40
+ contract DropERC721 is
41
+ Initializable,
42
+ ContractMetadata,
43
+ PlatformFee,
44
+ Royalty,
45
+ PrimarySale,
46
+ Ownable,
47
+ DelayedReveal,
48
+ LazyMint,
49
+ PermissionsEnumerable,
50
+ Drop,
51
+ ERC2771ContextUpgradeable,
52
+ Multicall,
53
+ ERC721AUpgradeable
54
+ {
55
+ using StringsUpgradeable for uint256;
56
+
57
+ /*///////////////////////////////////////////////////////////////
58
+ State variables
59
+ //////////////////////////////////////////////////////////////*/
60
+
61
+ /// @dev Only transfers to or from TRANSFER_ROLE holders are valid, when transfers are restricted.
62
+ bytes32 private transferRole;
63
+ /// @dev Only MINTER_ROLE holders can sign off on `MintRequest`s and lazy mint tokens.
64
+ bytes32 private minterRole;
65
+ /// @dev Only METADATA_ROLE holders can reveal the URI for a batch of delayed reveal NFTs, and update or freeze batch metadata.
66
+ bytes32 private metadataRole;
67
+
68
+ /// @dev Max bps in the thirdweb system.
69
+ uint256 private constant MAX_BPS = 10_000;
70
+
71
+ address public constant DEFAULT_FEE_RECIPIENT = 0x1Af20C6B23373350aD464700B5965CE4B0D2aD94;
72
+ uint16 private constant DEFAULT_FEE_BPS = 100;
73
+
74
+ /// @dev Global max total supply of NFTs.
75
+ uint256 public maxTotalSupply;
76
+
77
+ /// @dev Emitted when the global max supply of tokens is updated.
78
+ event MaxTotalSupplyUpdated(uint256 maxTotalSupply);
79
+
80
+ /*///////////////////////////////////////////////////////////////
81
+ Constructor + initializer logic
82
+ //////////////////////////////////////////////////////////////*/
83
+
84
+ constructor() initializer {}
85
+
86
+ /// @dev Initializes the contract, like a constructor.
87
+ function initialize(
88
+ address _defaultAdmin,
89
+ string memory _name,
90
+ string memory _symbol,
91
+ string memory _contractURI,
92
+ address[] memory _trustedForwarders,
93
+ address _saleRecipient,
94
+ address _royaltyRecipient,
95
+ uint128 _royaltyBps,
96
+ uint128 _platformFeeBps,
97
+ address _platformFeeRecipient
98
+ ) external initializer {
99
+ bytes32 _transferRole = keccak256("TRANSFER_ROLE");
100
+ bytes32 _minterRole = keccak256("MINTER_ROLE");
101
+ bytes32 _metadataRole = keccak256("METADATA_ROLE");
102
+
103
+ // Initialize inherited contracts, most base-like -> most derived.
104
+ __ERC2771Context_init(_trustedForwarders);
105
+ __ERC721A_init(_name, _symbol);
106
+
107
+ _setupContractURI(_contractURI);
108
+ _setupOwner(_defaultAdmin);
109
+
110
+ _setupRole(DEFAULT_ADMIN_ROLE, _defaultAdmin);
111
+ _setupRole(_minterRole, _defaultAdmin);
112
+ _setupRole(_transferRole, _defaultAdmin);
113
+ _setupRole(_transferRole, address(0));
114
+ _setupRole(_metadataRole, _defaultAdmin);
115
+ _setRoleAdmin(_metadataRole, _metadataRole);
116
+
117
+ _setupPlatformFeeInfo(_platformFeeRecipient, _platformFeeBps);
118
+ _setupDefaultRoyaltyInfo(_royaltyRecipient, _royaltyBps);
119
+ _setupPrimarySaleRecipient(_saleRecipient);
120
+
121
+ transferRole = _transferRole;
122
+ minterRole = _minterRole;
123
+ metadataRole = _metadataRole;
124
+ }
125
+
126
+ /*///////////////////////////////////////////////////////////////
127
+ ERC 165 / 721 / 2981 logic
128
+ //////////////////////////////////////////////////////////////*/
129
+
130
+ /// @dev Returns the URI for a given tokenId.
131
+ function tokenURI(uint256 _tokenId) public view override returns (string memory) {
132
+ (uint256 batchId, ) = _getBatchId(_tokenId);
133
+ string memory batchUri = _getBaseURI(_tokenId);
134
+
135
+ if (isEncryptedBatch(batchId)) {
136
+ return string(abi.encodePacked(batchUri, "0"));
137
+ } else {
138
+ return string(abi.encodePacked(batchUri, _tokenId.toString()));
139
+ }
140
+ }
141
+
142
+ /// @dev See ERC 165
143
+ function supportsInterface(
144
+ bytes4 interfaceId
145
+ ) public view virtual override(ERC721AUpgradeable, IERC165) returns (bool) {
146
+ return super.supportsInterface(interfaceId) || type(IERC2981Upgradeable).interfaceId == interfaceId;
147
+ }
148
+
149
+ /*///////////////////////////////////////////////////////////////
150
+ Contract identifiers
151
+ //////////////////////////////////////////////////////////////*/
152
+
153
+ function contractType() external pure returns (bytes32) {
154
+ return bytes32("DropERC721");
155
+ }
156
+
157
+ function contractVersion() external pure returns (uint8) {
158
+ return uint8(4);
159
+ }
160
+
161
+ /*///////////////////////////////////////////////////////////////
162
+ Lazy minting + delayed-reveal logic
163
+ //////////////////////////////////////////////////////////////*/
164
+
165
+ /**
166
+ * @dev Lets an account with `MINTER_ROLE` lazy mint 'n' NFTs.
167
+ * The URIs for each token is the provided `_baseURIForTokens` + `{tokenId}`.
168
+ */
169
+ function lazyMint(
170
+ uint256 _amount,
171
+ string calldata _baseURIForTokens,
172
+ bytes calldata _data
173
+ ) public override returns (uint256 batchId) {
174
+ if (_data.length > 0) {
175
+ (bytes memory encryptedURI, bytes32 provenanceHash) = abi.decode(_data, (bytes, bytes32));
176
+ if (encryptedURI.length != 0 && provenanceHash != "") {
177
+ _setEncryptedData(nextTokenIdToLazyMint + _amount, _data);
178
+ }
179
+ }
180
+
181
+ return super.lazyMint(_amount, _baseURIForTokens, _data);
182
+ }
183
+
184
+ /// @dev Lets an account with `METADATA_ROLE` reveal the URI for a batch of 'delayed-reveal' NFTs.
185
+ /// @param _index the ID of a token with the desired batch.
186
+ /// @param _key the key to decrypt the batch's URI.
187
+ function reveal(
188
+ uint256 _index,
189
+ bytes calldata _key
190
+ ) external onlyRole(metadataRole) returns (string memory revealedURI) {
191
+ uint256 batchId = getBatchIdAtIndex(_index);
192
+ revealedURI = getRevealURI(batchId, _key);
193
+
194
+ _setEncryptedData(batchId, "");
195
+ _setBaseURI(batchId, revealedURI);
196
+
197
+ emit TokenURIRevealed(_index, revealedURI);
198
+ }
199
+
200
+ /**
201
+ * @notice Updates the base URI for a batch of tokens. Can only be called if the batch has been revealed/is not encrypted.
202
+ *
203
+ * @param _index Index of the desired batch in batchIds array
204
+ * @param _uri the new base URI for the batch.
205
+ */
206
+ function updateBatchBaseURI(uint256 _index, string calldata _uri) external onlyRole(metadataRole) {
207
+ require(!isEncryptedBatch(getBatchIdAtIndex(_index)), "Encrypted batch");
208
+ uint256 batchId = getBatchIdAtIndex(_index);
209
+ _setBaseURI(batchId, _uri);
210
+ }
211
+
212
+ /**
213
+ * @notice Freezes the base URI for a batch of tokens.
214
+ *
215
+ * @param _index Index of the desired batch in batchIds array.
216
+ */
217
+ function freezeBatchBaseURI(uint256 _index) external onlyRole(metadataRole) {
218
+ require(!isEncryptedBatch(getBatchIdAtIndex(_index)), "Encrypted batch");
219
+ uint256 batchId = getBatchIdAtIndex(_index);
220
+ _freezeBaseURI(batchId);
221
+ }
222
+
223
+ /*///////////////////////////////////////////////////////////////
224
+ Setter functions
225
+ //////////////////////////////////////////////////////////////*/
226
+
227
+ /// @dev Lets a contract admin set the global maximum supply for collection's NFTs.
228
+ function setMaxTotalSupply(uint256 _maxTotalSupply) external onlyRole(DEFAULT_ADMIN_ROLE) {
229
+ maxTotalSupply = _maxTotalSupply;
230
+ emit MaxTotalSupplyUpdated(_maxTotalSupply);
231
+ }
232
+
233
+ /*///////////////////////////////////////////////////////////////
234
+ Internal functions
235
+ //////////////////////////////////////////////////////////////*/
236
+
237
+ /// @dev Runs before every `claim` function call.
238
+ function _beforeClaim(
239
+ address,
240
+ uint256 _quantity,
241
+ address,
242
+ uint256,
243
+ AllowlistProof calldata,
244
+ bytes memory
245
+ ) internal view override {
246
+ require(_currentIndex + _quantity <= nextTokenIdToLazyMint, "!Tokens");
247
+ require(maxTotalSupply == 0 || _currentIndex + _quantity <= maxTotalSupply, "!Supply");
248
+ }
249
+
250
+ /// @dev Collects and distributes the primary sale value of NFTs being claimed.
251
+ function _collectPriceOnClaim(
252
+ address _primarySaleRecipient,
253
+ uint256 _quantityToClaim,
254
+ address _currency,
255
+ uint256 _pricePerToken
256
+ ) internal override {
257
+ if (_pricePerToken == 0) {
258
+ require(msg.value == 0, "!V");
259
+ return;
260
+ }
261
+
262
+ (address platformFeeRecipient, uint16 platformFeeBps) = getPlatformFeeInfo();
263
+
264
+ address saleRecipient = _primarySaleRecipient == address(0) ? primarySaleRecipient() : _primarySaleRecipient;
265
+
266
+ uint256 totalPrice = _quantityToClaim * _pricePerToken;
267
+ uint256 platformFees = (totalPrice * platformFeeBps) / MAX_BPS;
268
+
269
+ bool validMsgValue;
270
+ if (_currency == CurrencyTransferLib.NATIVE_TOKEN) {
271
+ validMsgValue = msg.value == totalPrice;
272
+ } else {
273
+ validMsgValue = msg.value == 0;
274
+ }
275
+ require(validMsgValue, "!V");
276
+
277
+ CurrencyTransferLib.transferCurrency(_currency, _msgSender(), platformFeeRecipient, platformFees);
278
+ CurrencyTransferLib.transferCurrency(
279
+ _currency,
280
+ _msgSender(),
281
+ saleRecipient,
282
+ totalPrice - platformFees
283
+ );
284
+ }
285
+
286
+ /// @dev Transfers the NFTs being claimed.
287
+ function _transferTokensOnClaim(
288
+ address _to,
289
+ uint256 _quantityBeingClaimed
290
+ ) internal override returns (uint256 startTokenId) {
291
+ startTokenId = _currentIndex;
292
+ _safeMint(_to, _quantityBeingClaimed);
293
+ }
294
+
295
+ /// @dev Checks whether platform fee info can be set in the given execution context.
296
+ function _canSetPlatformFeeInfo() internal view override returns (bool) {
297
+ return hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
298
+ }
299
+
300
+ /// @dev Checks whether primary sale recipient can be set in the given execution context.
301
+ function _canSetPrimarySaleRecipient() internal view override returns (bool) {
302
+ return hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
303
+ }
304
+
305
+ /// @dev Checks whether owner can be set in the given execution context.
306
+ function _canSetOwner() internal view override returns (bool) {
307
+ return hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
308
+ }
309
+
310
+ /// @dev Checks whether royalty info can be set in the given execution context.
311
+ function _canSetRoyaltyInfo() internal view override returns (bool) {
312
+ return hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
313
+ }
314
+
315
+ /// @dev Checks whether contract metadata can be set in the given execution context.
316
+ function _canSetContractURI() internal view override returns (bool) {
317
+ return hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
318
+ }
319
+
320
+ /// @dev Checks whether platform fee info can be set in the given execution context.
321
+ function _canSetClaimConditions() internal view override returns (bool) {
322
+ return hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
323
+ }
324
+
325
+ /// @dev Returns whether lazy minting can be done in the given execution context.
326
+ function _canLazyMint() internal view virtual override returns (bool) {
327
+ return hasRole(minterRole, _msgSender());
328
+ }
329
+
330
+ /*///////////////////////////////////////////////////////////////
331
+ Miscellaneous
332
+ //////////////////////////////////////////////////////////////*/
333
+
334
+ /**
335
+ * Returns the total amount of tokens minted in the contract.
336
+ */
337
+ function totalMinted() external view returns (uint256) {
338
+ return _totalMinted();
339
+ }
340
+
341
+ /// @dev The tokenId of the next NFT that will be minted / lazy minted.
342
+ function nextTokenIdToMint() external view returns (uint256) {
343
+ return nextTokenIdToLazyMint;
344
+ }
345
+
346
+ /// @dev The next token ID of the NFT that can be claimed.
347
+ function nextTokenIdToClaim() external view returns (uint256) {
348
+ return _currentIndex;
349
+ }
350
+
351
+ /// @dev Burns `tokenId`. See {ERC721-_burn}.
352
+ function burn(uint256 tokenId) external virtual {
353
+ // note: ERC721AUpgradeable's `_burn(uint256,bool)` internally checks for token approvals.
354
+ _burn(tokenId, true);
355
+ }
356
+
357
+ /// @dev See {ERC721-_beforeTokenTransfer}.
358
+ function _beforeTokenTransfers(
359
+ address from,
360
+ address to,
361
+ uint256 startTokenId,
362
+ uint256 quantity
363
+ ) internal virtual override {
364
+ super._beforeTokenTransfers(from, to, startTokenId, quantity);
365
+
366
+ // if transfer is restricted on the contract, we still want to allow burning and minting
367
+ if (!hasRole(transferRole, address(0)) && from != address(0) && to != address(0)) {
368
+ if (!hasRole(transferRole, from) && !hasRole(transferRole, to)) {
369
+ revert("!Transfer-Role");
370
+ }
371
+ }
372
+ }
373
+
374
+ function _dropMsgSender() internal view virtual override returns (address) {
375
+ return _msgSender();
376
+ }
377
+
378
+ function _msgSender()
379
+ internal
380
+ view
381
+ virtual
382
+ override(ContextUpgradeable, ERC2771ContextUpgradeable, Multicall)
383
+ returns (address sender)
384
+ {
385
+ return ERC2771ContextUpgradeable._msgSender();
386
+ }
387
+
388
+ function _msgData()
389
+ internal
390
+ view
391
+ virtual
392
+ override(ContextUpgradeable, ERC2771ContextUpgradeable)
393
+ returns (bytes calldata)
394
+ {
395
+ return ERC2771ContextUpgradeable._msgData();
396
+ }
397
+ }
@@ -0,0 +1,101 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.11;
3
+
4
+ /// @author thirdweb
5
+
6
+ // $$\ $$\ $$\ $$\ $$\
7
+ // $$ | $$ | \__| $$ | $$ |
8
+ // $$$$$$\ $$$$$$$\ $$\ $$$$$$\ $$$$$$$ |$$\ $$\ $$\ $$$$$$\ $$$$$$$\
9
+ // \_$$ _| $$ __$$\ $$ |$$ __$$\ $$ __$$ |$$ | $$ | $$ |$$ __$$\ $$ __$$\
10
+ // $$ | $$ | $$ |$$ |$$ | \__|$$ / $$ |$$ | $$ | $$ |$$$$$$$$ |$$ | $$ |
11
+ // $$ |$$\ $$ | $$ |$$ |$$ | $$ | $$ |$$ | $$ | $$ |$$ ____|$$ | $$ |
12
+ // \$$$$ |$$ | $$ |$$ |$$ | \$$$$$$$ |\$$$$$\$$$$ |\$$$$$$$\ $$$$$$$ |
13
+ // \____/ \__| \__|\__|\__| \_______| \_____\____/ \_______|\_______/
14
+
15
+ import "@thirdweb-dev/dynamic-contracts/src/presets/BaseRouter.sol";
16
+
17
+ import "../../extension/Multicall.sol";
18
+ import "../../extension/upgradeable/Initializable.sol";
19
+ import "../../extension/upgradeable/init/ContractMetadataInit.sol";
20
+ import "../../extension/upgradeable/init/RoyaltyInit.sol";
21
+ import "../../extension/upgradeable/init/PrimarySaleInit.sol";
22
+ import "../../extension/upgradeable/init/OwnableInit.sol";
23
+ import "../../extension/upgradeable/init/PermissionsEnumerableInit.sol";
24
+ import "../../extension/upgradeable/init/ERC2771ContextInit.sol";
25
+ import "../../extension/upgradeable/init/ERC721AQueryableInit.sol";
26
+
27
+ contract EvolvingNFT is
28
+ Initializable,
29
+ BaseRouter,
30
+ Multicall,
31
+ ERC721AQueryableInit,
32
+ ERC2771ContextInit,
33
+ ContractMetadataInit,
34
+ RoyaltyInit,
35
+ PrimarySaleInit,
36
+ OwnableInit,
37
+ PermissionsEnumerableInit
38
+ {
39
+ /// @dev Only EXTENSION_ROLE holders can update the contract's extensions.
40
+ bytes32 private constant EXTENSION_ROLE = keccak256("EXTENSION_ROLE");
41
+
42
+ constructor(Extension[] memory _extensions) BaseRouter(_extensions) {
43
+ _disableInitializers();
44
+ }
45
+
46
+ /// @dev Initializes the contract, like a constructor.
47
+ function initialize(
48
+ address _defaultAdmin,
49
+ string memory _name,
50
+ string memory _symbol,
51
+ string memory _contractURI,
52
+ address[] memory _trustedForwarders,
53
+ address _saleRecipient,
54
+ address _royaltyRecipient,
55
+ uint128 _royaltyBps
56
+ ) external initializer initializerERC721A {
57
+ bytes32 _transferRole = keccak256("TRANSFER_ROLE");
58
+
59
+ // Initialize extensions
60
+ __BaseRouter_init();
61
+
62
+ // Initialize inherited contracts, most base-like -> most derived.
63
+ __ERC2771Context_init(_trustedForwarders);
64
+ __ERC721A_init(_name, _symbol);
65
+
66
+ _setupContractURI(_contractURI);
67
+ _setupOwner(_defaultAdmin);
68
+
69
+ _setupRole(DEFAULT_ADMIN_ROLE, _defaultAdmin);
70
+ _setupRole(EXTENSION_ROLE, _defaultAdmin);
71
+ _setupRole(keccak256("MINTER_ROLE"), _defaultAdmin);
72
+ _setupRole(_transferRole, _defaultAdmin);
73
+ _setupRole(_transferRole, address(0));
74
+
75
+ _setupDefaultRoyaltyInfo(_royaltyRecipient, _royaltyBps);
76
+ _setupPrimarySaleRecipient(_saleRecipient);
77
+
78
+ _setupRole(EXTENSION_ROLE, _defaultAdmin);
79
+ _setRoleAdmin(EXTENSION_ROLE, EXTENSION_ROLE);
80
+ }
81
+
82
+ /*///////////////////////////////////////////////////////////////
83
+ Internal functions
84
+ //////////////////////////////////////////////////////////////*/
85
+
86
+ /// @dev The start token ID for the contract.
87
+ function _startTokenId() internal pure override returns (uint256) {
88
+ return 1;
89
+ }
90
+
91
+ /// @dev Returns whether all relevant permission and other checks are met before any upgrade.
92
+ function _isAuthorizedCallToUpgrade() internal view virtual override returns (bool) {
93
+ return _hasRole(EXTENSION_ROLE, msg.sender);
94
+ }
95
+
96
+ /// @dev Checks whether an account has a particular role.
97
+ function _hasRole(bytes32 _role, address _account) internal view returns (bool) {
98
+ PermissionsStorage.Data storage data = PermissionsStorage.data();
99
+ return data._hasRole[_role][_account];
100
+ }
101
+ }