@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,251 @@
|
|
|
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
|
+
|
|
17
|
+
import "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol";
|
|
18
|
+
import "@openzeppelin/contracts-upgradeable/interfaces/IERC2981Upgradeable.sol";
|
|
19
|
+
|
|
20
|
+
import "../../eip/queryable/ERC721AQueryableUpgradeable.sol";
|
|
21
|
+
|
|
22
|
+
// ========== Internal imports ==========
|
|
23
|
+
|
|
24
|
+
import "../../external-deps/openzeppelin/metatx/ERC2771ContextUpgradeable.sol";
|
|
25
|
+
import { CurrencyTransferLib } from "../../lib/CurrencyTransferLib.sol";
|
|
26
|
+
|
|
27
|
+
// ========== Features ==========
|
|
28
|
+
|
|
29
|
+
import "../../extension/Multicall.sol";
|
|
30
|
+
import "../../extension/upgradeable/ContractMetadata.sol";
|
|
31
|
+
import "../../extension/upgradeable/Royalty.sol";
|
|
32
|
+
import "../../extension/upgradeable/PrimarySale.sol";
|
|
33
|
+
import "../../extension/upgradeable/Ownable.sol";
|
|
34
|
+
import "../../extension/upgradeable/Permissions.sol";
|
|
35
|
+
import "../../extension/upgradeable/Drop.sol";
|
|
36
|
+
import "../../extension/upgradeable/SharedMetadataBatch.sol";
|
|
37
|
+
import { RulesEngine } from "../../extension/upgradeable/RulesEngine.sol";
|
|
38
|
+
|
|
39
|
+
contract EvolvingNFTLogic is
|
|
40
|
+
ContractMetadata,
|
|
41
|
+
Royalty,
|
|
42
|
+
PrimarySale,
|
|
43
|
+
Ownable,
|
|
44
|
+
SharedMetadataBatch,
|
|
45
|
+
Drop,
|
|
46
|
+
ERC2771ContextUpgradeable,
|
|
47
|
+
ERC721AQueryableUpgradeable
|
|
48
|
+
{
|
|
49
|
+
using StringsUpgradeable for uint256;
|
|
50
|
+
using EnumerableSet for EnumerableSet.Bytes32Set;
|
|
51
|
+
|
|
52
|
+
/*///////////////////////////////////////////////////////////////
|
|
53
|
+
State variables
|
|
54
|
+
//////////////////////////////////////////////////////////////*/
|
|
55
|
+
|
|
56
|
+
/// @dev Default admin role for all roles. Only accounts with this role can grant/revoke other roles.
|
|
57
|
+
bytes32 private constant DEFAULT_ADMIN_ROLE = 0x00;
|
|
58
|
+
/// @dev Only TRANSFER_ROLE holders can have tokens transferred from or to them, during restricted transfers.
|
|
59
|
+
bytes32 private constant TRANSFER_ROLE = keccak256("TRANSFER_ROLE");
|
|
60
|
+
/// @dev Only MINTER_ROLE holders can sign off on `MintRequest`s.
|
|
61
|
+
bytes32 private constant MINTER_ROLE = keccak256("MINTER_ROLE");
|
|
62
|
+
|
|
63
|
+
/*///////////////////////////////////////////////////////////////
|
|
64
|
+
ERC 165 / 721 / 2981 logic
|
|
65
|
+
//////////////////////////////////////////////////////////////*/
|
|
66
|
+
|
|
67
|
+
/// @dev Returns the URI for a given tokenId.
|
|
68
|
+
function tokenURI(
|
|
69
|
+
uint256 _tokenId
|
|
70
|
+
) public view virtual override(ERC721AUpgradeable, IERC721AUpgradeable) returns (string memory) {
|
|
71
|
+
if (!_exists(_tokenId)) {
|
|
72
|
+
revert("!ID");
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Get score
|
|
76
|
+
address owner = ownerOf(_tokenId);
|
|
77
|
+
uint256 score = 0;
|
|
78
|
+
|
|
79
|
+
address engine = RulesEngine(address(this)).getRulesEngineOverride();
|
|
80
|
+
if (engine != address(0)) {
|
|
81
|
+
score = RulesEngine(engine).getScore(owner);
|
|
82
|
+
} else {
|
|
83
|
+
score = RulesEngine(address(this)).getScore(owner);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Get the target ID i.e. `start` of the range that the score falls into.
|
|
87
|
+
bytes32[] memory ids = _sharedMetadataBatchStorage().ids.values();
|
|
88
|
+
bytes32 targetId = 0;
|
|
89
|
+
uint256 check = 0;
|
|
90
|
+
|
|
91
|
+
for (uint256 i = 0; i < ids.length; i += 1) {
|
|
92
|
+
uint256 id = uint256(ids[i]);
|
|
93
|
+
|
|
94
|
+
if (id <= score && id >= check) {
|
|
95
|
+
targetId = ids[i];
|
|
96
|
+
check = id;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return _getURIFromSharedMetadata(targetId, _tokenId);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// @dev See ERC 165
|
|
103
|
+
function supportsInterface(
|
|
104
|
+
bytes4 interfaceId
|
|
105
|
+
) public view virtual override(ERC721AUpgradeable, IERC721AUpgradeable, IERC165) returns (bool) {
|
|
106
|
+
return super.supportsInterface(interfaceId) || type(IERC2981Upgradeable).interfaceId == interfaceId;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/// @dev The start token ID for the contract.
|
|
110
|
+
function _startTokenId() internal pure override returns (uint256) {
|
|
111
|
+
return 1;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function startTokenId() public pure returns (uint256) {
|
|
115
|
+
return _startTokenId();
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/*///////////////////////////////////////////////////////////////
|
|
119
|
+
Internal functions
|
|
120
|
+
//////////////////////////////////////////////////////////////*/
|
|
121
|
+
|
|
122
|
+
/// @dev Collects and distributes the primary sale value of NFTs being claimed.
|
|
123
|
+
function _collectPriceOnClaim(
|
|
124
|
+
address _primarySaleRecipient,
|
|
125
|
+
uint256 _quantityToClaim,
|
|
126
|
+
address _currency,
|
|
127
|
+
uint256 _pricePerToken
|
|
128
|
+
) internal override {
|
|
129
|
+
if (_pricePerToken == 0) {
|
|
130
|
+
require(msg.value == 0, "!Value");
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
uint256 totalPrice = _quantityToClaim * _pricePerToken;
|
|
135
|
+
|
|
136
|
+
bool validMsgValue;
|
|
137
|
+
if (_currency == CurrencyTransferLib.NATIVE_TOKEN) {
|
|
138
|
+
validMsgValue = msg.value == totalPrice;
|
|
139
|
+
} else {
|
|
140
|
+
validMsgValue = msg.value == 0;
|
|
141
|
+
}
|
|
142
|
+
require(validMsgValue, "!V");
|
|
143
|
+
|
|
144
|
+
address saleRecipient = _primarySaleRecipient == address(0) ? primarySaleRecipient() : _primarySaleRecipient;
|
|
145
|
+
|
|
146
|
+
CurrencyTransferLib.transferCurrency(_currency, _msgSender(), saleRecipient, totalPrice);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/// @dev Transfers the NFTs being claimed.
|
|
150
|
+
function _transferTokensOnClaim(
|
|
151
|
+
address _to,
|
|
152
|
+
uint256 _quantityBeingClaimed
|
|
153
|
+
) internal override returns (uint256 startTokenId_) {
|
|
154
|
+
startTokenId_ = _nextTokenId();
|
|
155
|
+
_safeMint(_to, _quantityBeingClaimed);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/// @dev Checks whether primary sale recipient can be set in the given execution context.
|
|
159
|
+
function _canSetPrimarySaleRecipient() internal view override returns (bool) {
|
|
160
|
+
return _hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/// @dev Checks whether owner can be set in the given execution context.
|
|
164
|
+
function _canSetOwner() internal view override returns (bool) {
|
|
165
|
+
return _hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/// @dev Checks whether royalty info can be set in the given execution context.
|
|
169
|
+
function _canSetRoyaltyInfo() internal view override returns (bool) {
|
|
170
|
+
return _hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/// @dev Checks whether contract metadata can be set in the given execution context.
|
|
174
|
+
function _canSetContractURI() internal view override returns (bool) {
|
|
175
|
+
return _hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/// @dev Checks whether platform fee info can be set in the given execution context.
|
|
179
|
+
function _canSetClaimConditions() internal view override returns (bool) {
|
|
180
|
+
return _hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/// @dev Returns whether shared metadata can be set in the given execution context.
|
|
184
|
+
function _canSetSharedMetadata() internal view virtual override returns (bool) {
|
|
185
|
+
return _hasRole(MINTER_ROLE, _msgSender());
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/// @dev Checks whether an account has a particular role.
|
|
189
|
+
function _hasRole(bytes32 _role, address _account) internal view returns (bool) {
|
|
190
|
+
PermissionsStorage.Data storage data = PermissionsStorage.data();
|
|
191
|
+
return data._hasRole[_role][_account];
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/*///////////////////////////////////////////////////////////////
|
|
195
|
+
Miscellaneous
|
|
196
|
+
//////////////////////////////////////////////////////////////*/
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Returns the total amount of tokens minted in the contract.
|
|
200
|
+
*/
|
|
201
|
+
function totalMinted() external view returns (uint256) {
|
|
202
|
+
unchecked {
|
|
203
|
+
return _nextTokenId() - _startTokenId();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/// @dev The tokenId of the next NFT that will be minted / lazy minted.
|
|
208
|
+
function nextTokenIdToMint() external view returns (uint256) {
|
|
209
|
+
return _nextTokenId();
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/// @dev The next token ID of the NFT that can be claimed.
|
|
213
|
+
function nextTokenIdToClaim() external view returns (uint256) {
|
|
214
|
+
return _nextTokenId();
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/// @dev Burns `tokenId`. See {ERC721-_burn}.
|
|
218
|
+
function burn(uint256 tokenId) external virtual {
|
|
219
|
+
// note: ERC721AUpgradeable's `_burn(uint256,bool)` internally checks for token approvals.
|
|
220
|
+
_burn(tokenId, true);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/// @dev See {ERC721-_beforeTokenTransfer}.
|
|
224
|
+
function _beforeTokenTransfers(
|
|
225
|
+
address from,
|
|
226
|
+
address to,
|
|
227
|
+
uint256 startTokenId_,
|
|
228
|
+
uint256 quantity
|
|
229
|
+
) internal virtual override {
|
|
230
|
+
super._beforeTokenTransfers(from, to, startTokenId_, quantity);
|
|
231
|
+
|
|
232
|
+
// if transfer is restricted on the contract, we still want to allow burning and minting
|
|
233
|
+
if (!_hasRole(TRANSFER_ROLE, address(0)) && from != address(0) && to != address(0)) {
|
|
234
|
+
if (!_hasRole(TRANSFER_ROLE, from) && !_hasRole(TRANSFER_ROLE, to)) {
|
|
235
|
+
revert("!T");
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
function _dropMsgSender() internal view virtual override returns (address) {
|
|
241
|
+
return _msgSender();
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function _msgSender() internal view virtual override returns (address sender) {
|
|
245
|
+
return ERC2771ContextUpgradeable._msgSender();
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
function _msgData() internal view virtual override returns (bytes calldata) {
|
|
249
|
+
return ERC2771ContextUpgradeable._msgData();
|
|
250
|
+
}
|
|
251
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.11;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
import { PermissionsStorage } from "../../../extension/upgradeable/Permissions.sol";
|
|
7
|
+
import { RulesEngine } from "../../../extension/upgradeable/RulesEngine.sol";
|
|
8
|
+
|
|
9
|
+
contract RulesEngineExtension is RulesEngine {
|
|
10
|
+
/// @dev Returns whether the rules of the contract can be set in the given execution context.
|
|
11
|
+
function _canSetRules() internal view virtual override returns (bool) {
|
|
12
|
+
return _hasRole(keccak256("MINTER_ROLE"), msg.sender);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/// @dev Returns whether the rules engine used by the contract can be overriden in the given execution context.
|
|
16
|
+
function _canOverrideRulesEngine() internal view virtual override returns (bool) {
|
|
17
|
+
// DEFAULT_ADMIN_ROLE
|
|
18
|
+
return _hasRole(0x00, msg.sender);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/// @dev Checks whether an account has a particular role.
|
|
22
|
+
function _hasRole(bytes32 _role, address _account) internal view returns (bool) {
|
|
23
|
+
PermissionsStorage.Data storage data = PermissionsStorage.data();
|
|
24
|
+
return data._hasRole[_role][_account];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.11;
|
|
3
|
+
|
|
4
|
+
import "../../extension/interface/INFTMetadata.sol";
|
|
5
|
+
import "../../extension/interface/ISignatureMintERC721.sol";
|
|
6
|
+
import "../../eip/interface/IERC721.sol";
|
|
7
|
+
|
|
8
|
+
interface ILoyaltyCard {
|
|
9
|
+
/// @dev Emitted when an account with MINTER_ROLE mints an NFT.
|
|
10
|
+
event TokensMinted(address indexed mintedTo, uint256 indexed tokenIdMinted, string uri);
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @notice Lets an account with MINTER_ROLE mint an NFT.
|
|
14
|
+
*
|
|
15
|
+
* @param to The address to mint the NFT to.
|
|
16
|
+
* @param uri The URI to assign to the NFT.
|
|
17
|
+
*
|
|
18
|
+
* @return tokenId of the NFT minted.
|
|
19
|
+
*/
|
|
20
|
+
function mintTo(address to, string calldata uri) external returns (uint256);
|
|
21
|
+
|
|
22
|
+
/// @notice Let's a loyalty card owner or approved operator cancel the loyalty card.
|
|
23
|
+
function cancel(uint256 tokenId) external;
|
|
24
|
+
|
|
25
|
+
/// @notice Let's an approved party cancel the loyalty card (no approval needed).
|
|
26
|
+
function revoke(uint256 tokenId) external;
|
|
27
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.11;
|
|
3
|
+
|
|
4
|
+
interface ILoyaltyPoints {
|
|
5
|
+
/// @dev Emitted when an account with MINTER_ROLE mints an NFT.
|
|
6
|
+
event TokensMinted(address indexed mintedTo, uint256 quantityMinted);
|
|
7
|
+
|
|
8
|
+
/// @notice Returns the total tokens minted to `owner` in the contract's lifetime.
|
|
9
|
+
function getTotalMintedInLifetime(address owner) external view returns (uint256);
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @notice Lets an account with MINTER_ROLE mint an NFT.
|
|
13
|
+
*
|
|
14
|
+
* @param to The address to mint tokens to.
|
|
15
|
+
* @param amount The amount of tokens to mint.
|
|
16
|
+
*/
|
|
17
|
+
function mintTo(address to, uint256 amount) external;
|
|
18
|
+
|
|
19
|
+
/// @notice Let's a loyalty pointsß owner or approved operator cancel the given amount of loyalty points.
|
|
20
|
+
function cancel(address owner, uint256 amount) external;
|
|
21
|
+
|
|
22
|
+
/// @notice Let's an approved party revoke a holder's loyalty points (no approval needed).
|
|
23
|
+
function revoke(address owner, uint256 amount) external;
|
|
24
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.11;
|
|
3
|
+
|
|
4
|
+
import "../../extension/interface/ITokenBundle.sol";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Thirdweb's Multiwrap contract lets you wrap arbitrary ERC20, ERC721 and ERC1155
|
|
8
|
+
* tokens you own into a single wrapped token / NFT.
|
|
9
|
+
*
|
|
10
|
+
* A wrapped NFT can be unwrapped i.e. burned in exchange for its underlying contents.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
interface IMultiwrap is ITokenBundle {
|
|
14
|
+
/// @dev Emitted when tokens are wrapped.
|
|
15
|
+
event TokensWrapped(
|
|
16
|
+
address indexed wrapper,
|
|
17
|
+
address indexed recipientOfWrappedToken,
|
|
18
|
+
uint256 indexed tokenIdOfWrappedToken,
|
|
19
|
+
Token[] wrappedContents
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
/// @dev Emitted when tokens are unwrapped.
|
|
23
|
+
event TokensUnwrapped(
|
|
24
|
+
address indexed unwrapper,
|
|
25
|
+
address indexed recipientOfWrappedContents,
|
|
26
|
+
uint256 indexed tokenIdOfWrappedToken
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @notice Wrap multiple ERC1155, ERC721, ERC20 tokens into a single wrapped NFT.
|
|
31
|
+
*
|
|
32
|
+
* @param wrappedContents The tokens to wrap.
|
|
33
|
+
* @param uriForWrappedToken The metadata URI for the wrapped NFT.
|
|
34
|
+
* @param recipient The recipient of the wrapped NFT.
|
|
35
|
+
*/
|
|
36
|
+
function wrap(
|
|
37
|
+
Token[] memory wrappedContents,
|
|
38
|
+
string calldata uriForWrappedToken,
|
|
39
|
+
address recipient
|
|
40
|
+
) external payable returns (uint256 tokenId);
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @notice Unwrap a wrapped NFT to retrieve underlying ERC1155, ERC721, ERC20 tokens.
|
|
44
|
+
*
|
|
45
|
+
* @param tokenId The token Id of the wrapped NFT to unwrap.
|
|
46
|
+
* @param recipient The recipient of the underlying ERC1155, ERC721, ERC20 tokens of the wrapped NFT.
|
|
47
|
+
*/
|
|
48
|
+
function unwrap(uint256 tokenId, address recipient) external;
|
|
49
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.11;
|
|
3
|
+
|
|
4
|
+
import "../../extension/interface/ITokenBundle.sol";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The thirdweb `Pack` contract is a lootbox mechanism. An account can bundle up arbitrary ERC20, ERC721 and ERC1155 tokens into
|
|
8
|
+
* a set of packs. A pack can then be opened in return for a selection of the tokens in the pack. The selection of tokens distributed
|
|
9
|
+
* on opening a pack depends on the relative supply of all tokens in the packs.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
interface IPack is ITokenBundle {
|
|
13
|
+
/**
|
|
14
|
+
* @notice All info relevant to packs.
|
|
15
|
+
*
|
|
16
|
+
* @param perUnitAmounts Mapping from a UID -> to the per-unit amount of that asset i.e. `Token` at that index.
|
|
17
|
+
* @param openStartTimestamp The timestamp after which packs can be opened.
|
|
18
|
+
* @param amountDistributedPerOpen The number of reward units distributed per open.
|
|
19
|
+
*/
|
|
20
|
+
struct PackInfo {
|
|
21
|
+
uint256[] perUnitAmounts;
|
|
22
|
+
uint128 openStartTimestamp;
|
|
23
|
+
uint128 amountDistributedPerOpen;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/// @notice Emitted when a set of packs is created.
|
|
27
|
+
event PackCreated(uint256 indexed packId, address recipient, uint256 totalPacksCreated);
|
|
28
|
+
|
|
29
|
+
/// @notice Emitted when more packs are minted for a packId.
|
|
30
|
+
event PackUpdated(uint256 indexed packId, address recipient, uint256 totalPacksCreated);
|
|
31
|
+
|
|
32
|
+
/// @notice Emitted when a pack is opened.
|
|
33
|
+
event PackOpened(
|
|
34
|
+
uint256 indexed packId,
|
|
35
|
+
address indexed opener,
|
|
36
|
+
uint256 numOfPacksOpened,
|
|
37
|
+
Token[] rewardUnitsDistributed
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @notice Creates a pack with the stated contents.
|
|
42
|
+
*
|
|
43
|
+
* @param contents The reward units to pack in the packs.
|
|
44
|
+
* @param numOfRewardUnits The number of reward units to create, for each asset specified in `contents`.
|
|
45
|
+
* @param packUri The (metadata) URI assigned to the packs created.
|
|
46
|
+
* @param openStartTimestamp The timestamp after which packs can be opened.
|
|
47
|
+
* @param amountDistributedPerOpen The number of reward units distributed per open.
|
|
48
|
+
* @param recipient The recipient of the packs created.
|
|
49
|
+
*
|
|
50
|
+
* @return packId The unique identifier of the created set of packs.
|
|
51
|
+
* @return packTotalSupply The total number of packs created.
|
|
52
|
+
*/
|
|
53
|
+
function createPack(
|
|
54
|
+
Token[] calldata contents,
|
|
55
|
+
uint256[] calldata numOfRewardUnits,
|
|
56
|
+
string calldata packUri,
|
|
57
|
+
uint128 openStartTimestamp,
|
|
58
|
+
uint128 amountDistributedPerOpen,
|
|
59
|
+
address recipient
|
|
60
|
+
) external payable returns (uint256 packId, uint256 packTotalSupply);
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @notice Lets a pack owner open a pack and receive the pack's reward unit.
|
|
64
|
+
*
|
|
65
|
+
* @param packId The identifier of the pack to open.
|
|
66
|
+
* @param amountToOpen The number of packs to open at once.
|
|
67
|
+
*/
|
|
68
|
+
function openPack(uint256 packId, uint256 amountToOpen) external returns (Token[] memory);
|
|
69
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.11;
|
|
3
|
+
|
|
4
|
+
import "../../extension/interface/ITokenBundle.sol";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The thirdweb `Pack` contract is a lootbox mechanism. An account can bundle up arbitrary ERC20, ERC721 and ERC1155 tokens into
|
|
8
|
+
* a set of packs. A pack can then be opened in return for a selection of the tokens in the pack. The selection of tokens distributed
|
|
9
|
+
* on opening a pack depends on the relative supply of all tokens in the packs.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
interface IPackVRFDirect is ITokenBundle {
|
|
13
|
+
/**
|
|
14
|
+
* @notice All info relevant to packs.
|
|
15
|
+
*
|
|
16
|
+
* @param perUnitAmounts Mapping from a UID -> to the per-unit amount of that asset i.e. `Token` at that index.
|
|
17
|
+
* @param openStartTimestamp The timestamp after which packs can be opened.
|
|
18
|
+
* @param amountDistributedPerOpen The number of reward units distributed per open.
|
|
19
|
+
*/
|
|
20
|
+
struct PackInfo {
|
|
21
|
+
uint256[] perUnitAmounts;
|
|
22
|
+
uint128 openStartTimestamp;
|
|
23
|
+
uint128 amountDistributedPerOpen;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/// @notice Emitted when a set of packs is created.
|
|
27
|
+
event PackCreated(uint256 indexed packId, address recipient, uint256 totalPacksCreated);
|
|
28
|
+
|
|
29
|
+
/// @notice Emitted when the opening of a pack is requested.
|
|
30
|
+
event PackOpenRequested(address indexed opener, uint256 indexed packId, uint256 amountToOpen, uint256 requestId);
|
|
31
|
+
|
|
32
|
+
/// @notice Emitted when Chainlink VRF fulfills a random number request.
|
|
33
|
+
event PackRandomnessFulfilled(uint256 indexed packId, uint256 indexed requestId);
|
|
34
|
+
|
|
35
|
+
/// @notice Emitted when a pack is opened.
|
|
36
|
+
event PackOpened(
|
|
37
|
+
uint256 indexed packId,
|
|
38
|
+
address indexed opener,
|
|
39
|
+
uint256 numOfPacksOpened,
|
|
40
|
+
Token[] rewardUnitsDistributed
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @notice Creates a pack with the stated contents.
|
|
45
|
+
*
|
|
46
|
+
* @param contents The reward units to pack in the packs.
|
|
47
|
+
* @param numOfRewardUnits The number of reward units to create, for each asset specified in `contents`.
|
|
48
|
+
* @param packUri The (metadata) URI assigned to the packs created.
|
|
49
|
+
* @param openStartTimestamp The timestamp after which packs can be opened.
|
|
50
|
+
* @param amountDistributedPerOpen The number of reward units distributed per open.
|
|
51
|
+
* @param recipient The recipient of the packs created.
|
|
52
|
+
*
|
|
53
|
+
* @return packId The unique identifier of the created set of packs.
|
|
54
|
+
* @return packTotalSupply The total number of packs created.
|
|
55
|
+
*/
|
|
56
|
+
function createPack(
|
|
57
|
+
Token[] calldata contents,
|
|
58
|
+
uint256[] calldata numOfRewardUnits,
|
|
59
|
+
string calldata packUri,
|
|
60
|
+
uint128 openStartTimestamp,
|
|
61
|
+
uint128 amountDistributedPerOpen,
|
|
62
|
+
address recipient
|
|
63
|
+
) external payable returns (uint256 packId, uint256 packTotalSupply);
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @notice Lets a pack owner request to open a pack.
|
|
67
|
+
*
|
|
68
|
+
* @param packId The identifier of the pack to open.
|
|
69
|
+
* @param amountToOpen The number of packs to open at once.
|
|
70
|
+
*/
|
|
71
|
+
function openPack(uint256 packId, uint256 amountToOpen) external returns (uint256 requestId);
|
|
72
|
+
|
|
73
|
+
/// @notice Called by a pack opener to claim rewards from the opened pack.
|
|
74
|
+
function claimRewards() external returns (Token[] memory rewardUnits);
|
|
75
|
+
|
|
76
|
+
/// @notice Called by a pack opener to open a pack in a single transaction, instead of calling openPack and claimRewards separately.
|
|
77
|
+
function openPackAndClaimRewards(
|
|
78
|
+
uint256 _packId,
|
|
79
|
+
uint256 _amountToOpen,
|
|
80
|
+
uint32 _callBackGasLimit
|
|
81
|
+
) external returns (uint256);
|
|
82
|
+
|
|
83
|
+
/// @notice Returns whether a pack opener is ready to call `claimRewards`.
|
|
84
|
+
function canClaimRewards(address _opener) external view returns (bool);
|
|
85
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.11;
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Thirdweb's `Airdrop` contracts provide a lightweight and easy to use mechanism
|
|
6
|
+
* to drop tokens.
|
|
7
|
+
*
|
|
8
|
+
* `AirdropERC1155` contract is an airdrop contract for ERC1155 tokens. It follows a
|
|
9
|
+
* push mechanism for transfer of tokens to intended recipients.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
interface IAirdropERC1155 {
|
|
13
|
+
/// @notice Emitted when an airdrop fails for a recipient address.
|
|
14
|
+
event AirdropFailed(
|
|
15
|
+
address indexed tokenAddress,
|
|
16
|
+
address indexed tokenOwner,
|
|
17
|
+
address indexed recipient,
|
|
18
|
+
uint256 tokenId,
|
|
19
|
+
uint256 amount
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @notice Details of amount and recipient for airdropped token.
|
|
24
|
+
*
|
|
25
|
+
* @param recipient The recipient of the tokens.
|
|
26
|
+
* @param tokenId ID of the ERC1155 token being airdropped.
|
|
27
|
+
* @param amount The quantity of tokens to airdrop.
|
|
28
|
+
*/
|
|
29
|
+
struct AirdropContent {
|
|
30
|
+
address recipient;
|
|
31
|
+
uint256 tokenId;
|
|
32
|
+
uint256 amount;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @notice Lets contract-owner send ERC1155 tokens to a list of addresses.
|
|
37
|
+
* @dev The token-owner should approve target tokens to Airdrop contract,
|
|
38
|
+
* which acts as operator for the tokens.
|
|
39
|
+
*
|
|
40
|
+
* @param tokenAddress The contract address of the tokens to transfer.
|
|
41
|
+
* @param tokenOwner The owner of the tokens to transfer.
|
|
42
|
+
* @param contents List containing recipient, tokenId to airdrop.
|
|
43
|
+
*/
|
|
44
|
+
function airdropERC1155(address tokenAddress, address tokenOwner, AirdropContent[] calldata contents) external;
|
|
45
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.11;
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Thirdweb's `Airdrop` contracts provide a lightweight and easy to use mechanism
|
|
6
|
+
* to drop tokens.
|
|
7
|
+
*
|
|
8
|
+
* `AirdropERC1155Claimable` contract is an airdrop contract for ERC1155 tokens. It follows a
|
|
9
|
+
* pull mechanism for transfer of tokens, where allowlisted recipients can claim tokens from
|
|
10
|
+
* the contract.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
interface IAirdropERC1155Claimable {
|
|
14
|
+
/// @dev Emitted when tokens are claimed.
|
|
15
|
+
event TokensClaimed(
|
|
16
|
+
address indexed claimer,
|
|
17
|
+
address indexed receiver,
|
|
18
|
+
uint256 indexed tokenId,
|
|
19
|
+
uint256 quantityClaimed
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @notice Lets an account claim a given quantity of ERC1155 tokens.
|
|
24
|
+
*
|
|
25
|
+
* @param receiver The receiver of the tokens to claim.
|
|
26
|
+
* @param quantity The quantity of tokens to claim.
|
|
27
|
+
* @param tokenId Token Id to claim.
|
|
28
|
+
* @param proofs The proof of the claimer's inclusion in the merkle root allowlist
|
|
29
|
+
* of the claim conditions that apply.
|
|
30
|
+
* @param proofMaxQuantityForWallet The maximum number of tokens an address included in an
|
|
31
|
+
* allowlist can claim.
|
|
32
|
+
*/
|
|
33
|
+
function claim(
|
|
34
|
+
address receiver,
|
|
35
|
+
uint256 quantity,
|
|
36
|
+
uint256 tokenId,
|
|
37
|
+
bytes32[] calldata proofs,
|
|
38
|
+
uint256 proofMaxQuantityForWallet
|
|
39
|
+
) external;
|
|
40
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.11;
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Thirdweb's `Airdrop` contracts provide a lightweight and easy to use mechanism
|
|
6
|
+
* to drop tokens.
|
|
7
|
+
*
|
|
8
|
+
* `AirdropERC20` contract is an airdrop contract for ERC20 tokens. It follows a
|
|
9
|
+
* push mechanism for transfer of tokens to intended recipients.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
interface IAirdropERC20 {
|
|
13
|
+
/// @notice Emitted when an airdrop fails for a recipient address.
|
|
14
|
+
event AirdropFailed(
|
|
15
|
+
address indexed tokenAddress,
|
|
16
|
+
address indexed tokenOwner,
|
|
17
|
+
address indexed recipient,
|
|
18
|
+
uint256 amount
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @notice Details of amount and recipient for airdropped token.
|
|
23
|
+
*
|
|
24
|
+
* @param recipient The recipient of the tokens.
|
|
25
|
+
* @param amount The quantity of tokens to airdrop.
|
|
26
|
+
*/
|
|
27
|
+
struct AirdropContent {
|
|
28
|
+
address recipient;
|
|
29
|
+
uint256 amount;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @notice Lets contract-owner send ERC20 tokens to a list of addresses.
|
|
34
|
+
* @dev The token-owner should approve target tokens to Airdrop contract,
|
|
35
|
+
* which acts as operator for the tokens.
|
|
36
|
+
*
|
|
37
|
+
* @param tokenAddress The contract address of the tokens to transfer.
|
|
38
|
+
* @param tokenOwner The owner of the tokens to transfer.
|
|
39
|
+
* @param contents List containing recipient, tokenId to airdrop.
|
|
40
|
+
*/
|
|
41
|
+
function airdropERC20(
|
|
42
|
+
address tokenAddress,
|
|
43
|
+
address tokenOwner,
|
|
44
|
+
AirdropContent[] calldata contents
|
|
45
|
+
) external payable;
|
|
46
|
+
}
|