@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,75 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ /**
5
+ * @dev This is a base contract to aid in writing upgradeable diamond facet contracts, or any kind of contract that will be deployed
6
+ * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an
7
+ * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
8
+ * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
9
+ *
10
+ * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
11
+ * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
12
+ *
13
+ * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
14
+ * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
15
+ */
16
+
17
+ import { ERC721A__InitializableStorage } from "./ERC721A__InitializableStorage.sol";
18
+
19
+ abstract contract ERC721A__Initializable {
20
+ using ERC721A__InitializableStorage for ERC721A__InitializableStorage.Layout;
21
+
22
+ /**
23
+ * @dev Modifier to protect an initializer function from being invoked twice.
24
+ */
25
+ modifier initializerERC721A() {
26
+ // If the contract is initializing we ignore whether _initialized is set in order to support multiple
27
+ // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the
28
+ // contract may have been reentered.
29
+ require(
30
+ ERC721A__InitializableStorage.layout()._initializing
31
+ ? _isConstructor()
32
+ : !ERC721A__InitializableStorage.layout()._initialized,
33
+ "ERC721A__Initializable: contract is already initialized"
34
+ );
35
+
36
+ bool isTopLevelCall = !ERC721A__InitializableStorage.layout()._initializing;
37
+ if (isTopLevelCall) {
38
+ ERC721A__InitializableStorage.layout()._initializing = true;
39
+ ERC721A__InitializableStorage.layout()._initialized = true;
40
+ }
41
+
42
+ _;
43
+
44
+ if (isTopLevelCall) {
45
+ ERC721A__InitializableStorage.layout()._initializing = false;
46
+ }
47
+ }
48
+
49
+ /**
50
+ * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the
51
+ * {initializer} modifier, directly or indirectly.
52
+ */
53
+ modifier onlyInitializingERC721A() {
54
+ require(
55
+ ERC721A__InitializableStorage.layout()._initializing,
56
+ "ERC721A__Initializable: contract is not initializing"
57
+ );
58
+ _;
59
+ }
60
+
61
+ /// @dev Returns true if and only if the function is running in the constructor
62
+ function _isConstructor() private view returns (bool) {
63
+ // extcodesize checks the size of the code stored in an address, and
64
+ // address returns the current address. Since the code is still not
65
+ // deployed when running a constructor, any checks on its code size will
66
+ // yield zero, making it an effective way to detect if a contract is
67
+ // under construction or not.
68
+ address self = address(this);
69
+ uint256 cs;
70
+ assembly {
71
+ cs := extcodesize(self)
72
+ }
73
+ return cs == 0;
74
+ }
75
+ }
@@ -0,0 +1,29 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.0;
4
+
5
+ /**
6
+ * @dev This is a base storage for the initialization function for upgradeable diamond facet contracts
7
+ **/
8
+
9
+ library ERC721A__InitializableStorage {
10
+ struct Layout {
11
+ /*
12
+ * Indicates that the contract has been initialized.
13
+ */
14
+ bool _initialized;
15
+ /*
16
+ * Indicates that the contract is in the process of being initialized.
17
+ */
18
+ bool _initializing;
19
+ }
20
+
21
+ bytes32 internal constant STORAGE_SLOT = keccak256("ERC721A.contracts.storage.initializable.facet");
22
+
23
+ function layout() internal pure returns (Layout storage l) {
24
+ bytes32 slot = STORAGE_SLOT;
25
+ assembly {
26
+ l.slot := slot
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,69 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // ERC721A Contracts v3.3.0
3
+ // Creator: Chiru Labs
4
+
5
+ pragma solidity ^0.8.4;
6
+
7
+ import "../interface/IERC721A.sol";
8
+
9
+ /**
10
+ * @dev Interface of an ERC721AQueryable compliant contract.
11
+ */
12
+ interface IERC721AQueryable is IERC721A {
13
+ /**
14
+ * Invalid query range (`start` >= `stop`).
15
+ */
16
+ error InvalidQueryRange();
17
+
18
+ /**
19
+ * @dev Returns the `TokenOwnership` struct at `tokenId` without reverting.
20
+ *
21
+ * If the `tokenId` is out of bounds:
22
+ * - `addr` = `address(0)`
23
+ * - `startTimestamp` = `0`
24
+ * - `burned` = `false`
25
+ *
26
+ * If the `tokenId` is burned:
27
+ * - `addr` = `<Address of owner before token was burned>`
28
+ * - `startTimestamp` = `<Timestamp when token was burned>`
29
+ * - `burned = `true`
30
+ *
31
+ * Otherwise:
32
+ * - `addr` = `<Address of owner>`
33
+ * - `startTimestamp` = `<Timestamp of start of ownership>`
34
+ * - `burned = `false`
35
+ */
36
+ function explicitOwnershipOf(uint256 tokenId) external view returns (TokenOwnership memory);
37
+
38
+ /**
39
+ * @dev Returns an array of `TokenOwnership` structs at `tokenIds` in order.
40
+ * See {ERC721AQueryable-explicitOwnershipOf}
41
+ */
42
+ function explicitOwnershipsOf(uint256[] memory tokenIds) external view returns (TokenOwnership[] memory);
43
+
44
+ /**
45
+ * @dev Returns an array of token IDs owned by `owner`,
46
+ * in the range [`start`, `stop`)
47
+ * (i.e. `start <= tokenId < stop`).
48
+ *
49
+ * This function allows for tokens to be queried if the collection
50
+ * grows too big for a single call of {ERC721AQueryable-tokensOfOwner}.
51
+ *
52
+ * Requirements:
53
+ *
54
+ * - `start` < `stop`
55
+ */
56
+ function tokensOfOwnerIn(address owner, uint256 start, uint256 stop) external view returns (uint256[] memory);
57
+
58
+ /**
59
+ * @dev Returns an array of token IDs owned by `owner`.
60
+ *
61
+ * This function scans the ownership mapping and is O(totalSupply) in complexity.
62
+ * It is meant to be called off-chain.
63
+ *
64
+ * See {ERC721AQueryable-tokensOfOwnerIn} for splitting the scan into
65
+ * multiple smaller scans if the collection is large enough to cause
66
+ * an out-of-gas error (10K pfp collections should be fine).
67
+ */
68
+ function tokensOfOwner(address owner) external view returns (uint256[] memory);
69
+ }
@@ -0,0 +1,69 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // ERC721A Contracts v4.2.3
3
+ // Creator: Chiru Labs
4
+
5
+ pragma solidity ^0.8.4;
6
+
7
+ import "./IERC721AUpgradeable.sol";
8
+
9
+ /**
10
+ * @dev Interface of ERC721AQueryable.
11
+ */
12
+ interface IERC721AQueryableUpgradeable is IERC721AUpgradeable {
13
+ /**
14
+ * Invalid query range (`start` >= `stop`).
15
+ */
16
+ error InvalidQueryRange();
17
+
18
+ /**
19
+ * @dev Returns the `TokenOwnership` struct at `tokenId` without reverting.
20
+ *
21
+ * If the `tokenId` is out of bounds:
22
+ *
23
+ * - `addr = address(0)`
24
+ * - `startTimestamp = 0`
25
+ * - `burned = false`
26
+ * - `extraData = 0`
27
+ *
28
+ * If the `tokenId` is burned:
29
+ *
30
+ * - `addr = <Address of owner before token was burned>`
31
+ * - `startTimestamp = <Timestamp when token was burned>`
32
+ * - `burned = true`
33
+ * - `extraData = <Extra data when token was burned>`
34
+ *
35
+ * Otherwise:
36
+ *
37
+ * - `addr = <Address of owner>`
38
+ * - `startTimestamp = <Timestamp of start of ownership>`
39
+ * - `burned = false`
40
+ * - `extraData = <Extra data at start of ownership>`
41
+ */
42
+ function explicitOwnershipOf(uint256 tokenId) external view returns (TokenOwnership memory);
43
+
44
+ /**
45
+ * @dev Returns an array of token IDs owned by `owner`,
46
+ * in the range [`start`, `stop`)
47
+ * (i.e. `start <= tokenId < stop`).
48
+ *
49
+ * This function allows for tokens to be queried if the collection
50
+ * grows too big for a single call of {ERC721AQueryable-tokensOfOwner}.
51
+ *
52
+ * Requirements:
53
+ *
54
+ * - `start < stop`
55
+ */
56
+ function tokensOfOwnerIn(address owner, uint256 start, uint256 stop) external view returns (uint256[] memory);
57
+
58
+ /**
59
+ * @dev Returns an array of token IDs owned by `owner`.
60
+ *
61
+ * This function scans the ownership mapping and is O(`totalSupply`) in complexity.
62
+ * It is meant to be called off-chain.
63
+ *
64
+ * See {ERC721AQueryable-tokensOfOwnerIn} for splitting the scan into
65
+ * multiple smaller scans if the collection is large enough to cause
66
+ * an out-of-gas error (10K collections should be fine).
67
+ */
68
+ function tokensOfOwner(address owner) external view returns (uint256[] memory);
69
+ }
@@ -0,0 +1,269 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // ERC721A Contracts v4.2.3
3
+ // Creator: Chiru Labs
4
+
5
+ pragma solidity ^0.8.4;
6
+
7
+ /**
8
+ * @dev Interface of ERC721A.
9
+ */
10
+ interface IERC721AUpgradeable {
11
+ /**
12
+ * The caller must own the token or be an approved operator.
13
+ */
14
+ error ApprovalCallerNotOwnerNorApproved();
15
+
16
+ /**
17
+ * The token does not exist.
18
+ */
19
+ error ApprovalQueryForNonexistentToken();
20
+
21
+ /**
22
+ * Cannot query the balance for the zero address.
23
+ */
24
+ error BalanceQueryForZeroAddress();
25
+
26
+ /**
27
+ * Cannot mint to the zero address.
28
+ */
29
+ error MintToZeroAddress();
30
+
31
+ /**
32
+ * The quantity of tokens minted must be more than zero.
33
+ */
34
+ error MintZeroQuantity();
35
+
36
+ /**
37
+ * The token does not exist.
38
+ */
39
+ error OwnerQueryForNonexistentToken();
40
+
41
+ /**
42
+ * The caller must own the token or be an approved operator.
43
+ */
44
+ error TransferCallerNotOwnerNorApproved();
45
+
46
+ /**
47
+ * The token must be owned by `from`.
48
+ */
49
+ error TransferFromIncorrectOwner();
50
+
51
+ /**
52
+ * Cannot safely transfer to a contract that does not implement the
53
+ * ERC721Receiver interface.
54
+ */
55
+ error TransferToNonERC721ReceiverImplementer();
56
+
57
+ /**
58
+ * Cannot transfer to the zero address.
59
+ */
60
+ error TransferToZeroAddress();
61
+
62
+ /**
63
+ * The token does not exist.
64
+ */
65
+ error URIQueryForNonexistentToken();
66
+
67
+ /**
68
+ * The `quantity` minted with ERC2309 exceeds the safety limit.
69
+ */
70
+ error MintERC2309QuantityExceedsLimit();
71
+
72
+ /**
73
+ * The `extraData` cannot be set on an unintialized ownership slot.
74
+ */
75
+ error OwnershipNotInitializedForExtraData();
76
+
77
+ // =============================================================
78
+ // STRUCTS
79
+ // =============================================================
80
+
81
+ struct TokenOwnership {
82
+ // The address of the owner.
83
+ address addr;
84
+ // Stores the start time of ownership with minimal overhead for tokenomics.
85
+ uint64 startTimestamp;
86
+ // Whether the token has been burned.
87
+ bool burned;
88
+ // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}.
89
+ uint24 extraData;
90
+ }
91
+
92
+ // =============================================================
93
+ // TOKEN COUNTERS
94
+ // =============================================================
95
+
96
+ /**
97
+ * @dev Returns the total number of tokens in existence.
98
+ * Burned tokens will reduce the count.
99
+ * To get the total number of tokens minted, please see {_totalMinted}.
100
+ */
101
+ function totalSupply() external view returns (uint256);
102
+
103
+ // =============================================================
104
+ // IERC165
105
+ // =============================================================
106
+
107
+ /**
108
+ * @dev Returns true if this contract implements the interface defined by
109
+ * `interfaceId`. See the corresponding
110
+ * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified)
111
+ * to learn more about how these ids are created.
112
+ *
113
+ * This function call must use less than 30000 gas.
114
+ */
115
+ function supportsInterface(bytes4 interfaceId) external view returns (bool);
116
+
117
+ // =============================================================
118
+ // IERC721
119
+ // =============================================================
120
+
121
+ /**
122
+ * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
123
+ */
124
+ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
125
+
126
+ /**
127
+ * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
128
+ */
129
+ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
130
+
131
+ /**
132
+ * @dev Emitted when `owner` enables or disables
133
+ * (`approved`) `operator` to manage all of its assets.
134
+ */
135
+ event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
136
+
137
+ /**
138
+ * @dev Returns the number of tokens in `owner`'s account.
139
+ */
140
+ function balanceOf(address owner) external view returns (uint256 balance);
141
+
142
+ /**
143
+ * @dev Returns the owner of the `tokenId` token.
144
+ *
145
+ * Requirements:
146
+ *
147
+ * - `tokenId` must exist.
148
+ */
149
+ function ownerOf(uint256 tokenId) external view returns (address owner);
150
+
151
+ /**
152
+ * @dev Safely transfers `tokenId` token from `from` to `to`,
153
+ * checking first that contract recipients are aware of the ERC721 protocol
154
+ * to prevent tokens from being forever locked.
155
+ *
156
+ * Requirements:
157
+ *
158
+ * - `from` cannot be the zero address.
159
+ * - `to` cannot be the zero address.
160
+ * - `tokenId` token must exist and be owned by `from`.
161
+ * - If the caller is not `from`, it must be have been allowed to move
162
+ * this token by either {approve} or {setApprovalForAll}.
163
+ * - If `to` refers to a smart contract, it must implement
164
+ * {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
165
+ *
166
+ * Emits a {Transfer} event.
167
+ */
168
+ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external payable;
169
+
170
+ /**
171
+ * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`.
172
+ */
173
+ function safeTransferFrom(address from, address to, uint256 tokenId) external payable;
174
+
175
+ /**
176
+ * @dev Transfers `tokenId` from `from` to `to`.
177
+ *
178
+ * WARNING: Usage of this method is discouraged, use {safeTransferFrom}
179
+ * whenever possible.
180
+ *
181
+ * Requirements:
182
+ *
183
+ * - `from` cannot be the zero address.
184
+ * - `to` cannot be the zero address.
185
+ * - `tokenId` token must be owned by `from`.
186
+ * - If the caller is not `from`, it must be approved to move this token
187
+ * by either {approve} or {setApprovalForAll}.
188
+ *
189
+ * Emits a {Transfer} event.
190
+ */
191
+ function transferFrom(address from, address to, uint256 tokenId) external payable;
192
+
193
+ /**
194
+ * @dev Gives permission to `to` to transfer `tokenId` token to another account.
195
+ * The approval is cleared when the token is transferred.
196
+ *
197
+ * Only a single account can be approved at a time, so approving the
198
+ * zero address clears previous approvals.
199
+ *
200
+ * Requirements:
201
+ *
202
+ * - The caller must own the token or be an approved operator.
203
+ * - `tokenId` must exist.
204
+ *
205
+ * Emits an {Approval} event.
206
+ */
207
+ function approve(address to, uint256 tokenId) external payable;
208
+
209
+ /**
210
+ * @dev Approve or remove `operator` as an operator for the caller.
211
+ * Operators can call {transferFrom} or {safeTransferFrom}
212
+ * for any token owned by the caller.
213
+ *
214
+ * Requirements:
215
+ *
216
+ * - The `operator` cannot be the caller.
217
+ *
218
+ * Emits an {ApprovalForAll} event.
219
+ */
220
+ function setApprovalForAll(address operator, bool _approved) external;
221
+
222
+ /**
223
+ * @dev Returns the account approved for `tokenId` token.
224
+ *
225
+ * Requirements:
226
+ *
227
+ * - `tokenId` must exist.
228
+ */
229
+ function getApproved(uint256 tokenId) external view returns (address operator);
230
+
231
+ /**
232
+ * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
233
+ *
234
+ * See {setApprovalForAll}.
235
+ */
236
+ function isApprovedForAll(address owner, address operator) external view returns (bool);
237
+
238
+ // =============================================================
239
+ // IERC721Metadata
240
+ // =============================================================
241
+
242
+ /**
243
+ * @dev Returns the token collection name.
244
+ */
245
+ function name() external view returns (string memory);
246
+
247
+ /**
248
+ * @dev Returns the token collection symbol.
249
+ */
250
+ function symbol() external view returns (string memory);
251
+
252
+ /**
253
+ * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
254
+ */
255
+ function tokenURI(uint256 tokenId) external view returns (string memory);
256
+
257
+ // =============================================================
258
+ // IERC2309
259
+ // =============================================================
260
+
261
+ /**
262
+ * @dev Emitted when tokens in `fromTokenId` to `toTokenId`
263
+ * (inclusive) is transferred from `from` to `to`, as defined in the
264
+ * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309) standard.
265
+ *
266
+ * See {_mintERC2309} for more details.
267
+ */
268
+ event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
269
+ }
@@ -0,0 +1,37 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @author thirdweb
5
+
6
+ import "./interface/IAppURI.sol";
7
+
8
+ /**
9
+ * Thirdweb's `AppURI` is a contract extension for any contract
10
+ * that wants to add an official App URI that follows the appUri spec
11
+ *
12
+ */
13
+
14
+ abstract contract AppURI is IAppURI {
15
+ /// @dev appURI
16
+ string public override appURI;
17
+
18
+ /// @dev Lets a contract admin set the URI for app metadata.
19
+ function setAppURI(string memory _uri) public override {
20
+ if (!_canSetAppURI()) {
21
+ revert("Not authorized");
22
+ }
23
+
24
+ _setupAppURI(_uri);
25
+ }
26
+
27
+ /// @dev Lets a contract admin set the URI for app metadata.
28
+ function _setupAppURI(string memory _uri) internal {
29
+ string memory prevURI = appURI;
30
+ appURI = _uri;
31
+
32
+ emit AppURIUpdated(prevURI, _uri);
33
+ }
34
+
35
+ /// @dev Returns whether appUri can be set in the given execution context.
36
+ function _canSetAppURI() internal view virtual returns (bool);
37
+ }
@@ -0,0 +1,143 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.0;
3
+
4
+ /// @author thirdweb
5
+
6
+ /**
7
+ * @title Batch-mint Metadata
8
+ * @notice The `BatchMintMetadata` is a contract extension for any base NFT contract. It lets the smart contract
9
+ * using this extension set metadata for `n` number of NFTs all at once. This is enabled by storing a single
10
+ * base URI for a batch of `n` NFTs, where the metadata for each NFT in a relevant batch is `baseURI/tokenId`.
11
+ */
12
+
13
+ contract BatchMintMetadata {
14
+ /// @dev Invalid index for batch
15
+ error BatchMintInvalidBatchId(uint256 index);
16
+
17
+ /// @dev Invalid token
18
+ error BatchMintInvalidTokenId(uint256 tokenId);
19
+
20
+ /// @dev Metadata frozen
21
+ error BatchMintMetadataFrozen(uint256 batchId);
22
+
23
+ /// @dev Largest tokenId of each batch of tokens with the same baseURI + 1 {ex: batchId 100 at position 0 includes tokens 0-99}
24
+ uint256[] private batchIds;
25
+
26
+ /// @dev Mapping from id of a batch of tokens => to base URI for the respective batch of tokens.
27
+ mapping(uint256 => string) private baseURI;
28
+
29
+ /// @dev Mapping from id of a batch of tokens => to whether the base URI for the respective batch of tokens is frozen.
30
+ mapping(uint256 => bool) public batchFrozen;
31
+
32
+ /// @dev This event emits when the metadata of all tokens are frozen.
33
+ /// While not currently supported by marketplaces, this event allows
34
+ /// future indexing if desired.
35
+ event MetadataFrozen();
36
+
37
+ // @dev This event emits when the metadata of a range of tokens is updated.
38
+ /// So that the third-party platforms such as NFT market could
39
+ /// timely update the images and related attributes of the NFTs.
40
+ event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId);
41
+
42
+ /**
43
+ * @notice Returns the count of batches of NFTs.
44
+ * @dev Each batch of tokens has an in ID and an associated `baseURI`.
45
+ * See {batchIds}.
46
+ */
47
+ function getBaseURICount() public view returns (uint256) {
48
+ return batchIds.length;
49
+ }
50
+
51
+ /**
52
+ * @notice Returns the ID for the batch of tokens at the given index.
53
+ * @dev See {getBaseURICount}.
54
+ * @param _index Index of the desired batch in batchIds array.
55
+ */
56
+ function getBatchIdAtIndex(uint256 _index) public view returns (uint256) {
57
+ if (_index >= getBaseURICount()) {
58
+ revert BatchMintInvalidBatchId(_index);
59
+ }
60
+ return batchIds[_index];
61
+ }
62
+
63
+ /// @dev Returns the id for the batch of tokens the given tokenId belongs to.
64
+ function _getBatchId(uint256 _tokenId) internal view returns (uint256 batchId, uint256 index) {
65
+ uint256 numOfTokenBatches = getBaseURICount();
66
+ uint256[] memory indices = batchIds;
67
+
68
+ for (uint256 i = 0; i < numOfTokenBatches; i += 1) {
69
+ if (_tokenId < indices[i]) {
70
+ index = i;
71
+ batchId = indices[i];
72
+
73
+ return (batchId, index);
74
+ }
75
+ }
76
+
77
+ revert BatchMintInvalidTokenId(_tokenId);
78
+ }
79
+
80
+ /// @dev Returns the baseURI for a token. The intended metadata URI for the token is baseURI + tokenId.
81
+ function _getBaseURI(uint256 _tokenId) internal view returns (string memory) {
82
+ uint256 numOfTokenBatches = getBaseURICount();
83
+ uint256[] memory indices = batchIds;
84
+
85
+ for (uint256 i = 0; i < numOfTokenBatches; i += 1) {
86
+ if (_tokenId < indices[i]) {
87
+ return baseURI[indices[i]];
88
+ }
89
+ }
90
+
91
+ revert BatchMintInvalidTokenId(_tokenId);
92
+ }
93
+
94
+ /// @dev returns the starting tokenId of a given batchId.
95
+ function _getBatchStartId(uint256 _batchID) internal view returns (uint256) {
96
+ uint256 numOfTokenBatches = getBaseURICount();
97
+ uint256[] memory indices = batchIds;
98
+
99
+ for (uint256 i = 0; i < numOfTokenBatches; i++) {
100
+ if (_batchID == indices[i]) {
101
+ if (i > 0) {
102
+ return indices[i - 1];
103
+ }
104
+ return 0;
105
+ }
106
+ }
107
+
108
+ revert BatchMintInvalidBatchId(_batchID);
109
+ }
110
+
111
+ /// @dev Sets the base URI for the batch of tokens with the given batchId.
112
+ function _setBaseURI(uint256 _batchId, string memory _baseURI) internal {
113
+ if (batchFrozen[_batchId]) {
114
+ revert BatchMintMetadataFrozen(_batchId);
115
+ }
116
+ baseURI[_batchId] = _baseURI;
117
+ emit BatchMetadataUpdate(_getBatchStartId(_batchId), _batchId);
118
+ }
119
+
120
+ /// @dev Freezes the base URI for the batch of tokens with the given batchId.
121
+ function _freezeBaseURI(uint256 _batchId) internal {
122
+ string memory baseURIForBatch = baseURI[_batchId];
123
+ if (bytes(baseURIForBatch).length == 0) {
124
+ revert BatchMintInvalidBatchId(_batchId);
125
+ }
126
+ batchFrozen[_batchId] = true;
127
+ emit MetadataFrozen();
128
+ }
129
+
130
+ /// @dev Mints a batch of tokenIds and associates a common baseURI to all those Ids.
131
+ function _batchMintMetadata(
132
+ uint256 _startId,
133
+ uint256 _amountToMint,
134
+ string memory _baseURIForTokens
135
+ ) internal returns (uint256 nextTokenIdToMint, uint256 batchId) {
136
+ batchId = _startId + _amountToMint;
137
+ nextTokenIdToMint = batchId;
138
+
139
+ batchIds.push(batchId);
140
+
141
+ baseURI[batchId] = _baseURIForTokens;
142
+ }
143
+ }