@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,286 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
import { ERC1155 } from "../eip/ERC1155.sol";
|
|
7
|
+
|
|
8
|
+
import "../extension/ContractMetadata.sol";
|
|
9
|
+
import "../extension/Multicall.sol";
|
|
10
|
+
import "../extension/Ownable.sol";
|
|
11
|
+
import "../extension/Royalty.sol";
|
|
12
|
+
import "../extension/BatchMintMetadata.sol";
|
|
13
|
+
import "../extension/LazyMint.sol";
|
|
14
|
+
import "../extension/interface/IClaimableERC1155.sol";
|
|
15
|
+
|
|
16
|
+
import "../lib/Strings.sol";
|
|
17
|
+
import "../external-deps/openzeppelin/security/ReentrancyGuard.sol";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* BASE: ERC1155Base
|
|
21
|
+
* EXTENSION: LazyMint
|
|
22
|
+
*
|
|
23
|
+
* The `ERC1155LazyMint` smart contract implements the ERC1155 NFT standard.
|
|
24
|
+
* It includes the following additions to standard ERC1155 logic:
|
|
25
|
+
*
|
|
26
|
+
* - Lazy minting
|
|
27
|
+
*
|
|
28
|
+
* - Ability to mint NFTs via the provided `mintTo` and `batchMintTo` functions.
|
|
29
|
+
*
|
|
30
|
+
* - Contract metadata for royalty support on platforms such as OpenSea that use
|
|
31
|
+
* off-chain information to distribute roaylties.
|
|
32
|
+
*
|
|
33
|
+
* - Ownership of the contract, with the ability to restrict certain functions to
|
|
34
|
+
* only be called by the contract's owner.
|
|
35
|
+
*
|
|
36
|
+
* - Multicall capability to perform multiple actions atomically
|
|
37
|
+
*
|
|
38
|
+
* - EIP 2981 compliance for royalty support on NFT marketplaces.
|
|
39
|
+
*
|
|
40
|
+
*
|
|
41
|
+
* The `ERC1155LazyMint` contract uses the `LazyMint` extension.
|
|
42
|
+
*
|
|
43
|
+
* 'Lazy minting' means defining the metadata of NFTs without minting it to an address. Regular 'minting'
|
|
44
|
+
* of NFTs means actually assigning an owner to an NFT.
|
|
45
|
+
*
|
|
46
|
+
* As a contract admin, this lets you prepare the metadata for NFTs that will be minted by an external party,
|
|
47
|
+
* without paying the gas cost for actually minting the NFTs.
|
|
48
|
+
*
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
contract ERC1155LazyMint is
|
|
52
|
+
ERC1155,
|
|
53
|
+
ContractMetadata,
|
|
54
|
+
Ownable,
|
|
55
|
+
Royalty,
|
|
56
|
+
Multicall,
|
|
57
|
+
BatchMintMetadata,
|
|
58
|
+
LazyMint,
|
|
59
|
+
IClaimableERC1155,
|
|
60
|
+
ReentrancyGuard
|
|
61
|
+
{
|
|
62
|
+
using Strings for uint256;
|
|
63
|
+
|
|
64
|
+
/*//////////////////////////////////////////////////////////////
|
|
65
|
+
Mappings
|
|
66
|
+
//////////////////////////////////////////////////////////////*/
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @notice Returns the total supply of NFTs of a given tokenId
|
|
70
|
+
* @dev Mapping from tokenId => total circulating supply of NFTs of that tokenId.
|
|
71
|
+
*/
|
|
72
|
+
mapping(uint256 => uint256) public totalSupply;
|
|
73
|
+
|
|
74
|
+
/*//////////////////////////////////////////////////////////////
|
|
75
|
+
Constructor
|
|
76
|
+
//////////////////////////////////////////////////////////////*/
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @notice Initializes the contract during construction.
|
|
80
|
+
*
|
|
81
|
+
* @param _defaultAdmin The default admin of the contract.
|
|
82
|
+
* @param _name The name of the contract.
|
|
83
|
+
* @param _symbol The symbol of the contract.
|
|
84
|
+
* @param _royaltyRecipient The address to receive royalties.
|
|
85
|
+
* @param _royaltyBps The royalty basis points to be charged. Max = 10000 (10000 = 100%, 1000 = 10%)
|
|
86
|
+
*/
|
|
87
|
+
constructor(
|
|
88
|
+
address _defaultAdmin,
|
|
89
|
+
string memory _name,
|
|
90
|
+
string memory _symbol,
|
|
91
|
+
address _royaltyRecipient,
|
|
92
|
+
uint128 _royaltyBps
|
|
93
|
+
) ERC1155(_name, _symbol) {
|
|
94
|
+
_setupOwner(_defaultAdmin);
|
|
95
|
+
_setupDefaultRoyaltyInfo(_royaltyRecipient, _royaltyBps);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/*//////////////////////////////////////////////////////////////
|
|
99
|
+
Overriden metadata logic
|
|
100
|
+
//////////////////////////////////////////////////////////////*/
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* @notice Returns the metadata URI for the given tokenId.
|
|
104
|
+
*
|
|
105
|
+
* @param _tokenId The tokenId of the NFT.
|
|
106
|
+
* @return The metadata URI for the given tokenId.
|
|
107
|
+
*/
|
|
108
|
+
function uri(uint256 _tokenId) public view virtual override returns (string memory) {
|
|
109
|
+
string memory batchUri = _getBaseURI(_tokenId);
|
|
110
|
+
return string(abi.encodePacked(batchUri, _tokenId.toString()));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/*//////////////////////////////////////////////////////////////
|
|
114
|
+
CLAIM LOGIC
|
|
115
|
+
//////////////////////////////////////////////////////////////*/
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* @notice Lets an address claim multiple lazy minted NFTs at once to a recipient.
|
|
119
|
+
* This function prevents any reentrant calls, and is not allowed to be overridden.
|
|
120
|
+
*
|
|
121
|
+
* Contract creators should override `verifyClaim` and `transferTokensOnClaim`
|
|
122
|
+
* functions to create custom logic for verification and claiming,
|
|
123
|
+
* for e.g. price collection, allowlist, max quantity, etc.
|
|
124
|
+
*
|
|
125
|
+
* @dev The logic in `verifyClaim` determines whether the caller is authorized to mint NFTs.
|
|
126
|
+
* The logic in `transferTokensOnClaim` does actual minting of tokens,
|
|
127
|
+
* can also be used to apply other state changes.
|
|
128
|
+
*
|
|
129
|
+
* @param _receiver The recipient of the tokens to mint.
|
|
130
|
+
* @param _tokenId The tokenId of the lazy minted NFT to mint.
|
|
131
|
+
* @param _quantity The number of tokens to mint.
|
|
132
|
+
*/
|
|
133
|
+
function claim(address _receiver, uint256 _tokenId, uint256 _quantity) public payable virtual nonReentrant {
|
|
134
|
+
require(_tokenId < nextTokenIdToMint(), "invalid id");
|
|
135
|
+
verifyClaim(msg.sender, _tokenId, _quantity); // Add your claim verification logic by overriding this function.
|
|
136
|
+
|
|
137
|
+
_transferTokensOnClaim(_receiver, _tokenId, _quantity); // Mints tokens. Apply any state updates by overriding this function.
|
|
138
|
+
emit TokensClaimed(msg.sender, _receiver, _tokenId, _quantity);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* @notice Override this function to add logic for claim verification, based on conditions
|
|
143
|
+
* such as allowlist, price, max quantity etc.
|
|
144
|
+
*
|
|
145
|
+
* @dev Checks a request to claim NFTs against a custom condition.
|
|
146
|
+
*
|
|
147
|
+
* @param _claimer Caller of the claim function.
|
|
148
|
+
* @param _tokenId The tokenId of the lazy minted NFT to mint.
|
|
149
|
+
* @param _quantity The number of NFTs being claimed.
|
|
150
|
+
*/
|
|
151
|
+
function verifyClaim(address _claimer, uint256 _tokenId, uint256 _quantity) public view virtual {}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @notice Lets an owner or approved operator burn NFTs of the given tokenId.
|
|
155
|
+
*
|
|
156
|
+
* @param _owner The owner of the NFT to burn.
|
|
157
|
+
* @param _tokenId The tokenId of the NFT to burn.
|
|
158
|
+
* @param _amount The amount of the NFT to burn.
|
|
159
|
+
*/
|
|
160
|
+
function burn(address _owner, uint256 _tokenId, uint256 _amount) external virtual {
|
|
161
|
+
address caller = msg.sender;
|
|
162
|
+
|
|
163
|
+
require(caller == _owner || isApprovedForAll[_owner][caller], "Unapproved caller");
|
|
164
|
+
require(balanceOf[_owner][_tokenId] >= _amount, "Not enough tokens owned");
|
|
165
|
+
|
|
166
|
+
_burn(_owner, _tokenId, _amount);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* @notice Lets an owner or approved operator burn NFTs of the given tokenIds.
|
|
171
|
+
*
|
|
172
|
+
* @param _owner The owner of the NFTs to burn.
|
|
173
|
+
* @param _tokenIds The tokenIds of the NFTs to burn.
|
|
174
|
+
* @param _amounts The amounts of the NFTs to burn.
|
|
175
|
+
*/
|
|
176
|
+
function burnBatch(address _owner, uint256[] memory _tokenIds, uint256[] memory _amounts) external virtual {
|
|
177
|
+
address caller = msg.sender;
|
|
178
|
+
|
|
179
|
+
require(caller == _owner || isApprovedForAll[_owner][caller], "Unapproved caller");
|
|
180
|
+
require(_tokenIds.length == _amounts.length, "Length mismatch");
|
|
181
|
+
|
|
182
|
+
for (uint256 i = 0; i < _tokenIds.length; i += 1) {
|
|
183
|
+
require(balanceOf[_owner][_tokenIds[i]] >= _amounts[i], "Not enough tokens owned");
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
_burnBatch(_owner, _tokenIds, _amounts);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/*//////////////////////////////////////////////////////////////
|
|
190
|
+
ERC165 Logic
|
|
191
|
+
//////////////////////////////////////////////////////////////*/
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* @dev See ERC165: https://eips.ethereum.org/EIPS/eip-165
|
|
195
|
+
* @inheritdoc IERC165
|
|
196
|
+
*/
|
|
197
|
+
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155, IERC165) returns (bool) {
|
|
198
|
+
return
|
|
199
|
+
interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
|
|
200
|
+
interfaceId == 0xd9b67a26 || // ERC165 Interface ID for ERC1155
|
|
201
|
+
interfaceId == 0x0e89341c || // ERC165 Interface ID for ERC1155MetadataURI
|
|
202
|
+
interfaceId == type(IERC2981).interfaceId; // ERC165 ID for ERC2981
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/*//////////////////////////////////////////////////////////////
|
|
206
|
+
View functions
|
|
207
|
+
//////////////////////////////////////////////////////////////*/
|
|
208
|
+
|
|
209
|
+
/// @notice The tokenId assigned to the next new NFT to be lazy minted.
|
|
210
|
+
function nextTokenIdToMint() public view virtual returns (uint256) {
|
|
211
|
+
return nextTokenIdToLazyMint;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/*//////////////////////////////////////////////////////////////
|
|
215
|
+
Internal functions
|
|
216
|
+
//////////////////////////////////////////////////////////////*/
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* @notice Mints tokens to receiver on claim.
|
|
220
|
+
* Any state changes related to `claim` must be applied
|
|
221
|
+
* here by overriding this function.
|
|
222
|
+
*
|
|
223
|
+
* @dev Override this function to add logic for state updation.
|
|
224
|
+
* When overriding, apply any state changes before `_mint`.
|
|
225
|
+
*
|
|
226
|
+
* @param _receiver The receiver of the tokens to mint.
|
|
227
|
+
* @param _tokenId The tokenId of the lazy minted NFT to mint.
|
|
228
|
+
* @param _quantity The number of tokens to mint.
|
|
229
|
+
*/
|
|
230
|
+
function _transferTokensOnClaim(address _receiver, uint256 _tokenId, uint256 _quantity) internal virtual {
|
|
231
|
+
_mint(_receiver, _tokenId, _quantity, "");
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/// @dev Returns whether lazy minting can be done in the given execution context.
|
|
235
|
+
function _canLazyMint() internal view virtual override returns (bool) {
|
|
236
|
+
return msg.sender == owner();
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/// @dev Returns whether contract metadata can be set in the given execution context.
|
|
240
|
+
function _canSetContractURI() internal view virtual override returns (bool) {
|
|
241
|
+
return msg.sender == owner();
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/// @dev Returns whether owner can be set in the given execution context.
|
|
245
|
+
function _canSetOwner() internal view virtual override returns (bool) {
|
|
246
|
+
return msg.sender == owner();
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/// @dev Returns whether royalty info can be set in the given execution context.
|
|
250
|
+
function _canSetRoyaltyInfo() internal view virtual override returns (bool) {
|
|
251
|
+
return msg.sender == owner();
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* @dev Runs before every token transfer / mint / burn.
|
|
256
|
+
*
|
|
257
|
+
* @param operator The address performing the token transfer.
|
|
258
|
+
* @param from The address from which the token is being transferred.
|
|
259
|
+
* @param to The address to which the token is being transferred.
|
|
260
|
+
* @param ids The tokenIds of the tokens being transferred.
|
|
261
|
+
* @param amounts The amounts of the tokens being transferred.
|
|
262
|
+
* @param data Any additional data being passed in the token transfer.
|
|
263
|
+
*/
|
|
264
|
+
function _beforeTokenTransfer(
|
|
265
|
+
address operator,
|
|
266
|
+
address from,
|
|
267
|
+
address to,
|
|
268
|
+
uint256[] memory ids,
|
|
269
|
+
uint256[] memory amounts,
|
|
270
|
+
bytes memory data
|
|
271
|
+
) internal virtual override {
|
|
272
|
+
super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
|
|
273
|
+
|
|
274
|
+
if (from == address(0)) {
|
|
275
|
+
for (uint256 i = 0; i < ids.length; ++i) {
|
|
276
|
+
totalSupply[ids[i]] += amounts[i];
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
if (to == address(0)) {
|
|
281
|
+
for (uint256 i = 0; i < ids.length; ++i) {
|
|
282
|
+
totalSupply[ids[i]] -= amounts[i];
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
import "./ERC1155Base.sol";
|
|
7
|
+
|
|
8
|
+
import "../extension/PrimarySale.sol";
|
|
9
|
+
import "../extension/SignatureMintERC1155.sol";
|
|
10
|
+
import { ReentrancyGuard } from "../extension/upgradeable/ReentrancyGuard.sol";
|
|
11
|
+
import { CurrencyTransferLib } from "../lib/CurrencyTransferLib.sol";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* BASE: ERC1155Base
|
|
15
|
+
* EXTENSION: SignatureMintERC1155
|
|
16
|
+
*
|
|
17
|
+
* The `ERC1155SignatureMint` contract uses the `ERC1155Base` contract, along with the `SignatureMintERC1155` extension.
|
|
18
|
+
*
|
|
19
|
+
* The 'signature minting' mechanism in the `SignatureMintERC1155` extension uses EIP 712, and is a way for a contract
|
|
20
|
+
* admin to authorize an external party's request to mint tokens on the admin's contract. At a high level, this means
|
|
21
|
+
* you can authorize some external party to mint tokens on your contract, and specify what exactly will be minted by
|
|
22
|
+
* that external party.
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
contract ERC1155SignatureMint is ERC1155Base, PrimarySale, SignatureMintERC1155, ReentrancyGuard {
|
|
27
|
+
/*//////////////////////////////////////////////////////////////
|
|
28
|
+
Constructor
|
|
29
|
+
//////////////////////////////////////////////////////////////*/
|
|
30
|
+
|
|
31
|
+
constructor(
|
|
32
|
+
address _defaultAdmin,
|
|
33
|
+
string memory _name,
|
|
34
|
+
string memory _symbol,
|
|
35
|
+
address _royaltyRecipient,
|
|
36
|
+
uint128 _royaltyBps,
|
|
37
|
+
address _primarySaleRecipient
|
|
38
|
+
) ERC1155Base(_defaultAdmin, _name, _symbol, _royaltyRecipient, _royaltyBps) {
|
|
39
|
+
_setupPrimarySaleRecipient(_primarySaleRecipient);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/*//////////////////////////////////////////////////////////////
|
|
43
|
+
Signature minting logic
|
|
44
|
+
//////////////////////////////////////////////////////////////*/
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @notice Mints tokens according to the provided mint request.
|
|
48
|
+
*
|
|
49
|
+
* @param _req The payload / mint request.
|
|
50
|
+
* @param _signature The signature produced by an account signing the mint request.
|
|
51
|
+
*/
|
|
52
|
+
function mintWithSignature(
|
|
53
|
+
MintRequest calldata _req,
|
|
54
|
+
bytes calldata _signature
|
|
55
|
+
) external payable virtual override nonReentrant returns (address signer) {
|
|
56
|
+
require(_req.quantity > 0, "Minting zero tokens.");
|
|
57
|
+
|
|
58
|
+
uint256 tokenIdToMint;
|
|
59
|
+
uint256 nextIdToMint = nextTokenIdToMint();
|
|
60
|
+
|
|
61
|
+
if (_req.tokenId == type(uint256).max) {
|
|
62
|
+
tokenIdToMint = nextIdToMint;
|
|
63
|
+
nextTokenIdToMint_ += 1;
|
|
64
|
+
} else {
|
|
65
|
+
require(_req.tokenId < nextIdToMint, "invalid id");
|
|
66
|
+
tokenIdToMint = _req.tokenId;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Verify and process payload.
|
|
70
|
+
signer = _processRequest(_req, _signature);
|
|
71
|
+
|
|
72
|
+
address receiver = _req.to;
|
|
73
|
+
|
|
74
|
+
// Collect price
|
|
75
|
+
_collectPriceOnClaim(_req.primarySaleRecipient, _req.quantity, _req.currency, _req.pricePerToken);
|
|
76
|
+
|
|
77
|
+
// Set royalties, if applicable.
|
|
78
|
+
if (_req.royaltyRecipient != address(0)) {
|
|
79
|
+
_setupRoyaltyInfoForToken(tokenIdToMint, _req.royaltyRecipient, _req.royaltyBps);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Set URI
|
|
83
|
+
if (_req.tokenId == type(uint256).max) {
|
|
84
|
+
_setTokenURI(tokenIdToMint, _req.uri);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Mint tokens.
|
|
88
|
+
_mint(receiver, tokenIdToMint, _req.quantity, "");
|
|
89
|
+
|
|
90
|
+
emit TokensMintedWithSignature(signer, receiver, tokenIdToMint, _req);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/*//////////////////////////////////////////////////////////////
|
|
94
|
+
Internal functions
|
|
95
|
+
//////////////////////////////////////////////////////////////*/
|
|
96
|
+
|
|
97
|
+
/// @dev Returns whether a given address is authorized to sign mint requests.
|
|
98
|
+
function _canSignMintRequest(address _signer) internal view virtual override returns (bool) {
|
|
99
|
+
return _signer == owner();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// @dev Returns whether primary sale recipient can be set in the given execution context.
|
|
103
|
+
function _canSetPrimarySaleRecipient() internal view virtual override returns (bool) {
|
|
104
|
+
return msg.sender == owner();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/// @dev Collects and distributes the primary sale value of NFTs being claimed.
|
|
108
|
+
function _collectPriceOnClaim(
|
|
109
|
+
address _primarySaleRecipient,
|
|
110
|
+
uint256 _quantityToClaim,
|
|
111
|
+
address _currency,
|
|
112
|
+
uint256 _pricePerToken
|
|
113
|
+
) internal virtual {
|
|
114
|
+
if (_pricePerToken == 0) {
|
|
115
|
+
require(msg.value == 0, "!Value");
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
uint256 totalPrice = _quantityToClaim * _pricePerToken;
|
|
120
|
+
|
|
121
|
+
bool validMsgValue;
|
|
122
|
+
if (_currency == CurrencyTransferLib.NATIVE_TOKEN) {
|
|
123
|
+
validMsgValue = msg.value == totalPrice;
|
|
124
|
+
} else {
|
|
125
|
+
validMsgValue = msg.value == 0;
|
|
126
|
+
}
|
|
127
|
+
require(validMsgValue, "Invalid msg value");
|
|
128
|
+
|
|
129
|
+
address saleRecipient = _primarySaleRecipient == address(0) ? primarySaleRecipient() : _primarySaleRecipient;
|
|
130
|
+
CurrencyTransferLib.transferCurrency(_currency, msg.sender, saleRecipient, totalPrice);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
import "../external-deps/openzeppelin/token/ERC20/extensions/ERC20Permit.sol";
|
|
7
|
+
|
|
8
|
+
import "../extension/ContractMetadata.sol";
|
|
9
|
+
import "../extension/Multicall.sol";
|
|
10
|
+
import "../extension/Ownable.sol";
|
|
11
|
+
import "../extension/interface/IMintableERC20.sol";
|
|
12
|
+
import "../extension/interface/IBurnableERC20.sol";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The `ERC20Base` smart contract implements the ERC20 standard.
|
|
16
|
+
* It includes the following additions to standard ERC20 logic:
|
|
17
|
+
*
|
|
18
|
+
* - Ability to mint & burn tokens via the provided `mint` & `burn` functions.
|
|
19
|
+
*
|
|
20
|
+
* - Ownership of the contract, with the ability to restrict certain functions to
|
|
21
|
+
* only be called by the contract's owner.
|
|
22
|
+
*
|
|
23
|
+
* - Multicall capability to perform multiple actions atomically
|
|
24
|
+
*
|
|
25
|
+
* - EIP 2612 compliance: See {ERC20-permit} method, which can be used to change an account's ERC20 allowance by
|
|
26
|
+
* presenting a message signed by the account.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
contract ERC20Base is ContractMetadata, Multicall, Ownable, ERC20Permit, IMintableERC20, IBurnableERC20 {
|
|
30
|
+
/*//////////////////////////////////////////////////////////////
|
|
31
|
+
Constructor
|
|
32
|
+
//////////////////////////////////////////////////////////////*/
|
|
33
|
+
|
|
34
|
+
constructor(address _defaultAdmin, string memory _name, string memory _symbol) ERC20Permit(_name, _symbol) {
|
|
35
|
+
_setupOwner(_defaultAdmin);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/*//////////////////////////////////////////////////////////////
|
|
39
|
+
Minting logic
|
|
40
|
+
//////////////////////////////////////////////////////////////*/
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @notice Lets an authorized address mint tokens to a recipient.
|
|
44
|
+
* @dev The logic in the `_canMint` function determines whether the caller is authorized to mint tokens.
|
|
45
|
+
*
|
|
46
|
+
* @param _to The recipient of the tokens to mint.
|
|
47
|
+
* @param _amount Quantity of tokens to mint.
|
|
48
|
+
*/
|
|
49
|
+
function mintTo(address _to, uint256 _amount) public virtual {
|
|
50
|
+
require(_canMint(), "Not authorized to mint.");
|
|
51
|
+
require(_amount != 0, "Minting zero tokens.");
|
|
52
|
+
|
|
53
|
+
_mint(_to, _amount);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @notice Lets an owner a given amount of their tokens.
|
|
58
|
+
* @dev Caller should own the `_amount` of tokens.
|
|
59
|
+
*
|
|
60
|
+
* @param _amount The number of tokens to burn.
|
|
61
|
+
*/
|
|
62
|
+
function burn(uint256 _amount) external virtual {
|
|
63
|
+
require(balanceOf(msg.sender) >= _amount, "not enough balance");
|
|
64
|
+
_burn(msg.sender, _amount);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @notice Lets an owner burn a given amount of an account's tokens.
|
|
69
|
+
* @dev `_account` should own the `_amount` of tokens.
|
|
70
|
+
*
|
|
71
|
+
* @param _account The account to burn tokens from.
|
|
72
|
+
* @param _amount The number of tokens to burn.
|
|
73
|
+
*/
|
|
74
|
+
function burnFrom(address _account, uint256 _amount) external virtual override {
|
|
75
|
+
require(_canBurn(), "Not authorized to burn.");
|
|
76
|
+
require(balanceOf(_account) >= _amount, "not enough balance");
|
|
77
|
+
uint256 decreasedAllowance = allowance(_account, msg.sender) - _amount;
|
|
78
|
+
_approve(_account, msg.sender, 0);
|
|
79
|
+
_approve(_account, msg.sender, decreasedAllowance);
|
|
80
|
+
_burn(_account, _amount);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/*//////////////////////////////////////////////////////////////
|
|
84
|
+
Internal (overrideable) functions
|
|
85
|
+
//////////////////////////////////////////////////////////////*/
|
|
86
|
+
|
|
87
|
+
/// @dev Returns whether contract metadata can be set in the given execution context.
|
|
88
|
+
function _canSetContractURI() internal view virtual override returns (bool) {
|
|
89
|
+
return msg.sender == owner();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/// @dev Returns whether tokens can be minted in the given execution context.
|
|
93
|
+
function _canMint() internal view virtual returns (bool) {
|
|
94
|
+
return msg.sender == owner();
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/// @dev Returns whether tokens can be burned in the given execution context.
|
|
98
|
+
function _canBurn() internal view virtual returns (bool) {
|
|
99
|
+
return msg.sender == owner();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// @dev Returns whether owner can be set in the given execution context.
|
|
103
|
+
function _canSetOwner() internal view virtual override returns (bool) {
|
|
104
|
+
return msg.sender == owner();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/// @notice Returns the sender in the given execution context.
|
|
108
|
+
function _msgSender() internal view override(Multicall, Context) returns (address) {
|
|
109
|
+
return msg.sender;
|
|
110
|
+
}
|
|
111
|
+
}
|