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