@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,143 @@
|
|
|
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
|
+
// ========== External imports ==========
|
|
16
|
+
import "../../../eip/interface/IERC721.sol";
|
|
17
|
+
|
|
18
|
+
import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
|
|
19
|
+
import "../../../extension/Multicall.sol";
|
|
20
|
+
|
|
21
|
+
// ========== Internal imports ==========
|
|
22
|
+
|
|
23
|
+
import "../../interface/airdrop/IAirdropERC721.sol";
|
|
24
|
+
import "../../../external-deps/openzeppelin/metatx/ERC2771ContextUpgradeable.sol";
|
|
25
|
+
|
|
26
|
+
// ========== Features ==========
|
|
27
|
+
import "../../../extension/PermissionsEnumerable.sol";
|
|
28
|
+
import "../../../extension/ContractMetadata.sol";
|
|
29
|
+
|
|
30
|
+
contract AirdropERC721 is
|
|
31
|
+
Initializable,
|
|
32
|
+
ContractMetadata,
|
|
33
|
+
PermissionsEnumerable,
|
|
34
|
+
ReentrancyGuardUpgradeable,
|
|
35
|
+
ERC2771ContextUpgradeable,
|
|
36
|
+
Multicall,
|
|
37
|
+
IAirdropERC721
|
|
38
|
+
{
|
|
39
|
+
/*///////////////////////////////////////////////////////////////
|
|
40
|
+
State variables
|
|
41
|
+
//////////////////////////////////////////////////////////////*/
|
|
42
|
+
|
|
43
|
+
bytes32 private constant MODULE_TYPE = bytes32("AirdropERC721");
|
|
44
|
+
uint256 private constant VERSION = 2;
|
|
45
|
+
|
|
46
|
+
/*///////////////////////////////////////////////////////////////
|
|
47
|
+
Constructor + initializer logic
|
|
48
|
+
//////////////////////////////////////////////////////////////*/
|
|
49
|
+
|
|
50
|
+
constructor() {
|
|
51
|
+
_disableInitializers();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/// @dev Initializes the contract, like a constructor.
|
|
55
|
+
function initialize(
|
|
56
|
+
address _defaultAdmin,
|
|
57
|
+
string memory _contractURI,
|
|
58
|
+
address[] memory _trustedForwarders
|
|
59
|
+
) external initializer {
|
|
60
|
+
__ERC2771Context_init_unchained(_trustedForwarders);
|
|
61
|
+
|
|
62
|
+
_setupContractURI(_contractURI);
|
|
63
|
+
_setupRole(DEFAULT_ADMIN_ROLE, _defaultAdmin);
|
|
64
|
+
__ReentrancyGuard_init();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/*///////////////////////////////////////////////////////////////
|
|
68
|
+
Generic contract logic
|
|
69
|
+
//////////////////////////////////////////////////////////////*/
|
|
70
|
+
|
|
71
|
+
/// @dev Returns the type of the contract.
|
|
72
|
+
function contractType() external pure returns (bytes32) {
|
|
73
|
+
return MODULE_TYPE;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/// @dev Returns the version of the contract.
|
|
77
|
+
function contractVersion() external pure returns (uint8) {
|
|
78
|
+
return uint8(VERSION);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/*///////////////////////////////////////////////////////////////
|
|
82
|
+
Airdrop logic
|
|
83
|
+
//////////////////////////////////////////////////////////////*/
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @notice Lets contract-owner send ERC721 tokens to a list of addresses.
|
|
87
|
+
* @dev The token-owner should approve target tokens to Airdrop contract,
|
|
88
|
+
* which acts as operator for the tokens.
|
|
89
|
+
*
|
|
90
|
+
* @param _tokenAddress The contract address of the tokens to transfer.
|
|
91
|
+
* @param _tokenOwner The owner of the tokens to transfer.
|
|
92
|
+
* @param _contents List containing recipient, tokenId to airdrop.
|
|
93
|
+
*/
|
|
94
|
+
function airdropERC721(
|
|
95
|
+
address _tokenAddress,
|
|
96
|
+
address _tokenOwner,
|
|
97
|
+
AirdropContent[] calldata _contents
|
|
98
|
+
) external nonReentrant {
|
|
99
|
+
require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Not authorized.");
|
|
100
|
+
|
|
101
|
+
uint256 len = _contents.length;
|
|
102
|
+
|
|
103
|
+
for (uint256 i = 0; i < len; ) {
|
|
104
|
+
try
|
|
105
|
+
IERC721(_tokenAddress).safeTransferFrom(_tokenOwner, _contents[i].recipient, _contents[i].tokenId)
|
|
106
|
+
{} catch {
|
|
107
|
+
// revert if failure is due to unapproved tokens
|
|
108
|
+
require(
|
|
109
|
+
(IERC721(_tokenAddress).ownerOf(_contents[i].tokenId) == _tokenOwner &&
|
|
110
|
+
address(this) == IERC721(_tokenAddress).getApproved(_contents[i].tokenId)) ||
|
|
111
|
+
IERC721(_tokenAddress).isApprovedForAll(_tokenOwner, address(this)),
|
|
112
|
+
"Not owner or approved"
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
emit AirdropFailed(_tokenAddress, _tokenOwner, _contents[i].recipient, _contents[i].tokenId);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
unchecked {
|
|
119
|
+
i += 1;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/*///////////////////////////////////////////////////////////////
|
|
125
|
+
Miscellaneous
|
|
126
|
+
//////////////////////////////////////////////////////////////*/
|
|
127
|
+
|
|
128
|
+
/// @dev Checks whether contract metadata can be set in the given execution context.
|
|
129
|
+
function _canSetContractURI() internal view override returns (bool) {
|
|
130
|
+
return hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/// @dev See ERC2771
|
|
134
|
+
function _msgSender()
|
|
135
|
+
internal
|
|
136
|
+
view
|
|
137
|
+
virtual
|
|
138
|
+
override(ERC2771ContextUpgradeable, Multicall)
|
|
139
|
+
returns (address sender)
|
|
140
|
+
{
|
|
141
|
+
return ERC2771ContextUpgradeable._msgSender();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
@@ -0,0 +1,197 @@
|
|
|
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
|
+
// ========== External imports ==========
|
|
16
|
+
import "../../../eip/interface/IERC721.sol";
|
|
17
|
+
|
|
18
|
+
import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
|
|
19
|
+
import "../../../extension/Multicall.sol";
|
|
20
|
+
|
|
21
|
+
// ========== Internal imports ==========
|
|
22
|
+
|
|
23
|
+
import "../../interface/airdrop/IAirdropERC721Claimable.sol";
|
|
24
|
+
|
|
25
|
+
// ========== Features ==========
|
|
26
|
+
|
|
27
|
+
import "../../../external-deps/openzeppelin/metatx/ERC2771ContextUpgradeable.sol";
|
|
28
|
+
import "../../../lib/MerkleProof.sol";
|
|
29
|
+
|
|
30
|
+
contract AirdropERC721Claimable is
|
|
31
|
+
Initializable,
|
|
32
|
+
ReentrancyGuardUpgradeable,
|
|
33
|
+
ERC2771ContextUpgradeable,
|
|
34
|
+
Multicall,
|
|
35
|
+
IAirdropERC721Claimable
|
|
36
|
+
{
|
|
37
|
+
/*///////////////////////////////////////////////////////////////
|
|
38
|
+
State variables
|
|
39
|
+
//////////////////////////////////////////////////////////////*/
|
|
40
|
+
|
|
41
|
+
/// @dev address of token being airdropped.
|
|
42
|
+
address public airdropTokenAddress;
|
|
43
|
+
|
|
44
|
+
/// @dev address of owner of tokens being airdropped.
|
|
45
|
+
address public tokenOwner;
|
|
46
|
+
|
|
47
|
+
/// @dev list of tokens to airdrop.
|
|
48
|
+
uint256[] public tokenIds;
|
|
49
|
+
|
|
50
|
+
/// @dev next index in tokenIds[] to claim in the airdrop.
|
|
51
|
+
uint256 public nextIndex;
|
|
52
|
+
|
|
53
|
+
/// @dev number tokens available to claim in tokenIds[].
|
|
54
|
+
uint256 public availableAmount;
|
|
55
|
+
|
|
56
|
+
/// @dev airdrop expiration timestamp.
|
|
57
|
+
uint256 public expirationTimestamp;
|
|
58
|
+
|
|
59
|
+
/// @dev claim limit for open/public claiming without allowlist.
|
|
60
|
+
uint256 public openClaimLimitPerWallet;
|
|
61
|
+
|
|
62
|
+
/// @dev merkle root of the allowlist of addresses eligible to claim.
|
|
63
|
+
bytes32 public merkleRoot;
|
|
64
|
+
|
|
65
|
+
/*///////////////////////////////////////////////////////////////
|
|
66
|
+
Mappings
|
|
67
|
+
//////////////////////////////////////////////////////////////*/
|
|
68
|
+
|
|
69
|
+
/// @dev Mapping from address => total number of tokens a wallet has claimed.
|
|
70
|
+
mapping(address => uint256) public supplyClaimedByWallet;
|
|
71
|
+
|
|
72
|
+
/*///////////////////////////////////////////////////////////////
|
|
73
|
+
Constructor + initializer logic
|
|
74
|
+
//////////////////////////////////////////////////////////////*/
|
|
75
|
+
|
|
76
|
+
constructor() {
|
|
77
|
+
_disableInitializers();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/// @dev Initializes the contract, like a constructor.
|
|
81
|
+
function initialize(
|
|
82
|
+
address[] memory _trustedForwarders,
|
|
83
|
+
address _tokenOwner,
|
|
84
|
+
address _airdropTokenAddress,
|
|
85
|
+
uint256[] memory _tokenIds,
|
|
86
|
+
uint256 _expirationTimestamp,
|
|
87
|
+
uint256 _openClaimLimitPerWallet,
|
|
88
|
+
bytes32 _merkleRoot
|
|
89
|
+
) external initializer {
|
|
90
|
+
__ReentrancyGuard_init();
|
|
91
|
+
__ERC2771Context_init(_trustedForwarders);
|
|
92
|
+
|
|
93
|
+
tokenOwner = _tokenOwner;
|
|
94
|
+
airdropTokenAddress = _airdropTokenAddress;
|
|
95
|
+
tokenIds = _tokenIds;
|
|
96
|
+
expirationTimestamp = _expirationTimestamp;
|
|
97
|
+
openClaimLimitPerWallet = _openClaimLimitPerWallet;
|
|
98
|
+
merkleRoot = _merkleRoot;
|
|
99
|
+
|
|
100
|
+
availableAmount = _tokenIds.length;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/*///////////////////////////////////////////////////////////////
|
|
104
|
+
Claim logic
|
|
105
|
+
//////////////////////////////////////////////////////////////*/
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @notice Lets an account claim a given quantity of NFTs.
|
|
109
|
+
*
|
|
110
|
+
* @param _receiver The receiver of the NFTs to claim.
|
|
111
|
+
* @param _quantity The quantity of NFTs to claim.
|
|
112
|
+
* @param _proofs The proof of the claimer's inclusion in the merkle root allowlist
|
|
113
|
+
* of the claim conditions that apply.
|
|
114
|
+
* @param _proofMaxQuantityForWallet The maximum number of NFTs an address included in an
|
|
115
|
+
* allowlist can claim.
|
|
116
|
+
*/
|
|
117
|
+
function claim(
|
|
118
|
+
address _receiver,
|
|
119
|
+
uint256 _quantity,
|
|
120
|
+
bytes32[] calldata _proofs,
|
|
121
|
+
uint256 _proofMaxQuantityForWallet
|
|
122
|
+
) external nonReentrant {
|
|
123
|
+
address claimer = _msgSender();
|
|
124
|
+
|
|
125
|
+
verifyClaim(claimer, _quantity, _proofs, _proofMaxQuantityForWallet);
|
|
126
|
+
|
|
127
|
+
_transferClaimedTokens(_receiver, _quantity);
|
|
128
|
+
|
|
129
|
+
emit TokensClaimed(_msgSender(), _receiver, _quantity);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/// @dev Checks a request to claim tokens against the active claim condition's criteria.
|
|
133
|
+
function verifyClaim(
|
|
134
|
+
address _claimer,
|
|
135
|
+
uint256 _quantity,
|
|
136
|
+
bytes32[] calldata _proofs,
|
|
137
|
+
uint256 _proofMaxQuantityForWallet
|
|
138
|
+
) public view {
|
|
139
|
+
bool isOverride;
|
|
140
|
+
|
|
141
|
+
/*
|
|
142
|
+
* Here `isOverride` implies that if the merkle proof verification fails,
|
|
143
|
+
* the claimer would claim through open claim limit instead of allowlisted limit.
|
|
144
|
+
*/
|
|
145
|
+
if (merkleRoot != bytes32(0)) {
|
|
146
|
+
(isOverride, ) = MerkleProof.verify(
|
|
147
|
+
_proofs,
|
|
148
|
+
merkleRoot,
|
|
149
|
+
keccak256(abi.encodePacked(_claimer, _proofMaxQuantityForWallet))
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
uint256 supplyClaimedAlready = supplyClaimedByWallet[_claimer];
|
|
154
|
+
|
|
155
|
+
require(_quantity > 0, "Claiming zero tokens");
|
|
156
|
+
require(_quantity <= availableAmount, "exceeds available tokens.");
|
|
157
|
+
|
|
158
|
+
uint256 expTimestamp = expirationTimestamp;
|
|
159
|
+
require(expTimestamp == 0 || block.timestamp < expTimestamp, "airdrop expired.");
|
|
160
|
+
|
|
161
|
+
uint256 claimLimitForWallet = isOverride ? _proofMaxQuantityForWallet : openClaimLimitPerWallet;
|
|
162
|
+
require(_quantity + supplyClaimedAlready <= claimLimitForWallet, "invalid quantity.");
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/// @dev Transfers the tokens being claimed.
|
|
166
|
+
function _transferClaimedTokens(address _to, uint256 _quantityBeingClaimed) internal {
|
|
167
|
+
// if transfer claimed tokens is called when `to != msg.sender`, it'd use msg.sender's limits.
|
|
168
|
+
// behavior would be similar to `msg.sender` mint for itself, then transfer to `_to`.
|
|
169
|
+
supplyClaimedByWallet[_msgSender()] += _quantityBeingClaimed;
|
|
170
|
+
availableAmount -= _quantityBeingClaimed;
|
|
171
|
+
|
|
172
|
+
uint256 index = nextIndex;
|
|
173
|
+
uint256[] memory _tokenIds = tokenIds;
|
|
174
|
+
address _tokenAddress = airdropTokenAddress;
|
|
175
|
+
address _tokenOwner = tokenOwner;
|
|
176
|
+
|
|
177
|
+
for (uint256 i = 0; i < _quantityBeingClaimed; i += 1) {
|
|
178
|
+
IERC721(_tokenAddress).safeTransferFrom(_tokenOwner, _to, _tokenIds[index]);
|
|
179
|
+
index += 1;
|
|
180
|
+
}
|
|
181
|
+
nextIndex = index;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/*///////////////////////////////////////////////////////////////
|
|
185
|
+
Miscellaneous
|
|
186
|
+
//////////////////////////////////////////////////////////////*/
|
|
187
|
+
|
|
188
|
+
function _msgSender()
|
|
189
|
+
internal
|
|
190
|
+
view
|
|
191
|
+
virtual
|
|
192
|
+
override(ERC2771ContextUpgradeable, Multicall)
|
|
193
|
+
returns (address sender)
|
|
194
|
+
{
|
|
195
|
+
return ERC2771ContextUpgradeable._msgSender();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.11;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
// $$\ $$\ $$\ $$\ $$\
|
|
7
|
+
// $$ | $$ | \__| $$ | $$ |
|
|
8
|
+
// $$$$$$\ $$$$$$$\ $$\ $$$$$$\ $$$$$$$ |$$\ $$\ $$\ $$$$$$\ $$$$$$$\
|
|
9
|
+
// \_$$ _| $$ __$$\ $$ |$$ __$$\ $$ __$$ |$$ | $$ | $$ |$$ __$$\ $$ __$$\
|
|
10
|
+
// $$ | $$ | $$ |$$ |$$ | \__|$$ / $$ |$$ | $$ | $$ |$$$$$$$$ |$$ | $$ |
|
|
11
|
+
// $$ |$$\ $$ | $$ |$$ |$$ | $$ | $$ |$$ | $$ | $$ |$$ ____|$$ | $$ |
|
|
12
|
+
// \$$$$ |$$ | $$ |$$ |$$ | \$$$$$$$ |\$$$$$\$$$$ |\$$$$$$$\ $$$$$$$ |
|
|
13
|
+
// \____/ \__| \__|\__|\__| \_______| \_____\____/ \_______|\_______/
|
|
14
|
+
|
|
15
|
+
import "@thirdweb-dev/dynamic-contracts/src/presets/BaseRouter.sol";
|
|
16
|
+
|
|
17
|
+
import "../../../extension/Multicall.sol";
|
|
18
|
+
|
|
19
|
+
import "../../../extension/upgradeable/Initializable.sol";
|
|
20
|
+
import "../../../extension/upgradeable/Permissions.sol";
|
|
21
|
+
import "../../../extension/upgradeable/ERC2771ContextUpgradeable.sol";
|
|
22
|
+
|
|
23
|
+
import "../../../extension/upgradeable/init/ContractMetadataInit.sol";
|
|
24
|
+
import "../../../extension/upgradeable/init/PlatformFeeInit.sol";
|
|
25
|
+
import "../../../extension/upgradeable/init/RoyaltyInit.sol";
|
|
26
|
+
import "../../../extension/upgradeable/init/PrimarySaleInit.sol";
|
|
27
|
+
import "../../../extension/upgradeable/init/OwnableInit.sol";
|
|
28
|
+
import "../../../extension/upgradeable/init/ERC721AInit.sol";
|
|
29
|
+
import "../../../extension/upgradeable/init/PermissionsEnumerableInit.sol";
|
|
30
|
+
import "../../../extension/upgradeable/init/ReentrancyGuardInit.sol";
|
|
31
|
+
|
|
32
|
+
contract BurnToClaimDropERC721 is
|
|
33
|
+
Initializable,
|
|
34
|
+
Multicall,
|
|
35
|
+
ERC2771ContextUpgradeable,
|
|
36
|
+
BaseRouter,
|
|
37
|
+
ContractMetadataInit,
|
|
38
|
+
PlatformFeeInit,
|
|
39
|
+
RoyaltyInit,
|
|
40
|
+
PrimarySaleInit,
|
|
41
|
+
OwnableInit,
|
|
42
|
+
PermissionsEnumerableInit,
|
|
43
|
+
ERC721AInit
|
|
44
|
+
{
|
|
45
|
+
/*///////////////////////////////////////////////////////////////
|
|
46
|
+
Constructor + initializer logic
|
|
47
|
+
//////////////////////////////////////////////////////////////*/
|
|
48
|
+
|
|
49
|
+
constructor(Extension[] memory _extensions) BaseRouter(_extensions) {
|
|
50
|
+
_disableInitializers();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/// @notice Initializes the contract.
|
|
54
|
+
function initialize(
|
|
55
|
+
address _defaultAdmin,
|
|
56
|
+
string memory _name,
|
|
57
|
+
string memory _symbol,
|
|
58
|
+
string memory _contractURI,
|
|
59
|
+
address[] memory _trustedForwarders,
|
|
60
|
+
address _saleRecipient,
|
|
61
|
+
address _royaltyRecipient,
|
|
62
|
+
uint128 _royaltyBps,
|
|
63
|
+
uint128 _platformFeeBps,
|
|
64
|
+
address _platformFeeRecipient
|
|
65
|
+
) external initializer {
|
|
66
|
+
// Initialize extensions
|
|
67
|
+
__BaseRouter_init();
|
|
68
|
+
|
|
69
|
+
// Initialize inherited contracts, most base-like -> most derived.
|
|
70
|
+
__ERC2771Context_init(_trustedForwarders);
|
|
71
|
+
__ERC721A_init(_name, _symbol);
|
|
72
|
+
|
|
73
|
+
_setupContractURI(_contractURI);
|
|
74
|
+
_setupOwner(_defaultAdmin);
|
|
75
|
+
|
|
76
|
+
_setupRoles(_defaultAdmin);
|
|
77
|
+
|
|
78
|
+
_setupPlatformFeeInfo(_platformFeeRecipient, _platformFeeBps);
|
|
79
|
+
_setupDefaultRoyaltyInfo(_royaltyRecipient, _royaltyBps);
|
|
80
|
+
_setupPrimarySaleRecipient(_saleRecipient);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/// @dev Called in the initialize function. Sets up roles.
|
|
84
|
+
function _setupRoles(address _defaultAdmin) internal onlyInitializing {
|
|
85
|
+
bytes32 _transferRole = keccak256("TRANSFER_ROLE");
|
|
86
|
+
bytes32 _minterRole = keccak256("MINTER_ROLE");
|
|
87
|
+
bytes32 _extensionRole = keccak256("EXTENSION_ROLE");
|
|
88
|
+
bytes32 _defaultAdminRole = 0x00;
|
|
89
|
+
|
|
90
|
+
_setupRole(_defaultAdminRole, _defaultAdmin);
|
|
91
|
+
_setupRole(_minterRole, _defaultAdmin);
|
|
92
|
+
_setupRole(_transferRole, _defaultAdmin);
|
|
93
|
+
_setupRole(_transferRole, address(0));
|
|
94
|
+
_setupRole(_extensionRole, _defaultAdmin);
|
|
95
|
+
_setRoleAdmin(_extensionRole, _extensionRole);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/*///////////////////////////////////////////////////////////////
|
|
99
|
+
Contract identifiers
|
|
100
|
+
//////////////////////////////////////////////////////////////*/
|
|
101
|
+
|
|
102
|
+
/// @notice Returns the type of contract.
|
|
103
|
+
function contractType() external pure returns (bytes32) {
|
|
104
|
+
return bytes32("BurnToClaimDropERC721");
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/// @notice Returns the contract version.
|
|
108
|
+
function contractVersion() external pure returns (uint8) {
|
|
109
|
+
return uint8(5);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/*///////////////////////////////////////////////////////////////
|
|
113
|
+
Internal functions
|
|
114
|
+
//////////////////////////////////////////////////////////////*/
|
|
115
|
+
|
|
116
|
+
/// @dev Returns whether all relevant permission and other checks are met before any upgrade.
|
|
117
|
+
function _isAuthorizedCallToUpgrade() internal view virtual override returns (bool) {
|
|
118
|
+
return _hasRole(keccak256("EXTENSION_ROLE"), msg.sender);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/// @dev Checks whether an account holds the given role.
|
|
122
|
+
function _hasRole(bytes32 role, address addr) internal view returns (bool) {
|
|
123
|
+
PermissionsStorage.Data storage data = PermissionsStorage.data();
|
|
124
|
+
return data._hasRole[role][addr];
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/// @notice Returns the sender in the given execution context.
|
|
128
|
+
function _msgSender()
|
|
129
|
+
internal
|
|
130
|
+
view
|
|
131
|
+
virtual
|
|
132
|
+
override(ERC2771ContextUpgradeable, Multicall)
|
|
133
|
+
returns (address sender)
|
|
134
|
+
{
|
|
135
|
+
return ERC2771ContextUpgradeable._msgSender();
|
|
136
|
+
}
|
|
137
|
+
}
|