@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,41 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
import "../interface/IPermissionsEnumerable.sol";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @author thirdweb.com
|
|
10
|
+
*/
|
|
11
|
+
library PermissionsEnumerableStorage {
|
|
12
|
+
/// @custom:storage-location erc7201:permissions.enumerable.storage
|
|
13
|
+
/// @dev keccak256(abi.encode(uint256(keccak256("permissions.enumerable.storage")) - 1)) & ~bytes32(uint256(0xff))
|
|
14
|
+
bytes32 public constant PERMISSIONS_ENUMERABLE_STORAGE_POSITION =
|
|
15
|
+
0x1ea2ed6cf13bfad376ba49bede85b663fef0b40eac197c5ac8e6f92ec4076100;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @notice A data structure to store data of members for a given role.
|
|
19
|
+
*
|
|
20
|
+
* @param index Current index in the list of accounts that have a role.
|
|
21
|
+
* @param members map from index => address of account that has a role
|
|
22
|
+
* @param indexOf map from address => index which the account has.
|
|
23
|
+
*/
|
|
24
|
+
struct RoleMembers {
|
|
25
|
+
uint256 index;
|
|
26
|
+
mapping(uint256 => address) members;
|
|
27
|
+
mapping(address => uint256) indexOf;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
struct Data {
|
|
31
|
+
/// @dev map from keccak256 hash of a role to its members' data. See {RoleMembers}.
|
|
32
|
+
mapping(bytes32 => RoleMembers) roleMembers;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function permissionsEnumerableStorage() internal pure returns (Data storage permissionsEnumerableData) {
|
|
36
|
+
bytes32 position = PERMISSIONS_ENUMERABLE_STORAGE_POSITION;
|
|
37
|
+
assembly {
|
|
38
|
+
permissionsEnumerableData.slot := position
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
import "../interface/IPermissions.sol";
|
|
7
|
+
import "./PermissionsStorage.sol";
|
|
8
|
+
import "../../lib/Strings.sol";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @author thirdweb.com
|
|
12
|
+
*
|
|
13
|
+
* @title Permissions
|
|
14
|
+
* @dev This contracts provides extending-contracts with role-based access control mechanisms
|
|
15
|
+
*/
|
|
16
|
+
contract PermissionsLogic is IPermissions {
|
|
17
|
+
/// @dev Default admin role for all roles. Only accounts with this role can grant/revoke other roles.
|
|
18
|
+
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
|
|
19
|
+
|
|
20
|
+
/// @dev Modifier that checks if an account has the specified role; reverts otherwise.
|
|
21
|
+
modifier onlyRole(bytes32 role) {
|
|
22
|
+
_checkRole(role, _msgSender());
|
|
23
|
+
_;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @notice Checks whether an account has a particular role.
|
|
28
|
+
* @dev Returns `true` if `account` has been granted `role`.
|
|
29
|
+
*
|
|
30
|
+
* @param role keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
|
|
31
|
+
* @param account Address of the account for which the role is being checked.
|
|
32
|
+
*/
|
|
33
|
+
function hasRole(bytes32 role, address account) public view override returns (bool) {
|
|
34
|
+
PermissionsStorage.Data storage data = PermissionsStorage.permissionsStorage();
|
|
35
|
+
return data._hasRole[role][account];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @notice Checks whether an account has a particular role;
|
|
40
|
+
* role restrictions can be swtiched on and off.
|
|
41
|
+
*
|
|
42
|
+
* @dev Returns `true` if `account` has been granted `role`.
|
|
43
|
+
* Role restrictions can be swtiched on and off:
|
|
44
|
+
* - If address(0) has ROLE, then the ROLE restrictions
|
|
45
|
+
* don't apply.
|
|
46
|
+
* - If address(0) does not have ROLE, then the ROLE
|
|
47
|
+
* restrictions will apply.
|
|
48
|
+
*
|
|
49
|
+
* @param role keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
|
|
50
|
+
* @param account Address of the account for which the role is being checked.
|
|
51
|
+
*/
|
|
52
|
+
function hasRoleWithSwitch(bytes32 role, address account) public view returns (bool) {
|
|
53
|
+
PermissionsStorage.Data storage data = PermissionsStorage.permissionsStorage();
|
|
54
|
+
if (!data._hasRole[role][address(0)]) {
|
|
55
|
+
return data._hasRole[role][account];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @notice Returns the admin role that controls the specified role.
|
|
63
|
+
* @dev See {grantRole} and {revokeRole}.
|
|
64
|
+
* To change a role's admin, use {_setRoleAdmin}.
|
|
65
|
+
*
|
|
66
|
+
* @param role keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
|
|
67
|
+
*/
|
|
68
|
+
function getRoleAdmin(bytes32 role) external view override returns (bytes32) {
|
|
69
|
+
PermissionsStorage.Data storage data = PermissionsStorage.permissionsStorage();
|
|
70
|
+
return data._getRoleAdmin[role];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @notice Grants a role to an account, if not previously granted.
|
|
75
|
+
* @dev Caller must have admin role for the `role`.
|
|
76
|
+
* Emits {RoleGranted Event}.
|
|
77
|
+
*
|
|
78
|
+
* @param role keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
|
|
79
|
+
* @param account Address of the account to which the role is being granted.
|
|
80
|
+
*/
|
|
81
|
+
function grantRole(bytes32 role, address account) public virtual override {
|
|
82
|
+
PermissionsStorage.Data storage data = PermissionsStorage.permissionsStorage();
|
|
83
|
+
_checkRole(data._getRoleAdmin[role], _msgSender());
|
|
84
|
+
if (data._hasRole[role][account]) {
|
|
85
|
+
revert("Can only grant to non holders");
|
|
86
|
+
}
|
|
87
|
+
_setupRole(role, account);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* @notice Revokes role from an account.
|
|
92
|
+
* @dev Caller must have admin role for the `role`.
|
|
93
|
+
* Emits {RoleRevoked Event}.
|
|
94
|
+
*
|
|
95
|
+
* @param role keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
|
|
96
|
+
* @param account Address of the account from which the role is being revoked.
|
|
97
|
+
*/
|
|
98
|
+
function revokeRole(bytes32 role, address account) public virtual override {
|
|
99
|
+
PermissionsStorage.Data storage data = PermissionsStorage.permissionsStorage();
|
|
100
|
+
_checkRole(data._getRoleAdmin[role], _msgSender());
|
|
101
|
+
_revokeRole(role, account);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @notice Revokes role from the account.
|
|
106
|
+
* @dev Caller must have the `role`, with caller being the same as `account`.
|
|
107
|
+
* Emits {RoleRevoked Event}.
|
|
108
|
+
*
|
|
109
|
+
* @param role keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
|
|
110
|
+
* @param account Address of the account from which the role is being revoked.
|
|
111
|
+
*/
|
|
112
|
+
function renounceRole(bytes32 role, address account) public virtual override {
|
|
113
|
+
if (_msgSender() != account) {
|
|
114
|
+
revert("Can only renounce for self");
|
|
115
|
+
}
|
|
116
|
+
_revokeRole(role, account);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/// @dev Sets `adminRole` as `role`'s admin role.
|
|
120
|
+
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
|
|
121
|
+
PermissionsStorage.Data storage data = PermissionsStorage.permissionsStorage();
|
|
122
|
+
bytes32 previousAdminRole = data._getRoleAdmin[role];
|
|
123
|
+
data._getRoleAdmin[role] = adminRole;
|
|
124
|
+
emit RoleAdminChanged(role, previousAdminRole, adminRole);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/// @dev Sets up `role` for `account`
|
|
128
|
+
function _setupRole(bytes32 role, address account) internal virtual {
|
|
129
|
+
PermissionsStorage.Data storage data = PermissionsStorage.permissionsStorage();
|
|
130
|
+
data._hasRole[role][account] = true;
|
|
131
|
+
emit RoleGranted(role, account, _msgSender());
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/// @dev Revokes `role` from `account`
|
|
135
|
+
function _revokeRole(bytes32 role, address account) internal virtual {
|
|
136
|
+
PermissionsStorage.Data storage data = PermissionsStorage.permissionsStorage();
|
|
137
|
+
_checkRole(role, account);
|
|
138
|
+
delete data._hasRole[role][account];
|
|
139
|
+
emit RoleRevoked(role, account, _msgSender());
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/// @dev Checks `role` for `account`. Reverts with a message including the required role.
|
|
143
|
+
function _checkRole(bytes32 role, address account) internal view virtual {
|
|
144
|
+
PermissionsStorage.Data storage data = PermissionsStorage.permissionsStorage();
|
|
145
|
+
if (!data._hasRole[role][account]) {
|
|
146
|
+
revert(
|
|
147
|
+
string(
|
|
148
|
+
abi.encodePacked(
|
|
149
|
+
"Permissions: account ",
|
|
150
|
+
Strings.toHexString(uint160(account), 20),
|
|
151
|
+
" is missing role ",
|
|
152
|
+
Strings.toHexString(uint256(role), 32)
|
|
153
|
+
)
|
|
154
|
+
)
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/// @dev Checks `role` for `account`. Reverts with a message including the required role.
|
|
160
|
+
function _checkRoleWithSwitch(bytes32 role, address account) internal view virtual {
|
|
161
|
+
if (!hasRoleWithSwitch(role, account)) {
|
|
162
|
+
revert(
|
|
163
|
+
string(
|
|
164
|
+
abi.encodePacked(
|
|
165
|
+
"Permissions: account ",
|
|
166
|
+
Strings.toHexString(uint160(account), 20),
|
|
167
|
+
" is missing role ",
|
|
168
|
+
Strings.toHexString(uint256(role), 32)
|
|
169
|
+
)
|
|
170
|
+
)
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function _msgSender() internal view virtual returns (address sender) {
|
|
176
|
+
return msg.sender;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function _msgData() internal view virtual returns (bytes calldata) {
|
|
180
|
+
return msg.data;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @author thirdweb.com
|
|
8
|
+
*/
|
|
9
|
+
library PermissionsStorage {
|
|
10
|
+
/// @custom:storage-location erc7201:permissions.storage
|
|
11
|
+
/// @dev keccak256(abi.encode(uint256(keccak256("permissions.storage")) - 1)) & ~bytes32(uint256(0xff))
|
|
12
|
+
bytes32 public constant PERMISSIONS_STORAGE_POSITION =
|
|
13
|
+
0x0a7b0f5c59907924802379ebe98cdc23e2ee7820f63d30126e10b3752010e500;
|
|
14
|
+
|
|
15
|
+
struct Data {
|
|
16
|
+
/// @dev Map from keccak256 hash of a role => a map from address => whether address has role.
|
|
17
|
+
mapping(bytes32 => mapping(address => bool)) _hasRole;
|
|
18
|
+
/// @dev Map from keccak256 hash of a role to role admin. See {getRoleAdmin}.
|
|
19
|
+
mapping(bytes32 => bytes32) _getRoleAdmin;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function permissionsStorage() internal pure returns (Data storage permissionsData) {
|
|
23
|
+
bytes32 position = PERMISSIONS_STORAGE_POSITION;
|
|
24
|
+
assembly {
|
|
25
|
+
permissionsData.slot := position
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
import "./PlatformFeeStorage.sol";
|
|
7
|
+
import "../interface/IPlatformFee.sol";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @author thirdweb.com
|
|
11
|
+
*
|
|
12
|
+
* @title Platform Fee
|
|
13
|
+
* @notice Thirdweb's `PlatformFee` is a contract extension to be used with any base contract. It exposes functions for setting and reading
|
|
14
|
+
* the recipient of platform fee and the platform fee basis points, and lets the inheriting contract perform conditional logic
|
|
15
|
+
* that uses information about platform fees, if desired.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
abstract contract PlatformFeeLogic is IPlatformFee {
|
|
19
|
+
/// @dev Returns the platform fee recipient and bps.
|
|
20
|
+
function getPlatformFeeInfo() public view override returns (address, uint16) {
|
|
21
|
+
PlatformFeeStorage.Data storage data = PlatformFeeStorage.platformFeeStorage();
|
|
22
|
+
return (data.platformFeeRecipient, uint16(data.platformFeeBps));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @notice Updates the platform fee recipient and bps.
|
|
27
|
+
* @dev Caller should be authorized to set platform fee info.
|
|
28
|
+
* See {_canSetPlatformFeeInfo}.
|
|
29
|
+
* Emits {PlatformFeeInfoUpdated Event}; See {_setupPlatformFeeInfo}.
|
|
30
|
+
*
|
|
31
|
+
* @param _platformFeeRecipient Address to be set as new platformFeeRecipient.
|
|
32
|
+
* @param _platformFeeBps Updated platformFeeBps.
|
|
33
|
+
*/
|
|
34
|
+
function setPlatformFeeInfo(address _platformFeeRecipient, uint256 _platformFeeBps) external override {
|
|
35
|
+
if (!_canSetPlatformFeeInfo()) {
|
|
36
|
+
revert("Not authorized");
|
|
37
|
+
}
|
|
38
|
+
_setupPlatformFeeInfo(_platformFeeRecipient, _platformFeeBps);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/// @dev Lets a contract admin update the platform fee recipient and bps
|
|
42
|
+
function _setupPlatformFeeInfo(address _platformFeeRecipient, uint256 _platformFeeBps) internal {
|
|
43
|
+
PlatformFeeStorage.Data storage data = PlatformFeeStorage.platformFeeStorage();
|
|
44
|
+
if (_platformFeeBps > 10_000) {
|
|
45
|
+
revert("Exceeds max bps");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
data.platformFeeBps = uint16(_platformFeeBps);
|
|
49
|
+
data.platformFeeRecipient = _platformFeeRecipient;
|
|
50
|
+
|
|
51
|
+
emit PlatformFeeInfoUpdated(_platformFeeRecipient, _platformFeeBps);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/// @dev Returns whether platform fee info can be set in the given execution context.
|
|
55
|
+
function _canSetPlatformFeeInfo() internal view virtual returns (bool);
|
|
56
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @author thirdweb.com
|
|
8
|
+
*/
|
|
9
|
+
library PlatformFeeStorage {
|
|
10
|
+
/// @custom:storage-location erc7201:platform.fee.storage
|
|
11
|
+
/// @dev keccak256(abi.encode(uint256(keccak256("platform.fee.storage")) - 1)) & ~bytes32(uint256(0xff))
|
|
12
|
+
bytes32 public constant PLATFORM_FEE_STORAGE_POSITION =
|
|
13
|
+
0xc0c34308b4a2f4c5ee9af8ba82541cfb3c33b076d1fd05c65f9ce7060c64c400;
|
|
14
|
+
|
|
15
|
+
struct Data {
|
|
16
|
+
/// @dev The address that receives all platform fees from all sales.
|
|
17
|
+
address platformFeeRecipient;
|
|
18
|
+
/// @dev The % of primary sales collected as platform fees.
|
|
19
|
+
uint16 platformFeeBps;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function platformFeeStorage() internal pure returns (Data storage platformFeeData) {
|
|
23
|
+
bytes32 position = PLATFORM_FEE_STORAGE_POSITION;
|
|
24
|
+
assembly {
|
|
25
|
+
platformFeeData.slot := position
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
import "../interface/plugin/IPluginMap.sol";
|
|
7
|
+
import "../../external-deps/openzeppelin/utils/EnumerableSet.sol";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @author thirdweb.com
|
|
11
|
+
*/
|
|
12
|
+
contract PluginMap is IPluginMap {
|
|
13
|
+
using EnumerableSet for EnumerableSet.Bytes32Set;
|
|
14
|
+
|
|
15
|
+
EnumerableSet.Bytes32Set private allSelectors;
|
|
16
|
+
|
|
17
|
+
mapping(address => EnumerableSet.Bytes32Set) private selectorsForPlugin;
|
|
18
|
+
mapping(bytes4 => Plugin) private pluginForSelector;
|
|
19
|
+
|
|
20
|
+
/*///////////////////////////////////////////////////////////////
|
|
21
|
+
Constructor + initializer logic
|
|
22
|
+
//////////////////////////////////////////////////////////////*/
|
|
23
|
+
|
|
24
|
+
constructor(Plugin[] memory _pluginsToAdd) {
|
|
25
|
+
uint256 len = _pluginsToAdd.length;
|
|
26
|
+
for (uint256 i = 0; i < len; i += 1) {
|
|
27
|
+
_setPlugin(_pluginsToAdd[i]);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/*///////////////////////////////////////////////////////////////
|
|
32
|
+
View functions
|
|
33
|
+
//////////////////////////////////////////////////////////////*/
|
|
34
|
+
|
|
35
|
+
/// @dev View address of the plugged-in functionality contract for a given function signature.
|
|
36
|
+
function getPluginForFunction(bytes4 _selector) public view returns (address) {
|
|
37
|
+
address _pluginAddress = pluginForSelector[_selector].pluginAddress;
|
|
38
|
+
require(_pluginAddress != address(0), "Map: No plugin available for selector");
|
|
39
|
+
|
|
40
|
+
return _pluginAddress;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/// @dev View all funtionality as list of function signatures.
|
|
44
|
+
function getAllFunctionsOfPlugin(address _pluginAddress) external view returns (bytes4[] memory registered) {
|
|
45
|
+
uint256 len = selectorsForPlugin[_pluginAddress].length();
|
|
46
|
+
registered = new bytes4[](len);
|
|
47
|
+
|
|
48
|
+
for (uint256 i = 0; i < len; i += 1) {
|
|
49
|
+
registered[i] = bytes4(selectorsForPlugin[_pluginAddress].at(i));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/// @dev View all funtionality existing on the contract.
|
|
54
|
+
function getAllPlugins() external view returns (Plugin[] memory _plugins) {
|
|
55
|
+
uint256 len = allSelectors.length();
|
|
56
|
+
_plugins = new Plugin[](len);
|
|
57
|
+
|
|
58
|
+
for (uint256 i = 0; i < len; i += 1) {
|
|
59
|
+
bytes4 selector = bytes4(allSelectors.at(i));
|
|
60
|
+
_plugins[i] = pluginForSelector[selector];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/*///////////////////////////////////////////////////////////////
|
|
65
|
+
Internal functions
|
|
66
|
+
//////////////////////////////////////////////////////////////*/
|
|
67
|
+
|
|
68
|
+
/// @dev Add functionality to the contract.
|
|
69
|
+
function _setPlugin(Plugin memory _plugin) internal {
|
|
70
|
+
require(allSelectors.add(bytes32(_plugin.functionSelector)), "Map: Selector exists");
|
|
71
|
+
require(
|
|
72
|
+
_plugin.functionSelector == bytes4(keccak256(abi.encodePacked(_plugin.functionSignature))),
|
|
73
|
+
"Map: Incorrect selector"
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
pluginForSelector[_plugin.functionSelector] = _plugin;
|
|
77
|
+
selectorsForPlugin[_plugin.pluginAddress].add(bytes32(_plugin.functionSelector));
|
|
78
|
+
|
|
79
|
+
emit PluginSet(_plugin.functionSelector, _plugin.functionSignature, _plugin.pluginAddress);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache 2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
import "./ReentrancyGuardStorage.sol";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @dev Contract module that helps prevent reentrant calls to a function.
|
|
10
|
+
*
|
|
11
|
+
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
|
|
12
|
+
* available, which can be applied to functions to make sure there are no nested
|
|
13
|
+
* (reentrant) calls to them.
|
|
14
|
+
*
|
|
15
|
+
* Note that because there is a single `nonReentrant` guard, functions marked as
|
|
16
|
+
* `nonReentrant` may not call one another. This can be worked around by making
|
|
17
|
+
* those functions `private`, and then adding `external` `nonReentrant` entry
|
|
18
|
+
* points to them.
|
|
19
|
+
*
|
|
20
|
+
* TIP: If you would like to learn more about reentrancy and alternative ways
|
|
21
|
+
* to protect against it, check out our blog post
|
|
22
|
+
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
|
|
23
|
+
*/
|
|
24
|
+
abstract contract ReentrancyGuardLogic {
|
|
25
|
+
// Booleans are more expensive than uint256 or any type that takes up a full
|
|
26
|
+
// word because each write operation emits an extra SLOAD to first read the
|
|
27
|
+
// slot's contents, replace the bits taken up by the boolean, and then write
|
|
28
|
+
// back. This is the compiler's defense against contract upgrades and
|
|
29
|
+
// pointer aliasing, and it cannot be disabled.
|
|
30
|
+
|
|
31
|
+
// The values being non-zero value makes deployment a bit more expensive,
|
|
32
|
+
// but in exchange the refund on every call to nonReentrant will be lower in
|
|
33
|
+
// amount. Since refunds are capped to a percentage of the total
|
|
34
|
+
// transaction's gas, it is best to keep them low in cases like this one, to
|
|
35
|
+
// increase the likelihood of the full refund coming into effect.
|
|
36
|
+
uint256 private constant _NOT_ENTERED = 1;
|
|
37
|
+
uint256 private constant _ENTERED = 2;
|
|
38
|
+
|
|
39
|
+
function __ReentrancyGuard_init() internal {
|
|
40
|
+
__ReentrancyGuard_init_unchained();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function __ReentrancyGuard_init_unchained() internal {
|
|
44
|
+
ReentrancyGuardStorage.Data storage data = ReentrancyGuardStorage.reentrancyGuardStorage();
|
|
45
|
+
data._status = _NOT_ENTERED;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @dev Prevents a contract from calling itself, directly or indirectly.
|
|
50
|
+
* Calling a `nonReentrant` function from another `nonReentrant`
|
|
51
|
+
* function is not supported. It is possible to prevent this from happening
|
|
52
|
+
* by making the `nonReentrant` function external, and making it call a
|
|
53
|
+
* `private` function that does the actual work.
|
|
54
|
+
*/
|
|
55
|
+
modifier nonReentrant() {
|
|
56
|
+
ReentrancyGuardStorage.Data storage data = ReentrancyGuardStorage.reentrancyGuardStorage();
|
|
57
|
+
// On the first call to nonReentrant, _notEntered will be true
|
|
58
|
+
require(data._status != _ENTERED, "ReentrancyGuard: reentrant call");
|
|
59
|
+
|
|
60
|
+
// Any calls to nonReentrant after this point will fail
|
|
61
|
+
data._status = _ENTERED;
|
|
62
|
+
|
|
63
|
+
_;
|
|
64
|
+
|
|
65
|
+
// By storing the original value once again, a refund is triggered (see
|
|
66
|
+
// https://eips.ethereum.org/EIPS/eip-2200)
|
|
67
|
+
data._status = _NOT_ENTERED;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
library ReentrancyGuardStorage {
|
|
7
|
+
/// @custom:storage-location erc7201:reentrancy.guard.storage
|
|
8
|
+
/// @dev keccak256(abi.encode(uint256(keccak256("reentrancy.guard.storage")) - 1)) & ~bytes32(uint256(0xff))
|
|
9
|
+
bytes32 public constant REENTRANCY_GUARD_STORAGE_POSITION =
|
|
10
|
+
0x1d281c488dae143b6ea4122e80c65059929950b9c32f17fc57be22089d9c3b00;
|
|
11
|
+
|
|
12
|
+
struct Data {
|
|
13
|
+
uint256 _status;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function reentrancyGuardStorage() internal pure returns (Data storage reentrancyGuardData) {
|
|
17
|
+
bytes32 position = REENTRANCY_GUARD_STORAGE_POSITION;
|
|
18
|
+
assembly {
|
|
19
|
+
reentrancyGuardData.slot := position
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|