@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,77 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.11;
|
|
3
|
+
|
|
4
|
+
import "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* `SignatureMint` is an ERC 721 contract. It lets anyone mint NFTs by producing a mint request
|
|
8
|
+
* and a signature (produced by an account with MINTER_ROLE, signing the mint request).
|
|
9
|
+
*/
|
|
10
|
+
interface ITokenERC721 is IERC721Upgradeable {
|
|
11
|
+
/**
|
|
12
|
+
* @notice The body of a request to mint NFTs.
|
|
13
|
+
*
|
|
14
|
+
* @param to The receiver of the NFTs to mint.
|
|
15
|
+
* @param uri The URI of the NFT to mint.
|
|
16
|
+
* @param price Price to pay for minting with the signature.
|
|
17
|
+
* @param currency The currency in which the price per token must be paid.
|
|
18
|
+
* @param validityStartTimestamp The unix timestamp after which the request is valid.
|
|
19
|
+
* @param validityEndTimestamp The unix timestamp after which the request expires.
|
|
20
|
+
* @param uid A unique identifier for the request.
|
|
21
|
+
*/
|
|
22
|
+
struct MintRequest {
|
|
23
|
+
address to;
|
|
24
|
+
address royaltyRecipient;
|
|
25
|
+
uint256 royaltyBps;
|
|
26
|
+
address primarySaleRecipient;
|
|
27
|
+
string uri;
|
|
28
|
+
uint256 price;
|
|
29
|
+
address currency;
|
|
30
|
+
uint128 validityStartTimestamp;
|
|
31
|
+
uint128 validityEndTimestamp;
|
|
32
|
+
bytes32 uid;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/// @dev Emitted when an account with MINTER_ROLE mints an NFT.
|
|
36
|
+
event TokensMinted(address indexed mintedTo, uint256 indexed tokenIdMinted, string uri);
|
|
37
|
+
|
|
38
|
+
/// @dev Emitted when tokens are minted.
|
|
39
|
+
event TokensMintedWithSignature(
|
|
40
|
+
address indexed signer,
|
|
41
|
+
address indexed mintedTo,
|
|
42
|
+
uint256 indexed tokenIdMinted,
|
|
43
|
+
MintRequest mintRequest
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @notice Verifies that a mint request is signed by an account holding
|
|
48
|
+
* MINTER_ROLE (at the time of the function call).
|
|
49
|
+
*
|
|
50
|
+
* @param req The mint request.
|
|
51
|
+
* @param signature The signature produced by an account signing the mint request.
|
|
52
|
+
*
|
|
53
|
+
* returns (success, signer) Result of verification and the recovered address.
|
|
54
|
+
*/
|
|
55
|
+
function verify(
|
|
56
|
+
MintRequest calldata req,
|
|
57
|
+
bytes calldata signature
|
|
58
|
+
) external view returns (bool success, address signer);
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @notice Lets an account with MINTER_ROLE mint an NFT.
|
|
62
|
+
*
|
|
63
|
+
* @param to The address to mint the NFT to.
|
|
64
|
+
* @param uri The URI to assign to the NFT.
|
|
65
|
+
*
|
|
66
|
+
* @return tokenId of the NFT minted.
|
|
67
|
+
*/
|
|
68
|
+
function mintTo(address to, string calldata uri) external returns (uint256);
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @notice Mints an NFT according to the provided mint request.
|
|
72
|
+
*
|
|
73
|
+
* @param req The mint request.
|
|
74
|
+
* @param signature he signature produced by an account signing the mint request.
|
|
75
|
+
*/
|
|
76
|
+
function mintWithSignature(MintRequest calldata req, bytes calldata signature) external payable returns (uint256);
|
|
77
|
+
}
|
|
@@ -0,0 +1,339 @@
|
|
|
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
|
+
// Interface
|
|
16
|
+
import "../interface/ILoyaltyCard.sol";
|
|
17
|
+
|
|
18
|
+
// Base
|
|
19
|
+
import "../../eip/ERC721AVirtualApproveUpgradeable.sol";
|
|
20
|
+
|
|
21
|
+
// Lib
|
|
22
|
+
import "../../lib/CurrencyTransferLib.sol";
|
|
23
|
+
|
|
24
|
+
// Extensions
|
|
25
|
+
import "../../extension/NFTMetadata.sol";
|
|
26
|
+
import "../../extension/SignatureMintERC721Upgradeable.sol";
|
|
27
|
+
import "../../extension/ContractMetadata.sol";
|
|
28
|
+
import "../../extension/Ownable.sol";
|
|
29
|
+
import "../../extension/Royalty.sol";
|
|
30
|
+
import "../../extension/PrimarySale.sol";
|
|
31
|
+
import "../../extension/PlatformFee.sol";
|
|
32
|
+
import "../../extension/Multicall.sol";
|
|
33
|
+
import "../../extension/PermissionsEnumerable.sol";
|
|
34
|
+
import "../../external-deps/openzeppelin/metatx/ERC2771ContextUpgradeable.sol";
|
|
35
|
+
import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @title LoyaltyCard
|
|
39
|
+
*
|
|
40
|
+
* @custom:description This contract is a loyalty card NFT collection. Each NFT represents a loyalty card, and the NFT's metadata
|
|
41
|
+
* contains the loyalty card's information. A loyalty card's metadata can be updated by an admin of the contract.
|
|
42
|
+
* A loyalty card can be cancelled (i.e. 'burned') by its owner or an approved operator. A loyalty card can be revoked
|
|
43
|
+
* (i.e. 'burned') without its owner's approval, by an admin of the contract.
|
|
44
|
+
*/
|
|
45
|
+
contract LoyaltyCard is
|
|
46
|
+
ILoyaltyCard,
|
|
47
|
+
ContractMetadata,
|
|
48
|
+
Ownable,
|
|
49
|
+
Royalty,
|
|
50
|
+
PrimarySale,
|
|
51
|
+
PlatformFee,
|
|
52
|
+
Multicall,
|
|
53
|
+
PermissionsEnumerable,
|
|
54
|
+
ReentrancyGuardUpgradeable,
|
|
55
|
+
ERC2771ContextUpgradeable,
|
|
56
|
+
NFTMetadata,
|
|
57
|
+
SignatureMintERC721Upgradeable,
|
|
58
|
+
ERC721AUpgradeable
|
|
59
|
+
{
|
|
60
|
+
/*///////////////////////////////////////////////////////////////
|
|
61
|
+
State variables
|
|
62
|
+
//////////////////////////////////////////////////////////////*/
|
|
63
|
+
|
|
64
|
+
/// @dev Only TRANSFER_ROLE holders can have tokens transferred from or to them, during restricted transfers.
|
|
65
|
+
bytes32 private constant TRANSFER_ROLE = keccak256("TRANSFER_ROLE");
|
|
66
|
+
/// @dev Only MINTER_ROLE holders can sign off on `MintRequest`s.
|
|
67
|
+
bytes32 private constant MINTER_ROLE = keccak256("MINTER_ROLE");
|
|
68
|
+
/// @dev Only METADATA_ROLE holders can update NFT metadata.
|
|
69
|
+
bytes32 private constant METADATA_ROLE = keccak256("METADATA_ROLE");
|
|
70
|
+
/// @dev Only REVOKE_ROLE holders can revoke a loyalty card.
|
|
71
|
+
bytes32 private constant REVOKE_ROLE = keccak256("REVOKE_ROLE");
|
|
72
|
+
|
|
73
|
+
/// @dev Max bps in the thirdweb system.
|
|
74
|
+
uint256 private constant MAX_BPS = 10_000;
|
|
75
|
+
|
|
76
|
+
address public constant DEFAULT_FEE_RECIPIENT = 0x1Af20C6B23373350aD464700B5965CE4B0D2aD94;
|
|
77
|
+
uint16 private constant DEFAULT_FEE_BPS = 100;
|
|
78
|
+
|
|
79
|
+
/*///////////////////////////////////////////////////////////////
|
|
80
|
+
Constructor + initializer
|
|
81
|
+
//////////////////////////////////////////////////////////////*/
|
|
82
|
+
|
|
83
|
+
constructor() initializer {}
|
|
84
|
+
|
|
85
|
+
/// @dev Initializes the contract, like a constructor.
|
|
86
|
+
function initialize(
|
|
87
|
+
address _defaultAdmin,
|
|
88
|
+
string memory _name,
|
|
89
|
+
string memory _symbol,
|
|
90
|
+
string memory _contractURI,
|
|
91
|
+
address[] memory _trustedForwarders,
|
|
92
|
+
address _saleRecipient,
|
|
93
|
+
address _royaltyRecipient,
|
|
94
|
+
uint128 _royaltyBps,
|
|
95
|
+
uint128 _platformFeeBps,
|
|
96
|
+
address _platformFeeRecipient
|
|
97
|
+
) external initializer {
|
|
98
|
+
// Initialize inherited contracts, most base-like -> most derived.
|
|
99
|
+
__ERC2771Context_init(_trustedForwarders);
|
|
100
|
+
__ERC721A_init(_name, _symbol);
|
|
101
|
+
__SignatureMintERC721_init();
|
|
102
|
+
__ReentrancyGuard_init();
|
|
103
|
+
|
|
104
|
+
_setupContractURI(_contractURI);
|
|
105
|
+
_setupOwner(_defaultAdmin);
|
|
106
|
+
|
|
107
|
+
_setupRole(DEFAULT_ADMIN_ROLE, _defaultAdmin);
|
|
108
|
+
_setupRole(MINTER_ROLE, _defaultAdmin);
|
|
109
|
+
_setupRole(TRANSFER_ROLE, _defaultAdmin);
|
|
110
|
+
|
|
111
|
+
_setupRole(METADATA_ROLE, _defaultAdmin);
|
|
112
|
+
_setRoleAdmin(METADATA_ROLE, METADATA_ROLE);
|
|
113
|
+
|
|
114
|
+
_setupRole(REVOKE_ROLE, _defaultAdmin);
|
|
115
|
+
_setRoleAdmin(REVOKE_ROLE, REVOKE_ROLE);
|
|
116
|
+
|
|
117
|
+
_setupPlatformFeeInfo(_platformFeeRecipient, _platformFeeBps);
|
|
118
|
+
_setupDefaultRoyaltyInfo(_royaltyRecipient, _royaltyBps);
|
|
119
|
+
_setupPrimarySaleRecipient(_saleRecipient);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/*///////////////////////////////////////////////////////////////
|
|
123
|
+
ERC 165 / 721 / 2981 logic
|
|
124
|
+
//////////////////////////////////////////////////////////////*/
|
|
125
|
+
|
|
126
|
+
/// @dev Returns the URI for a given tokenId.
|
|
127
|
+
function tokenURI(uint256 _tokenId) public view override returns (string memory) {
|
|
128
|
+
return _getTokenURI(_tokenId);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/// @dev See ERC 165
|
|
132
|
+
function supportsInterface(
|
|
133
|
+
bytes4 interfaceId
|
|
134
|
+
) public view virtual override(ERC721AUpgradeable, IERC165) returns (bool) {
|
|
135
|
+
return super.supportsInterface(interfaceId) || type(IERC2981).interfaceId == interfaceId;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/*///////////////////////////////////////////////////////////////
|
|
139
|
+
External functions
|
|
140
|
+
//////////////////////////////////////////////////////////////*/
|
|
141
|
+
|
|
142
|
+
/// @dev Mints an NFT according to the provided mint request. Always mints 1 NFT.
|
|
143
|
+
function mintWithSignature(
|
|
144
|
+
MintRequest calldata _req,
|
|
145
|
+
bytes calldata _signature
|
|
146
|
+
) external payable nonReentrant returns (address signer) {
|
|
147
|
+
require(_req.quantity == 1, "LoyaltyCard: only 1 NFT can be minted at a time.");
|
|
148
|
+
|
|
149
|
+
signer = _processRequest(_req, _signature);
|
|
150
|
+
address receiver = _req.to;
|
|
151
|
+
uint256 tokenIdMinted = _mintTo(receiver, _req.uri);
|
|
152
|
+
|
|
153
|
+
// Set royalties, if applicable.
|
|
154
|
+
if (_req.royaltyRecipient != address(0) && _req.royaltyBps != 0) {
|
|
155
|
+
_setupRoyaltyInfoForToken(tokenIdMinted, _req.royaltyRecipient, _req.royaltyBps);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
_collectPrice(_req.primarySaleRecipient, _req.quantity, _req.currency, _req.pricePerToken);
|
|
159
|
+
|
|
160
|
+
emit TokensMintedWithSignature(signer, receiver, tokenIdMinted, _req);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/// @dev Lets an account with MINTER_ROLE mint an NFT. Always mints 1 NFT.
|
|
164
|
+
function mintTo(
|
|
165
|
+
address _to,
|
|
166
|
+
string calldata _uri
|
|
167
|
+
) external onlyRole(MINTER_ROLE) nonReentrant returns (uint256 tokenIdMinted) {
|
|
168
|
+
tokenIdMinted = _mintTo(_to, _uri);
|
|
169
|
+
emit TokensMinted(_to, tokenIdMinted, _uri);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/// @dev Burns `tokenId`. See {ERC721-_burn}.
|
|
173
|
+
function cancel(uint256 tokenId) external virtual override {
|
|
174
|
+
// note: ERC721AUpgradeable's `_burn(uint256,bool)` internally checks for token approvals.
|
|
175
|
+
_burn(tokenId, true);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/// @dev Burns `tokenId`. See {ERC721-_burn}.
|
|
179
|
+
function revoke(uint256 tokenId) external virtual override onlyRole(REVOKE_ROLE) {
|
|
180
|
+
_burn(tokenId);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/*///////////////////////////////////////////////////////////////
|
|
184
|
+
Miscellaneous
|
|
185
|
+
//////////////////////////////////////////////////////////////*/
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* @dev Returns the total amount of tokens minted in the contract.
|
|
189
|
+
*/
|
|
190
|
+
function totalMinted() external view returns (uint256) {
|
|
191
|
+
unchecked {
|
|
192
|
+
return _currentIndex - _startTokenId();
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/// @dev The tokenId of the next NFT that will be minted / lazy minted.
|
|
197
|
+
function nextTokenIdToMint() external view returns (uint256) {
|
|
198
|
+
return _currentIndex;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/*///////////////////////////////////////////////////////////////
|
|
202
|
+
Internal functions
|
|
203
|
+
//////////////////////////////////////////////////////////////*/
|
|
204
|
+
|
|
205
|
+
/// @dev Collects and distributes the primary sale value of NFTs being claimed.
|
|
206
|
+
function _collectPrice(
|
|
207
|
+
address _primarySaleRecipient,
|
|
208
|
+
uint256 _quantityToClaim,
|
|
209
|
+
address _currency,
|
|
210
|
+
uint256 _pricePerToken
|
|
211
|
+
) internal {
|
|
212
|
+
if (_pricePerToken == 0) {
|
|
213
|
+
require(msg.value == 0, "!Value");
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
uint256 totalPrice = _quantityToClaim * _pricePerToken;
|
|
218
|
+
|
|
219
|
+
bool validMsgValue;
|
|
220
|
+
if (_currency == CurrencyTransferLib.NATIVE_TOKEN) {
|
|
221
|
+
validMsgValue = msg.value == totalPrice;
|
|
222
|
+
} else {
|
|
223
|
+
validMsgValue = msg.value == 0;
|
|
224
|
+
}
|
|
225
|
+
require(validMsgValue, "Invalid msg value");
|
|
226
|
+
|
|
227
|
+
address saleRecipient = _primarySaleRecipient == address(0) ? primarySaleRecipient() : _primarySaleRecipient;
|
|
228
|
+
|
|
229
|
+
uint256 fees;
|
|
230
|
+
address feeRecipient;
|
|
231
|
+
|
|
232
|
+
uint256 platformFeesTw = (totalPrice * DEFAULT_FEE_BPS) / MAX_BPS;
|
|
233
|
+
|
|
234
|
+
PlatformFeeType feeType = getPlatformFeeType();
|
|
235
|
+
if (feeType == PlatformFeeType.Flat) {
|
|
236
|
+
(feeRecipient, fees) = getFlatPlatformFeeInfo();
|
|
237
|
+
} else {
|
|
238
|
+
uint16 platformFeeBps;
|
|
239
|
+
(feeRecipient, platformFeeBps) = getPlatformFeeInfo();
|
|
240
|
+
fees = (totalPrice * platformFeeBps) / MAX_BPS;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
require(totalPrice >= fees + platformFeesTw, "Fees greater than price");
|
|
244
|
+
|
|
245
|
+
CurrencyTransferLib.transferCurrency(_currency, _msgSender(), DEFAULT_FEE_RECIPIENT, platformFeesTw);
|
|
246
|
+
CurrencyTransferLib.transferCurrency(_currency, _msgSender(), feeRecipient, fees);
|
|
247
|
+
CurrencyTransferLib.transferCurrency(
|
|
248
|
+
_currency,
|
|
249
|
+
_msgSender(),
|
|
250
|
+
saleRecipient,
|
|
251
|
+
totalPrice - fees - platformFeesTw
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/// @dev Mints an NFT to `to`
|
|
256
|
+
function _mintTo(address _to, string calldata _uri) internal returns (uint256 tokenIdToMint) {
|
|
257
|
+
tokenIdToMint = _currentIndex;
|
|
258
|
+
|
|
259
|
+
_setTokenURI(tokenIdToMint, _uri);
|
|
260
|
+
_safeMint(_to, 1);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/// @dev See {ERC721-_beforeTokenTransfer}.
|
|
264
|
+
function _beforeTokenTransfers(
|
|
265
|
+
address from,
|
|
266
|
+
address to,
|
|
267
|
+
uint256 startTokenId,
|
|
268
|
+
uint256 quantity
|
|
269
|
+
) internal virtual override {
|
|
270
|
+
super._beforeTokenTransfers(from, to, startTokenId, quantity);
|
|
271
|
+
|
|
272
|
+
// if transfer is restricted on the contract, we still want to allow burning and minting
|
|
273
|
+
if (!hasRole(TRANSFER_ROLE, address(0)) && from != address(0) && to != address(0)) {
|
|
274
|
+
if (!hasRole(TRANSFER_ROLE, from) && !hasRole(TRANSFER_ROLE, to)) {
|
|
275
|
+
revert("!Transfer-Role");
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/// @dev Checks whether platform fee info can be set in the given execution context.
|
|
281
|
+
function _canSetPlatformFeeInfo() internal view override returns (bool) {
|
|
282
|
+
return hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/// @dev Checks whether primary sale recipient can be set in the given execution context.
|
|
286
|
+
function _canSetPrimarySaleRecipient() internal view override returns (bool) {
|
|
287
|
+
return hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/// @dev Checks whether owner can be set in the given execution context.
|
|
291
|
+
function _canSetOwner() internal view override returns (bool) {
|
|
292
|
+
return hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/// @dev Checks whether royalty info can be set in the given execution context.
|
|
296
|
+
function _canSetRoyaltyInfo() internal view override returns (bool) {
|
|
297
|
+
return hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/// @dev Checks whether contract metadata can be set in the given execution context.
|
|
301
|
+
function _canSetContractURI() internal view override returns (bool) {
|
|
302
|
+
return hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/// @dev Returns whether a given address is authorized to sign mint requests.
|
|
306
|
+
function _isAuthorizedSigner(address _signer) internal view override returns (bool) {
|
|
307
|
+
return hasRole(MINTER_ROLE, _signer);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/// @dev Returns whether metadata can be set in the given execution context.
|
|
311
|
+
function _canSetMetadata() internal view virtual override returns (bool) {
|
|
312
|
+
return hasRole(METADATA_ROLE, _msgSender());
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/// @dev Returns whether metadata can be frozen in the given execution context.
|
|
316
|
+
function _canFreezeMetadata() internal view virtual override returns (bool) {
|
|
317
|
+
return hasRole(METADATA_ROLE, _msgSender());
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
function _msgSender()
|
|
321
|
+
internal
|
|
322
|
+
view
|
|
323
|
+
virtual
|
|
324
|
+
override(ContextUpgradeable, ERC2771ContextUpgradeable, Multicall)
|
|
325
|
+
returns (address sender)
|
|
326
|
+
{
|
|
327
|
+
return ERC2771ContextUpgradeable._msgSender();
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
function _msgData()
|
|
331
|
+
internal
|
|
332
|
+
view
|
|
333
|
+
virtual
|
|
334
|
+
override(ContextUpgradeable, ERC2771ContextUpgradeable)
|
|
335
|
+
returns (bytes calldata)
|
|
336
|
+
{
|
|
337
|
+
return ERC2771ContextUpgradeable._msgData();
|
|
338
|
+
}
|
|
339
|
+
}
|