@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,144 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
library BatchMintMetadataStorage {
|
|
5
|
+
/// @custom:storage-location erc7201:batch.mint.metadata.storage
|
|
6
|
+
/// @dev keccak256(abi.encode(uint256(keccak256("batch.mint.metadata.storage")) - 1)) & ~bytes32(uint256(0xff))
|
|
7
|
+
bytes32 public constant BATCH_MINT_METADATA_STORAGE_POSITION =
|
|
8
|
+
0xf5b99f0648d517803cfbd359284c3fd81ac54e1c89b4874d917ae042d05e8500;
|
|
9
|
+
|
|
10
|
+
struct Data {
|
|
11
|
+
/// @dev Largest tokenId of each batch of tokens with the same baseURI.
|
|
12
|
+
uint256[] batchIds;
|
|
13
|
+
/// @dev Mapping from id of a batch of tokens => to base URI for the respective batch of tokens.
|
|
14
|
+
mapping(uint256 => string) baseURI;
|
|
15
|
+
/// @dev Mapping from id of a batch of tokens => to whether the base URI for the respective batch of tokens is frozen.
|
|
16
|
+
mapping(uint256 => bool) batchFrozen;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function data() internal pure returns (Data storage data_) {
|
|
20
|
+
bytes32 position = BATCH_MINT_METADATA_STORAGE_POSITION;
|
|
21
|
+
assembly {
|
|
22
|
+
data_.slot := position
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @title Batch-mint Metadata
|
|
29
|
+
* @notice The `BatchMintMetadata` is a contract extension for any base NFT contract. It lets the smart contract
|
|
30
|
+
* using this extension set metadata for `n` number of NFTs all at once. This is enabled by storing a single
|
|
31
|
+
* base URI for a batch of `n` NFTs, where the metadata for each NFT in a relevant batch is `baseURI/tokenId`.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
contract BatchMintMetadata {
|
|
35
|
+
/// @dev This event emits when the metadata of all tokens are frozen.
|
|
36
|
+
/// While not currently supported by marketplaces, this event allows
|
|
37
|
+
/// future indexing if desired.
|
|
38
|
+
event MetadataFrozen();
|
|
39
|
+
|
|
40
|
+
// @dev This event emits when the metadata of a range of tokens is updated.
|
|
41
|
+
/// So that the third-party platforms such as NFT market could
|
|
42
|
+
/// timely update the images and related attributes of the NFTs.
|
|
43
|
+
event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId);
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @notice Returns the count of batches of NFTs.
|
|
47
|
+
* @dev Each batch of tokens has an in ID and an associated `baseURI`.
|
|
48
|
+
* See {batchIds}.
|
|
49
|
+
*/
|
|
50
|
+
function getBaseURICount() public view returns (uint256) {
|
|
51
|
+
return _batchMintMetadataStorage().batchIds.length;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @notice Returns the ID for the batch of tokens the given tokenId belongs to.
|
|
56
|
+
* @dev See {getBaseURICount}.
|
|
57
|
+
* @param _index ID of a token.
|
|
58
|
+
*/
|
|
59
|
+
function getBatchIdAtIndex(uint256 _index) public view returns (uint256) {
|
|
60
|
+
if (_index >= getBaseURICount()) {
|
|
61
|
+
revert("Invalid index");
|
|
62
|
+
}
|
|
63
|
+
return _batchMintMetadataStorage().batchIds[_index];
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/// @dev Returns the id for the batch of tokens the given tokenId belongs to.
|
|
67
|
+
function _getBatchId(uint256 _tokenId) internal view returns (uint256 batchId, uint256 index) {
|
|
68
|
+
uint256 numOfTokenBatches = getBaseURICount();
|
|
69
|
+
uint256[] memory indices = _batchMintMetadataStorage().batchIds;
|
|
70
|
+
|
|
71
|
+
for (uint256 i = 0; i < numOfTokenBatches; i += 1) {
|
|
72
|
+
if (_tokenId < indices[i]) {
|
|
73
|
+
index = i;
|
|
74
|
+
batchId = indices[i];
|
|
75
|
+
|
|
76
|
+
return (batchId, index);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
revert("Invalid tokenId");
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/// @dev Returns the baseURI for a token. The intended metadata URI for the token is baseURI + tokenId.
|
|
84
|
+
function _getBaseURI(uint256 _tokenId) internal view returns (string memory) {
|
|
85
|
+
uint256 numOfTokenBatches = getBaseURICount();
|
|
86
|
+
uint256[] memory indices = _batchMintMetadataStorage().batchIds;
|
|
87
|
+
|
|
88
|
+
for (uint256 i = 0; i < numOfTokenBatches; i += 1) {
|
|
89
|
+
if (_tokenId < indices[i]) {
|
|
90
|
+
return _batchMintMetadataStorage().baseURI[indices[i]];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
revert("Invalid tokenId");
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/// @dev returns the starting tokenId of a given batchId.
|
|
97
|
+
function _getBatchStartId(uint256 _batchID) internal view returns (uint256) {
|
|
98
|
+
uint256 numOfTokenBatches = getBaseURICount();
|
|
99
|
+
uint256[] memory indices = _batchMintMetadataStorage().batchIds;
|
|
100
|
+
|
|
101
|
+
for (uint256 i = 0; i < numOfTokenBatches; i++) {
|
|
102
|
+
if (_batchID == indices[i]) {
|
|
103
|
+
if (i > 0) {
|
|
104
|
+
return indices[i - 1];
|
|
105
|
+
}
|
|
106
|
+
return 0;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
revert("Invalid batchId");
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/// @dev Sets the base URI for the batch of tokens with the given batchId.
|
|
113
|
+
function _setBaseURI(uint256 _batchId, string memory _baseURI) internal {
|
|
114
|
+
require(!_batchMintMetadataStorage().batchFrozen[_batchId], "Batch frozen");
|
|
115
|
+
_batchMintMetadataStorage().baseURI[_batchId] = _baseURI;
|
|
116
|
+
emit BatchMetadataUpdate(_getBatchStartId(_batchId), _batchId);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/// @dev Freezes the base URI for the batch of tokens with the given batchId.
|
|
120
|
+
function _freezeBaseURI(uint256 _batchId) internal {
|
|
121
|
+
string memory baseURIForBatch = _batchMintMetadataStorage().baseURI[_batchId];
|
|
122
|
+
require(bytes(baseURIForBatch).length > 0, "Invalid batch");
|
|
123
|
+
_batchMintMetadataStorage().batchFrozen[_batchId] = true;
|
|
124
|
+
emit MetadataFrozen();
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/// @dev Mints a batch of tokenIds and associates a common baseURI to all those Ids.
|
|
128
|
+
function _batchMintMetadata(
|
|
129
|
+
uint256 _startId,
|
|
130
|
+
uint256 _amountToMint,
|
|
131
|
+
string memory _baseURIForTokens
|
|
132
|
+
) internal returns (uint256 nextTokenIdToMint, uint256 batchId) {
|
|
133
|
+
batchId = _startId + _amountToMint;
|
|
134
|
+
nextTokenIdToMint = batchId;
|
|
135
|
+
|
|
136
|
+
_batchMintMetadataStorage().batchIds.push(batchId);
|
|
137
|
+
_batchMintMetadataStorage().baseURI[batchId] = _baseURIForTokens;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/// @dev Returns the BatchMintMetadata storage.
|
|
141
|
+
function _batchMintMetadataStorage() internal pure returns (BatchMintMetadataStorage.Data storage data) {
|
|
142
|
+
data = BatchMintMetadataStorage.data();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
import { ERC1155Burnable } from "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol";
|
|
7
|
+
import { ERC721Burnable } from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol";
|
|
8
|
+
|
|
9
|
+
import "../../eip/interface/IERC1155.sol";
|
|
10
|
+
import "../../eip/interface/IERC721.sol";
|
|
11
|
+
|
|
12
|
+
import "../interface/IBurnToClaim.sol";
|
|
13
|
+
|
|
14
|
+
library BurnToClaimStorage {
|
|
15
|
+
/// @custom:storage-location erc7201:burn.to.claim.storage
|
|
16
|
+
/// @dev keccak256(abi.encode(uint256(keccak256("burn.to.claim.storage")) - 1)) & ~bytes32(uint256(0xff))
|
|
17
|
+
bytes32 public constant BURN_TO_CLAIM_STORAGE_POSITION =
|
|
18
|
+
0x6f0d20bed2d5528732497d5a17ac45087a6175b2a140eebe2a39ab447d7ad400;
|
|
19
|
+
|
|
20
|
+
struct Data {
|
|
21
|
+
IBurnToClaim.BurnToClaimInfo burnToClaimInfo;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function data() internal pure returns (Data storage data_) {
|
|
25
|
+
bytes32 position = BURN_TO_CLAIM_STORAGE_POSITION;
|
|
26
|
+
assembly {
|
|
27
|
+
data_.slot := position
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
abstract contract BurnToClaim is IBurnToClaim {
|
|
33
|
+
/// @notice Returns the confugration for burning tokens to claim new tokens.
|
|
34
|
+
function getBurnToClaimInfo() public view returns (BurnToClaimInfo memory) {
|
|
35
|
+
return _burnToClaimStorage().burnToClaimInfo;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/// @notice Sets the configuration for burning tokens to claim new tokens.
|
|
39
|
+
function setBurnToClaimInfo(BurnToClaimInfo calldata _burnToClaimInfo) external virtual {
|
|
40
|
+
require(_canSetBurnToClaim(), "Not authorized.");
|
|
41
|
+
require(_burnToClaimInfo.originContractAddress != address(0), "Origin contract not set.");
|
|
42
|
+
require(_burnToClaimInfo.currency != address(0), "Currency not set.");
|
|
43
|
+
|
|
44
|
+
_burnToClaimStorage().burnToClaimInfo = _burnToClaimInfo;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/// @notice Verifies an attempt to burn tokens to claim new tokens.
|
|
48
|
+
function verifyBurnToClaim(address _tokenOwner, uint256 _tokenId, uint256 _quantity) public view virtual {
|
|
49
|
+
BurnToClaimInfo memory _burnToClaimInfo = getBurnToClaimInfo();
|
|
50
|
+
|
|
51
|
+
if (_burnToClaimInfo.tokenType == IBurnToClaim.TokenType.ERC721) {
|
|
52
|
+
require(_quantity == 1, "Invalid amount");
|
|
53
|
+
require(IERC721(_burnToClaimInfo.originContractAddress).ownerOf(_tokenId) == _tokenOwner, "!Owner");
|
|
54
|
+
} else if (_burnToClaimInfo.tokenType == IBurnToClaim.TokenType.ERC1155) {
|
|
55
|
+
uint256 _eligible1155TokenId = _burnToClaimInfo.tokenId;
|
|
56
|
+
|
|
57
|
+
require(_tokenId == _eligible1155TokenId, "Invalid token Id");
|
|
58
|
+
require(
|
|
59
|
+
IERC1155(_burnToClaimInfo.originContractAddress).balanceOf(_tokenOwner, _tokenId) >= _quantity,
|
|
60
|
+
"!Balance"
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/// @dev Burns tokens to claim new tokens.
|
|
66
|
+
function _burnTokensOnOrigin(address _tokenOwner, uint256 _tokenId, uint256 _quantity) internal virtual {
|
|
67
|
+
BurnToClaimInfo memory _burnToClaimInfo = getBurnToClaimInfo();
|
|
68
|
+
|
|
69
|
+
if (_burnToClaimInfo.tokenType == IBurnToClaim.TokenType.ERC721) {
|
|
70
|
+
ERC721Burnable(_burnToClaimInfo.originContractAddress).burn(_tokenId);
|
|
71
|
+
} else if (_burnToClaimInfo.tokenType == IBurnToClaim.TokenType.ERC1155) {
|
|
72
|
+
ERC1155Burnable(_burnToClaimInfo.originContractAddress).burn(_tokenOwner, _tokenId, _quantity);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/// @dev Returns the BurnToClaimStorage storage.
|
|
77
|
+
function _burnToClaimStorage() internal pure returns (BurnToClaimStorage.Data storage data) {
|
|
78
|
+
data = BurnToClaimStorage.data();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/// @dev Returns whether the caller can set the burn to claim configuration.
|
|
82
|
+
function _canSetBurnToClaim() internal view virtual returns (bool);
|
|
83
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
import "../interface/IContractMetadata.sol";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @author thirdweb.com
|
|
10
|
+
*
|
|
11
|
+
* @title Contract Metadata
|
|
12
|
+
* @notice Thirdweb's `ContractMetadata` is a contract extension for any base contracts. It lets you set a metadata URI
|
|
13
|
+
* for you contract.
|
|
14
|
+
* Additionally, `ContractMetadata` is necessary for NFT contracts that want royalties to get distributed on OpenSea.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
library ContractMetadataStorage {
|
|
18
|
+
/// @custom:storage-location erc7201:contract.metadata.storage
|
|
19
|
+
/// @dev keccak256(abi.encode(uint256(keccak256("contract.metadata.storage")) - 1)) & ~bytes32(uint256(0xff))
|
|
20
|
+
bytes32 public constant CONTRACT_METADATA_STORAGE_POSITION =
|
|
21
|
+
0x4bc804ba64359c0e35e5ed5d90ee596ecaa49a3a930ddcb1470ea0dd625da900;
|
|
22
|
+
|
|
23
|
+
struct Data {
|
|
24
|
+
/// @notice Returns the contract metadata URI.
|
|
25
|
+
string contractURI;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function data() internal pure returns (Data storage data_) {
|
|
29
|
+
bytes32 position = CONTRACT_METADATA_STORAGE_POSITION;
|
|
30
|
+
assembly {
|
|
31
|
+
data_.slot := position
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
abstract contract ContractMetadata is IContractMetadata {
|
|
37
|
+
/**
|
|
38
|
+
* @notice Lets a contract admin set the URI for contract-level metadata.
|
|
39
|
+
* @dev Caller should be authorized to setup contractURI, e.g. contract admin.
|
|
40
|
+
* See {_canSetContractURI}.
|
|
41
|
+
* Emits {ContractURIUpdated Event}.
|
|
42
|
+
*
|
|
43
|
+
* @param _uri keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
|
|
44
|
+
*/
|
|
45
|
+
function setContractURI(string memory _uri) external override {
|
|
46
|
+
if (!_canSetContractURI()) {
|
|
47
|
+
revert("Not authorized");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
_setupContractURI(_uri);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/// @dev Lets a contract admin set the URI for contract-level metadata.
|
|
54
|
+
function _setupContractURI(string memory _uri) internal {
|
|
55
|
+
string memory prevURI = _contractMetadataStorage().contractURI;
|
|
56
|
+
_contractMetadataStorage().contractURI = _uri;
|
|
57
|
+
|
|
58
|
+
emit ContractURIUpdated(prevURI, _uri);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/// @notice Returns the contract metadata URI.
|
|
62
|
+
function contractURI() public view virtual override returns (string memory) {
|
|
63
|
+
return _contractMetadataStorage().contractURI;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/// @dev Returns the AccountPermissions storage.
|
|
67
|
+
function _contractMetadataStorage() internal pure returns (ContractMetadataStorage.Data storage data) {
|
|
68
|
+
data = ContractMetadataStorage.data();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/// @dev Returns whether contract metadata can be set in the given execution context.
|
|
72
|
+
function _canSetContractURI() internal view virtual returns (bool);
|
|
73
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
import "../interface/IDelayedReveal.sol";
|
|
7
|
+
|
|
8
|
+
library DelayedRevealStorage {
|
|
9
|
+
/// @custom:storage-location erc7201:delayed.reveal.storage
|
|
10
|
+
///@dev keccak256(abi.encode(uint256(keccak256("delayed.reveal.storage")) - 1)) & ~bytes32(uint256(0xff))
|
|
11
|
+
bytes32 public constant DELAYED_REVEAL_STORAGE_POSITION =
|
|
12
|
+
0x29cbb6a3768b42f407b01945994a37861bf5a2179c5dea5be7e378415e755100;
|
|
13
|
+
|
|
14
|
+
struct Data {
|
|
15
|
+
/// @dev Mapping from tokenId of a batch of tokens => to delayed reveal data.
|
|
16
|
+
mapping(uint256 => bytes) encryptedData;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function data() internal pure returns (Data storage data_) {
|
|
20
|
+
bytes32 position = DELAYED_REVEAL_STORAGE_POSITION;
|
|
21
|
+
assembly {
|
|
22
|
+
data_.slot := position
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @title Delayed Reveal
|
|
29
|
+
* @notice Thirdweb's `DelayedReveal` is a contract extension for base NFT contracts. It lets you create batches of
|
|
30
|
+
* 'delayed-reveal' NFTs. You can learn more about the usage of delayed reveal NFTs here - https://blog.thirdweb.com/delayed-reveal-nfts
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
abstract contract DelayedReveal is IDelayedReveal {
|
|
34
|
+
/// @dev Mapping from tokenId of a batch of tokens => to delayed reveal data.
|
|
35
|
+
function encryptedData(uint256 _tokenId) public view returns (bytes memory) {
|
|
36
|
+
return _delayedRevealStorage().encryptedData[_tokenId];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/// @dev Sets the delayed reveal data for a batchId.
|
|
40
|
+
function _setEncryptedData(uint256 _batchId, bytes memory _encryptedData) internal {
|
|
41
|
+
_delayedRevealStorage().encryptedData[_batchId] = _encryptedData;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @notice Returns revealed URI for a batch of NFTs.
|
|
46
|
+
* @dev Reveal encrypted base URI for `_batchId` with caller/admin's `_key` used for encryption.
|
|
47
|
+
* Reverts if there's no encrypted URI for `_batchId`.
|
|
48
|
+
* See {encryptDecrypt}.
|
|
49
|
+
*
|
|
50
|
+
* @param _batchId ID of the batch for which URI is being revealed.
|
|
51
|
+
* @param _key Secure key used by caller/admin for encryption of baseURI.
|
|
52
|
+
*
|
|
53
|
+
* @return revealedURI Decrypted base URI.
|
|
54
|
+
*/
|
|
55
|
+
function getRevealURI(uint256 _batchId, bytes calldata _key) public view returns (string memory revealedURI) {
|
|
56
|
+
bytes memory dataForBatch = _delayedRevealStorage().encryptedData[_batchId];
|
|
57
|
+
if (dataForBatch.length == 0) {
|
|
58
|
+
revert("Nothing to reveal");
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
(bytes memory encryptedURI, bytes32 provenanceHash) = abi.decode(dataForBatch, (bytes, bytes32));
|
|
62
|
+
|
|
63
|
+
revealedURI = string(encryptDecrypt(encryptedURI, _key));
|
|
64
|
+
|
|
65
|
+
require(keccak256(abi.encodePacked(revealedURI, _key, block.chainid)) == provenanceHash, "Incorrect key");
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @notice Encrypt/decrypt data on chain.
|
|
70
|
+
* @dev Encrypt/decrypt given `data` with `key`. Uses inline assembly.
|
|
71
|
+
* See: https://ethereum.stackexchange.com/questions/69825/decrypt-message-on-chain
|
|
72
|
+
*
|
|
73
|
+
* @param data Bytes of data to encrypt/decrypt.
|
|
74
|
+
* @param key Secure key used by caller for encryption/decryption.
|
|
75
|
+
*
|
|
76
|
+
* @return result Output after encryption/decryption of given data.
|
|
77
|
+
*/
|
|
78
|
+
function encryptDecrypt(bytes memory data, bytes calldata key) public pure override returns (bytes memory result) {
|
|
79
|
+
// Store data length on stack for later use
|
|
80
|
+
uint256 length = data.length;
|
|
81
|
+
|
|
82
|
+
// solhint-disable-next-line no-inline-assembly
|
|
83
|
+
assembly {
|
|
84
|
+
// Set result to free memory pointer
|
|
85
|
+
result := mload(0x40)
|
|
86
|
+
// Increase free memory pointer by lenght + 32
|
|
87
|
+
mstore(0x40, add(add(result, length), 32))
|
|
88
|
+
// Set result length
|
|
89
|
+
mstore(result, length)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Iterate over the data stepping by 32 bytes
|
|
93
|
+
for (uint256 i = 0; i < length; i += 32) {
|
|
94
|
+
// Generate hash of the key and offset
|
|
95
|
+
bytes32 hash = keccak256(abi.encodePacked(key, i));
|
|
96
|
+
|
|
97
|
+
bytes32 chunk;
|
|
98
|
+
// solhint-disable-next-line no-inline-assembly
|
|
99
|
+
assembly {
|
|
100
|
+
// Read 32-bytes data chunk
|
|
101
|
+
chunk := mload(add(data, add(i, 32)))
|
|
102
|
+
}
|
|
103
|
+
// XOR the chunk with hash
|
|
104
|
+
chunk ^= hash;
|
|
105
|
+
// solhint-disable-next-line no-inline-assembly
|
|
106
|
+
assembly {
|
|
107
|
+
// Write 32-byte encrypted chunk
|
|
108
|
+
mstore(add(result, add(i, 32)), chunk)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* @notice Returns whether the relvant batch of NFTs is subject to a delayed reveal.
|
|
115
|
+
* @dev Returns `true` if `_batchId`'s base URI is encrypted.
|
|
116
|
+
* @param _batchId ID of a batch of NFTs.
|
|
117
|
+
*/
|
|
118
|
+
function isEncryptedBatch(uint256 _batchId) public view returns (bool) {
|
|
119
|
+
return _delayedRevealStorage().encryptedData[_batchId].length > 0;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/// @dev Returns the DelayedReveal storage.
|
|
123
|
+
function _delayedRevealStorage() internal pure returns (DelayedRevealStorage.Data storage data) {
|
|
124
|
+
data = DelayedRevealStorage.data();
|
|
125
|
+
}
|
|
126
|
+
}
|