@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,362 @@
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 { BurnToClaimDrop721Storage } from "./BurnToClaimDrop721Storage.sol";
16
+
17
+ import "../../../../lib/Strings.sol";
18
+ import "../../../../lib/CurrencyTransferLib.sol";
19
+
20
+ import { IERC2981 } from "../../../../eip/interface/IERC2981.sol";
21
+ import { Context, ERC721AUpgradeable, ERC721AStorage } from "../../../../eip/ERC721AUpgradeable.sol";
22
+
23
+ import { IERC2771Context } from "../../../../extension/interface/IERC2771Context.sol";
24
+
25
+ import { ERC2771ContextUpgradeable } from "../../../../extension/upgradeable/ERC2771ContextUpgradeable.sol";
26
+ import { DelayedReveal } from "../../../../extension/upgradeable/DelayedReveal.sol";
27
+ import { PrimarySale } from "../../../../extension/upgradeable/PrimarySale.sol";
28
+ import { PlatformFee } from "../../../../extension/upgradeable/PlatformFee.sol";
29
+ import { Royalty, IERC165 } from "../../../../extension/upgradeable/Royalty.sol";
30
+ import { LazyMint } from "../../../../extension/upgradeable/LazyMint.sol";
31
+ import { Drop } from "../../../../extension/upgradeable/Drop.sol";
32
+ import { ContractMetadata } from "../../../../extension/upgradeable/ContractMetadata.sol";
33
+ import { Ownable } from "../../../../extension/upgradeable/Ownable.sol";
34
+ import { PermissionsStorage } from "../../../../extension/upgradeable/Permissions.sol";
35
+ import { BurnToClaim, BurnToClaimStorage } from "../../../../extension/upgradeable/BurnToClaim.sol";
36
+ import { ReentrancyGuard } from "../../../../extension/upgradeable/ReentrancyGuard.sol";
37
+
38
+ contract BurnToClaimDrop721Logic is
39
+ ContractMetadata,
40
+ PlatformFee,
41
+ Royalty,
42
+ PrimarySale,
43
+ Ownable,
44
+ BurnToClaim,
45
+ DelayedReveal,
46
+ LazyMint,
47
+ Drop,
48
+ ERC2771ContextUpgradeable,
49
+ ERC721AUpgradeable,
50
+ ReentrancyGuard
51
+ {
52
+ using Strings for uint256;
53
+
54
+ /*///////////////////////////////////////////////////////////////
55
+ Constants
56
+ //////////////////////////////////////////////////////////////*/
57
+
58
+ /// @dev Default admin role for all roles. Only accounts with this role can grant/revoke other roles.
59
+ bytes32 private constant DEFAULT_ADMIN_ROLE = 0x00;
60
+ /// @dev Only transfers to or from TRANSFER_ROLE holders are valid, when transfers are restricted.
61
+ bytes32 private constant TRANSFER_ROLE = keccak256("TRANSFER_ROLE");
62
+ /// @dev Only MINTER_ROLE holders can sign off on `MintRequest`s and lazy mint tokens.
63
+ bytes32 private constant MINTER_ROLE = keccak256("MINTER_ROLE");
64
+
65
+ /// @dev Max bps in the thirdweb system.
66
+ uint256 private constant MAX_BPS = 10_000;
67
+
68
+ /*///////////////////////////////////////////////////////////////
69
+ Events
70
+ //////////////////////////////////////////////////////////////*/
71
+
72
+ /// @dev Emitted when the global max NFTs that can be minted is updated.
73
+ event MaxTotalMintedUpdated(uint256 maxTotalMinted);
74
+
75
+ /*///////////////////////////////////////////////////////////////
76
+ ERC 165 / 721 / 2981 logic
77
+ //////////////////////////////////////////////////////////////*/
78
+
79
+ /**
80
+ * @notice Returns the URI for a given tokenId.
81
+ * @dev The URI, for a given tokenId, is returned once it is lazy minted, even if it might not be actually minted. (See `LazyMint`)
82
+ */
83
+ function tokenURI(uint256 _tokenId) public view override returns (string memory) {
84
+ (uint256 batchId, ) = _getBatchId(_tokenId);
85
+ string memory batchUri = _getBaseURI(_tokenId);
86
+
87
+ if (isEncryptedBatch(batchId)) {
88
+ return string(abi.encodePacked(batchUri, "0"));
89
+ } else {
90
+ return string(abi.encodePacked(batchUri, _tokenId.toString()));
91
+ }
92
+ }
93
+
94
+ /// @notice See ERC 165
95
+ function supportsInterface(
96
+ bytes4 interfaceId
97
+ ) public view virtual override(ERC721AUpgradeable, IERC165) returns (bool) {
98
+ return super.supportsInterface(interfaceId) || type(IERC2981).interfaceId == interfaceId;
99
+ }
100
+
101
+ /*///////////////////////////////////////////////////////////////
102
+ Lazy minting + delayed-reveal logic
103
+ //////////////////////////////////////////////////////////////*/
104
+
105
+ /**
106
+ * @notice Lets an account with `MINTER_ROLE` lazy mint 'n' NFTs.
107
+ * The URIs for each token is the provided `_baseURIForTokens` + `{tokenId}`.
108
+ */
109
+ function lazyMint(
110
+ uint256 _amount,
111
+ string calldata _baseURIForTokens,
112
+ bytes calldata _data
113
+ ) public override returns (uint256) {
114
+ uint256 nextId = nextTokenIdToLazyMint();
115
+ if (_data.length > 0) {
116
+ (bytes memory encryptedURI, bytes32 provenanceHash) = abi.decode(_data, (bytes, bytes32));
117
+ if (encryptedURI.length != 0 && provenanceHash != "") {
118
+ _setEncryptedData(nextId + _amount, _data);
119
+ }
120
+ }
121
+
122
+ return super.lazyMint(_amount, _baseURIForTokens, _data);
123
+ }
124
+
125
+ /// @notice Lets an account with `MINTER_ROLE` reveal the URI for a batch of 'delayed-reveal' NFTs.
126
+ function reveal(uint256 _index, bytes calldata _key) external returns (string memory revealedURI) {
127
+ require(_hasRole(MINTER_ROLE, _msgSender()), "not minter.");
128
+ uint256 batchId = getBatchIdAtIndex(_index);
129
+ revealedURI = getRevealURI(batchId, _key);
130
+
131
+ _setEncryptedData(batchId, "");
132
+ _setBaseURI(batchId, revealedURI);
133
+
134
+ emit TokenURIRevealed(_index, revealedURI);
135
+ }
136
+
137
+ /*///////////////////////////////////////////////////////////////
138
+ Claiming lazy minted tokens logic
139
+ //////////////////////////////////////////////////////////////*/
140
+
141
+ /// @notice Claim lazy minted tokens after burning required tokens from origin contract.
142
+ function burnAndClaim(uint256 _burnTokenId, uint256 _quantity) external payable nonReentrant {
143
+ _checkTokenSupply(_quantity);
144
+
145
+ // Verify and burn tokens on origin contract
146
+ address _tokenOwner = _dropMsgSender();
147
+ verifyBurnToClaim(_tokenOwner, _burnTokenId, _quantity);
148
+ _burnTokensOnOrigin(_tokenOwner, _burnTokenId, _quantity);
149
+
150
+ // Collect price
151
+ _collectPriceOnClaim(
152
+ address(0),
153
+ _quantity,
154
+ _burnToClaimStorage().burnToClaimInfo.currency,
155
+ _burnToClaimStorage().burnToClaimInfo.mintPriceForNewToken
156
+ );
157
+
158
+ // Mint tokens.
159
+ _safeMint(_tokenOwner, _quantity);
160
+
161
+ // emit event
162
+ emit TokensBurnedAndClaimed(
163
+ _burnToClaimStorage().burnToClaimInfo.originContractAddress,
164
+ _tokenOwner,
165
+ _burnTokenId,
166
+ _quantity
167
+ );
168
+ }
169
+
170
+ /*///////////////////////////////////////////////////////////////
171
+ Setter functions
172
+ //////////////////////////////////////////////////////////////*/
173
+
174
+ /// @notice Lets a contract admin set the global maximum NFTs that can be minted.
175
+ function setMaxTotalMinted(uint256 _maxTotalMinted) external {
176
+ require(_hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "not admin.");
177
+
178
+ BurnToClaimDrop721Storage.Data storage data = BurnToClaimDrop721Storage.burnToClaimDrop721Storage();
179
+ data.maxTotalMinted = _maxTotalMinted;
180
+ emit MaxTotalMintedUpdated(_maxTotalMinted);
181
+ }
182
+
183
+ /*///////////////////////////////////////////////////////////////
184
+ Internal functions
185
+ //////////////////////////////////////////////////////////////*/
186
+
187
+ /// @dev Check if given quantity is available for minting.
188
+ function _checkTokenSupply(uint256 _quantity) internal view {
189
+ uint256 _maxTotalMinted = maxTotalMinted();
190
+ uint256 currentTotalMinted = totalMinted();
191
+
192
+ require(currentTotalMinted + _quantity <= nextTokenIdToLazyMint(), "!Tokens");
193
+ require(
194
+ _maxTotalMinted == 0 || currentTotalMinted + _quantity <= _maxTotalMinted,
195
+ "exceed max total mint cap."
196
+ );
197
+ }
198
+
199
+ /// @dev Runs before every `claim` function call.
200
+ function _beforeClaim(
201
+ address,
202
+ uint256 _quantity,
203
+ address,
204
+ uint256,
205
+ AllowlistProof calldata,
206
+ bytes memory
207
+ ) internal view override {
208
+ _checkTokenSupply(_quantity);
209
+ }
210
+
211
+ /// @dev Collects and distributes the primary sale value of NFTs being claimed.
212
+ function _collectPriceOnClaim(
213
+ address _primarySaleRecipient,
214
+ uint256 _quantityToClaim,
215
+ address _currency,
216
+ uint256 _pricePerToken
217
+ ) internal override {
218
+ if (_pricePerToken == 0) {
219
+ require(msg.value == 0, "!Value");
220
+ return;
221
+ }
222
+
223
+ (address platformFeeRecipient, uint16 platformFeeBps) = getPlatformFeeInfo();
224
+
225
+ address saleRecipient = _primarySaleRecipient == address(0) ? primarySaleRecipient() : _primarySaleRecipient;
226
+
227
+ uint256 totalPrice = _quantityToClaim * _pricePerToken;
228
+ uint256 platformFees = (totalPrice * platformFeeBps) / MAX_BPS;
229
+
230
+ bool validMsgValue;
231
+ if (_currency == CurrencyTransferLib.NATIVE_TOKEN) {
232
+ validMsgValue = msg.value == totalPrice;
233
+ } else {
234
+ validMsgValue = msg.value == 0;
235
+ }
236
+ require(validMsgValue, "Invalid msg value");
237
+
238
+ CurrencyTransferLib.transferCurrency(_currency, _msgSender(), platformFeeRecipient, platformFees);
239
+ CurrencyTransferLib.transferCurrency(_currency, _msgSender(), saleRecipient, totalPrice - platformFees);
240
+ }
241
+
242
+ /// @dev Transfers the NFTs being claimed.
243
+ function _transferTokensOnClaim(
244
+ address _to,
245
+ uint256 _quantityBeingClaimed
246
+ ) internal override returns (uint256 startTokenId) {
247
+ ERC721AStorage.Data storage data = ERC721AStorage.erc721AStorage();
248
+ startTokenId = data._currentIndex;
249
+ _safeMint(_to, _quantityBeingClaimed);
250
+ }
251
+
252
+ /// @dev Checks whether platform fee info can be set in the given execution context.
253
+ function _canSetPlatformFeeInfo() internal view override returns (bool) {
254
+ return _hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
255
+ }
256
+
257
+ /// @dev Checks whether primary sale recipient can be set in the given execution context.
258
+ function _canSetPrimarySaleRecipient() internal view override returns (bool) {
259
+ return _hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
260
+ }
261
+
262
+ /// @dev Checks whether owner can be set in the given execution context.
263
+ function _canSetOwner() internal view override returns (bool) {
264
+ return _hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
265
+ }
266
+
267
+ /// @dev Checks whether royalty info can be set in the given execution context.
268
+ function _canSetRoyaltyInfo() internal view override returns (bool) {
269
+ return _hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
270
+ }
271
+
272
+ /// @dev Checks whether contract metadata can be set in the given execution context.
273
+ function _canSetContractURI() internal view override returns (bool) {
274
+ return _hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
275
+ }
276
+
277
+ /// @dev Checks whether platform fee info can be set in the given execution context.
278
+ function _canSetClaimConditions() internal view override returns (bool) {
279
+ return _hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
280
+ }
281
+
282
+ /// @dev Returns whether lazy minting can be done in the given execution context.
283
+ function _canLazyMint() internal view virtual override returns (bool) {
284
+ return _hasRole(MINTER_ROLE, _msgSender());
285
+ }
286
+
287
+ /// @dev Returns whether burn-to-claim info can be set in the given execution context.
288
+ function _canSetBurnToClaim() internal view virtual override returns (bool) {
289
+ return _hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
290
+ }
291
+
292
+ /*///////////////////////////////////////////////////////////////
293
+ Miscellaneous
294
+ //////////////////////////////////////////////////////////////*/
295
+
296
+ /**
297
+ * @notice Returns the total amount of tokens minted in the contract.
298
+ */
299
+ function totalMinted() public view returns (uint256) {
300
+ ERC721AStorage.Data storage data = ERC721AStorage.erc721AStorage();
301
+ unchecked {
302
+ return data._currentIndex - _startTokenId();
303
+ }
304
+ }
305
+
306
+ /// @notice The tokenId of the next NFT that will be minted / lazy minted.
307
+ function nextTokenIdToMint() external view returns (uint256) {
308
+ return nextTokenIdToLazyMint();
309
+ }
310
+
311
+ /// @notice The next token ID of the NFT that can be claimed.
312
+ function nextTokenIdToClaim() external view returns (uint256) {
313
+ ERC721AStorage.Data storage data = ERC721AStorage.erc721AStorage();
314
+ return data._currentIndex;
315
+ }
316
+
317
+ /// @notice Global max total NFTs that can be minted.
318
+ function maxTotalMinted() public view returns (uint256) {
319
+ BurnToClaimDrop721Storage.Data storage data = BurnToClaimDrop721Storage.burnToClaimDrop721Storage();
320
+ return data.maxTotalMinted;
321
+ }
322
+
323
+ /// @notice Burns `tokenId`. See {ERC721-_burn}.
324
+ function burn(uint256 tokenId) external virtual {
325
+ // note: ERC721AUpgradeable's `_burn(uint256,bool)` internally checks for token approvals.
326
+ _burn(tokenId, true);
327
+ }
328
+
329
+ /// @dev See {ERC721-_beforeTokenTransfer}.
330
+ function _beforeTokenTransfers(
331
+ address from,
332
+ address to,
333
+ uint256 startTokenId,
334
+ uint256 quantity
335
+ ) internal virtual override {
336
+ super._beforeTokenTransfers(from, to, startTokenId, quantity);
337
+
338
+ // if transfer is restricted on the contract, we still want to allow burning and minting
339
+ if (!_hasRole(TRANSFER_ROLE, address(0)) && from != address(0) && to != address(0)) {
340
+ if (!_hasRole(TRANSFER_ROLE, from) && !_hasRole(TRANSFER_ROLE, to)) {
341
+ revert("!Transfer-Role");
342
+ }
343
+ }
344
+ }
345
+
346
+ function _hasRole(bytes32 role, address addr) internal view returns (bool) {
347
+ PermissionsStorage.Data storage data = PermissionsStorage.data();
348
+ return data._hasRole[role][addr];
349
+ }
350
+
351
+ function _dropMsgSender() internal view virtual override returns (address) {
352
+ return _msgSender();
353
+ }
354
+
355
+ function _msgSender() internal view virtual override(Context, ERC2771ContextUpgradeable) returns (address) {
356
+ return ERC2771ContextUpgradeable._msgSender();
357
+ }
358
+
359
+ function _msgData() internal view virtual override(Context, ERC2771ContextUpgradeable) returns (bytes calldata) {
360
+ return ERC2771ContextUpgradeable._msgData();
361
+ }
362
+ }
@@ -0,0 +1,21 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.0;
3
+
4
+ library BurnToClaimDrop721Storage {
5
+ /// @custom:storage-location erc7201:burn.to.claim.drop.721.storage
6
+ /// @dev keccak256(abi.encode(uint256(keccak256("burn.to.claim.drop.721.storage")) - 1)) & ~bytes32(uint256(0xff))
7
+ bytes32 public constant BURN_TO_CLAIM_DROP_721_STORAGE_POSITION =
8
+ 0x3107fcf7768de14f3c3441e6960e7a1659b448f798b4e6665bf2dc61db3ea300;
9
+
10
+ struct Data {
11
+ /// @dev Global max total NFTs that can be minted.
12
+ uint256 maxTotalMinted;
13
+ }
14
+
15
+ function burnToClaimDrop721Storage() internal pure returns (Data storage burnToClaimDrop721Data) {
16
+ bytes32 position = BURN_TO_CLAIM_DROP_721_STORAGE_POSITION;
17
+ assembly {
18
+ burnToClaimDrop721Data.slot := position
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,60 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // @author: thirdweb (https://github.com/thirdweb-dev/dynamic-contracts)
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ // Interface
7
+ import "lib/dynamic-contracts/src/presets/BaseRouter.sol";
8
+
9
+ // Core
10
+ import "lib/dynamic-contracts/src/core/Router.sol";
11
+
12
+ // Utils
13
+ import "lib/dynamic-contracts/src/lib/StringSet.sol";
14
+ import "./extension/PermissionOverride.sol";
15
+
16
+ // Fixed extensions
17
+ import "../../../extension/Ownable.sol";
18
+ import "../../../extension/ContractMetadata.sol";
19
+
20
+ /**
21
+ * ////////////
22
+ *
23
+ * NOTE: This contract is a work in progress, and has not been audited.
24
+ *
25
+ * ////////////
26
+ */
27
+
28
+ contract CoreRouter is BaseRouter, ContractMetadata, Ownable {
29
+ using StringSet for StringSet.Set;
30
+
31
+ /*///////////////////////////////////////////////////////////////
32
+ Constructor
33
+ //////////////////////////////////////////////////////////////*/
34
+
35
+ constructor(address _owner, Extension[] memory _extensions) BaseRouter(_extensions) {
36
+ // Initialize extensions
37
+ __BaseRouter_init();
38
+
39
+ _setupOwner(_owner);
40
+ }
41
+
42
+ /*///////////////////////////////////////////////////////////////
43
+ Internal functions
44
+ //////////////////////////////////////////////////////////////*/
45
+
46
+ /// @dev Returns whether all relevant permission and other checks are met before any upgrade.
47
+ function _isAuthorizedCallToUpgrade() internal view virtual override returns (bool) {
48
+ return msg.sender == owner();
49
+ }
50
+
51
+ /// @dev Returns whether contract metadata can be set in the given execution context.
52
+ function _canSetContractURI() internal view virtual override returns (bool) {
53
+ return msg.sender == owner();
54
+ }
55
+
56
+ /// @dev Returns whether owner can be set in the given execution context.
57
+ function _canSetOwner() internal view virtual override returns (bool) {
58
+ return msg.sender == owner();
59
+ }
60
+ }
@@ -0,0 +1,52 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @author thirdweb
5
+
6
+ /**
7
+ * ////////////
8
+ *
9
+ * NOTE: This contract is a work in progress, and has not been audited.
10
+ *
11
+ * ////////////
12
+ */
13
+
14
+ library PermissionsStorage {
15
+ bytes32 public constant PERMISSIONS_STORAGE_POSITION = keccak256("permissions.storage");
16
+
17
+ struct Data {
18
+ /// @dev Map from keccak256 hash of a role => a map from address => whether address has role.
19
+ mapping(bytes32 => mapping(address => bool)) _hasRole;
20
+ /// @dev Map from keccak256 hash of a role to role admin. See {getRoleAdmin}.
21
+ mapping(bytes32 => bytes32) _getRoleAdmin;
22
+ }
23
+
24
+ function permissionsStorage() internal pure returns (Data storage permissionsData) {
25
+ bytes32 position = PERMISSIONS_STORAGE_POSITION;
26
+ assembly {
27
+ permissionsData.slot := position
28
+ }
29
+ }
30
+ }
31
+
32
+ contract PermissionOverrideCoreRouter {
33
+ bytes32 private constant DEFAULT_ADMIN_ROLE = 0x00;
34
+ bytes32 private constant EXTENSION_ROLE = keccak256("EXTENSION_ROLE");
35
+
36
+ function canSetContractURI(address _caller) public view returns (bool) {
37
+ return _hasRole(DEFAULT_ADMIN_ROLE, _caller);
38
+ }
39
+
40
+ function canSetOwner(address _caller) public view returns (bool) {
41
+ return _hasRole(DEFAULT_ADMIN_ROLE, _caller);
42
+ }
43
+
44
+ function canSetExtension(address _caller) public view returns (bool) {
45
+ return _hasRole(DEFAULT_ADMIN_ROLE, _caller);
46
+ }
47
+
48
+ function _hasRole(bytes32 role, address account) internal view returns (bool) {
49
+ PermissionsStorage.Data storage data = PermissionsStorage.permissionsStorage();
50
+ return data._hasRole[role][account];
51
+ }
52
+ }