@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,189 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
import "../extension/ContractMetadata.sol";
|
|
7
|
+
import "../extension/Multicall.sol";
|
|
8
|
+
import "../extension/Ownable.sol";
|
|
9
|
+
import "../extension/Staking1155.sol";
|
|
10
|
+
|
|
11
|
+
import "../eip/ERC165.sol";
|
|
12
|
+
import "../eip/interface/IERC20.sol";
|
|
13
|
+
import "../eip/interface/IERC1155Receiver.sol";
|
|
14
|
+
|
|
15
|
+
import { CurrencyTransferLib } from "../lib/CurrencyTransferLib.sol";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* EXTENSION: Staking1155
|
|
20
|
+
*
|
|
21
|
+
* The `Staking1155Base` smart contract implements NFT staking mechanism.
|
|
22
|
+
* Allows users to stake their ERC-1155 NFTs and earn rewards in form of ERC-20 tokens.
|
|
23
|
+
*
|
|
24
|
+
* Following features and implementation setup must be noted:
|
|
25
|
+
*
|
|
26
|
+
* - ERC-1155 NFTs from only one collection can be staked.
|
|
27
|
+
*
|
|
28
|
+
* - Contract admin can choose to give out rewards by either transferring or minting the rewardToken,
|
|
29
|
+
* which is an ERC20 token. See {_mintRewards}.
|
|
30
|
+
*
|
|
31
|
+
* - To implement custom logic for staking, reward calculation, etc. corresponding functions can be
|
|
32
|
+
* overridden from the extension `Staking1155`.
|
|
33
|
+
*
|
|
34
|
+
* - Ownership of the contract, with the ability to restrict certain functions to
|
|
35
|
+
* only be called by the contract's owner.
|
|
36
|
+
*
|
|
37
|
+
* - Multicall capability to perform multiple actions atomically.
|
|
38
|
+
*
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
/// note: This contract is provided as a base contract.
|
|
42
|
+
// This is to support a variety of use-cases that can be build on top of this base.
|
|
43
|
+
//
|
|
44
|
+
// Additional functionality such as deposit functions, reward-minting, etc.
|
|
45
|
+
// must be implemented by the deployer of this contract, as needed for their use-case.
|
|
46
|
+
|
|
47
|
+
contract Staking1155Base is ContractMetadata, Multicall, Ownable, Staking1155, ERC165, IERC1155Receiver {
|
|
48
|
+
/// @dev ERC20 Reward Token address. See {_mintRewards} below.
|
|
49
|
+
address public immutable rewardToken;
|
|
50
|
+
|
|
51
|
+
/// @dev The address of the native token wrapper contract.
|
|
52
|
+
address internal immutable nativeTokenWrapper;
|
|
53
|
+
|
|
54
|
+
/// @dev Total amount of reward tokens in the contract.
|
|
55
|
+
uint256 private rewardTokenBalance;
|
|
56
|
+
|
|
57
|
+
constructor(
|
|
58
|
+
uint80 _defaultTimeUnit,
|
|
59
|
+
address _defaultAdmin,
|
|
60
|
+
uint256 _defaultRewardsPerUnitTime,
|
|
61
|
+
address _stakingToken,
|
|
62
|
+
address _rewardToken,
|
|
63
|
+
address _nativeTokenWrapper
|
|
64
|
+
) Staking1155(_stakingToken) {
|
|
65
|
+
_setupOwner(_defaultAdmin);
|
|
66
|
+
_setDefaultStakingCondition(_defaultTimeUnit, _defaultRewardsPerUnitTime);
|
|
67
|
+
|
|
68
|
+
rewardToken = _rewardToken;
|
|
69
|
+
nativeTokenWrapper = _nativeTokenWrapper;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/// @dev Lets the contract receive ether to unwrap native tokens.
|
|
73
|
+
receive() external payable virtual {
|
|
74
|
+
require(msg.sender == nativeTokenWrapper, "caller not native token wrapper.");
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/// @dev Admin deposits reward tokens.
|
|
78
|
+
function depositRewardTokens(uint256 _amount) external payable virtual nonReentrant {
|
|
79
|
+
_depositRewardTokens(_amount); // override this for custom logic.
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/// @dev Admin can withdraw excess reward tokens.
|
|
83
|
+
function withdrawRewardTokens(uint256 _amount) external virtual nonReentrant {
|
|
84
|
+
_withdrawRewardTokens(_amount); // override this for custom logic.
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/// @notice View total rewards available in the staking contract.
|
|
88
|
+
function getRewardTokenBalance() external view virtual override returns (uint256) {
|
|
89
|
+
return rewardTokenBalance;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/*///////////////////////////////////////////////////////////////
|
|
93
|
+
ERC 165 / 721 logic
|
|
94
|
+
//////////////////////////////////////////////////////////////*/
|
|
95
|
+
|
|
96
|
+
function onERC1155Received(address, address, uint256, uint256, bytes calldata) external view returns (bytes4) {
|
|
97
|
+
require(isStaking == 2, "Direct transfer");
|
|
98
|
+
return this.onERC1155Received.selector;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function onERC1155BatchReceived(
|
|
102
|
+
address operator,
|
|
103
|
+
address from,
|
|
104
|
+
uint256[] calldata ids,
|
|
105
|
+
uint256[] calldata values,
|
|
106
|
+
bytes calldata data
|
|
107
|
+
) external virtual returns (bytes4) {}
|
|
108
|
+
|
|
109
|
+
function supportsInterface(bytes4 interfaceId) public view override(ERC165, IERC165) returns (bool) {
|
|
110
|
+
return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/*//////////////////////////////////////////////////////////////
|
|
114
|
+
Minting logic
|
|
115
|
+
//////////////////////////////////////////////////////////////*/
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* @dev Mint ERC20 rewards to the staker. Override for custom logic.
|
|
119
|
+
*
|
|
120
|
+
* @param _staker Address for which to calculated rewards.
|
|
121
|
+
* @param _rewards Amount of tokens to be given out as reward.
|
|
122
|
+
*
|
|
123
|
+
*/
|
|
124
|
+
function _mintRewards(address _staker, uint256 _rewards) internal virtual override {
|
|
125
|
+
require(_rewards <= rewardTokenBalance, "Not enough reward tokens");
|
|
126
|
+
rewardTokenBalance -= _rewards;
|
|
127
|
+
CurrencyTransferLib.transferCurrencyWithWrapper(
|
|
128
|
+
rewardToken,
|
|
129
|
+
address(this),
|
|
130
|
+
_staker,
|
|
131
|
+
_rewards,
|
|
132
|
+
nativeTokenWrapper
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/*//////////////////////////////////////////////////////////////
|
|
137
|
+
Other Internal functions
|
|
138
|
+
//////////////////////////////////////////////////////////////*/
|
|
139
|
+
|
|
140
|
+
/// @dev Admin deposits reward tokens -- override for custom logic.
|
|
141
|
+
function _depositRewardTokens(uint256 _amount) internal virtual {
|
|
142
|
+
require(msg.sender == owner(), "Not authorized");
|
|
143
|
+
|
|
144
|
+
address _rewardToken = rewardToken == CurrencyTransferLib.NATIVE_TOKEN ? nativeTokenWrapper : rewardToken;
|
|
145
|
+
|
|
146
|
+
uint256 balanceBefore = IERC20(_rewardToken).balanceOf(address(this));
|
|
147
|
+
CurrencyTransferLib.transferCurrencyWithWrapper(
|
|
148
|
+
rewardToken,
|
|
149
|
+
msg.sender,
|
|
150
|
+
address(this),
|
|
151
|
+
_amount,
|
|
152
|
+
nativeTokenWrapper
|
|
153
|
+
);
|
|
154
|
+
uint256 actualAmount = IERC20(_rewardToken).balanceOf(address(this)) - balanceBefore;
|
|
155
|
+
|
|
156
|
+
rewardTokenBalance += actualAmount;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/// @dev Admin can withdraw excess reward tokens -- override for custom logic.
|
|
160
|
+
function _withdrawRewardTokens(uint256 _amount) internal virtual {
|
|
161
|
+
require(msg.sender == owner(), "Not authorized");
|
|
162
|
+
|
|
163
|
+
// to prevent locking of direct-transferred tokens
|
|
164
|
+
rewardTokenBalance = _amount > rewardTokenBalance ? 0 : rewardTokenBalance - _amount;
|
|
165
|
+
|
|
166
|
+
CurrencyTransferLib.transferCurrencyWithWrapper(
|
|
167
|
+
rewardToken,
|
|
168
|
+
address(this),
|
|
169
|
+
msg.sender,
|
|
170
|
+
_amount,
|
|
171
|
+
nativeTokenWrapper
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/// @dev Returns whether staking restrictions can be set in given execution context.
|
|
176
|
+
function _canSetStakeConditions() internal view virtual override returns (bool) {
|
|
177
|
+
return msg.sender == owner();
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/// @dev Returns whether contract metadata can be set in the given execution context.
|
|
181
|
+
function _canSetContractURI() internal view virtual override returns (bool) {
|
|
182
|
+
return msg.sender == owner();
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/// @dev Returns whether owner can be set in the given execution context.
|
|
186
|
+
function _canSetOwner() internal view virtual override returns (bool) {
|
|
187
|
+
return msg.sender == owner();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
import "../extension/ContractMetadata.sol";
|
|
7
|
+
import "../extension/Multicall.sol";
|
|
8
|
+
import "../extension/Ownable.sol";
|
|
9
|
+
import "../extension/Staking20.sol";
|
|
10
|
+
|
|
11
|
+
import "../eip/interface/IERC20.sol";
|
|
12
|
+
import "../eip/interface/IERC20Metadata.sol";
|
|
13
|
+
|
|
14
|
+
import { CurrencyTransferLib } from "../lib/CurrencyTransferLib.sol";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
*
|
|
18
|
+
* EXTENSION: Staking20
|
|
19
|
+
*
|
|
20
|
+
* The `Staking20Base` smart contract implements Token staking mechanism.
|
|
21
|
+
* Allows users to stake their ERC-20 Tokens and earn rewards in form of another ERC-20 tokens.
|
|
22
|
+
*
|
|
23
|
+
* Following features and implementation setup must be noted:
|
|
24
|
+
*
|
|
25
|
+
* - ERC-20 Tokens from only one contract can be staked.
|
|
26
|
+
*
|
|
27
|
+
* - Contract admin can choose to give out rewards by either transferring or minting the rewardToken,
|
|
28
|
+
* which is ideally a different ERC20 token. See {_mintRewards}.
|
|
29
|
+
*
|
|
30
|
+
* - To implement custom logic for staking, reward calculation, etc. corresponding functions can be
|
|
31
|
+
* overridden from the extension `Staking20`.
|
|
32
|
+
*
|
|
33
|
+
* - Ownership of the contract, with the ability to restrict certain functions to
|
|
34
|
+
* only be called by the contract's owner.
|
|
35
|
+
*
|
|
36
|
+
* - Multicall capability to perform multiple actions atomically.
|
|
37
|
+
*
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
/// note: This contract is provided as a base contract.
|
|
41
|
+
// This is to support a variety of use-cases that can be build on top of this base.
|
|
42
|
+
//
|
|
43
|
+
// Additional functionality such as deposit functions, reward-minting, etc.
|
|
44
|
+
// must be implemented by the deployer of this contract, as needed for their use-case.
|
|
45
|
+
|
|
46
|
+
contract Staking20Base is ContractMetadata, Multicall, Ownable, Staking20 {
|
|
47
|
+
/// @dev ERC20 Reward Token address. See {_mintRewards} below.
|
|
48
|
+
address public immutable rewardToken;
|
|
49
|
+
|
|
50
|
+
/// @dev Total amount of reward tokens in the contract.
|
|
51
|
+
uint256 private rewardTokenBalance;
|
|
52
|
+
|
|
53
|
+
constructor(
|
|
54
|
+
uint80 _timeUnit,
|
|
55
|
+
address _defaultAdmin,
|
|
56
|
+
uint256 _rewardRatioNumerator,
|
|
57
|
+
uint256 _rewardRatioDenominator,
|
|
58
|
+
address _stakingToken,
|
|
59
|
+
address _rewardToken,
|
|
60
|
+
address _nativeTokenWrapper
|
|
61
|
+
)
|
|
62
|
+
Staking20(
|
|
63
|
+
_nativeTokenWrapper,
|
|
64
|
+
_stakingToken,
|
|
65
|
+
IERC20Metadata(_stakingToken).decimals(),
|
|
66
|
+
IERC20Metadata(_rewardToken).decimals()
|
|
67
|
+
)
|
|
68
|
+
{
|
|
69
|
+
_setupOwner(_defaultAdmin);
|
|
70
|
+
_setStakingCondition(_timeUnit, _rewardRatioNumerator, _rewardRatioDenominator);
|
|
71
|
+
|
|
72
|
+
require(_rewardToken != _stakingToken, "Reward Token and Staking Token can't be same.");
|
|
73
|
+
rewardToken = _rewardToken;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/// @dev Lets the contract receive ether to unwrap native tokens.
|
|
77
|
+
receive() external payable virtual {
|
|
78
|
+
require(msg.sender == nativeTokenWrapper, "caller not native token wrapper.");
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/// @dev Admin deposits reward tokens.
|
|
82
|
+
function depositRewardTokens(uint256 _amount) external payable virtual nonReentrant {
|
|
83
|
+
_depositRewardTokens(_amount); // override this for custom logic.
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/// @dev Admin can withdraw excess reward tokens.
|
|
87
|
+
function withdrawRewardTokens(uint256 _amount) external virtual nonReentrant {
|
|
88
|
+
_withdrawRewardTokens(_amount); // override this for custom logic.
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/// @notice View total rewards available in the staking contract.
|
|
92
|
+
function getRewardTokenBalance() external view virtual override returns (uint256) {
|
|
93
|
+
return rewardTokenBalance;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/*//////////////////////////////////////////////////////////////
|
|
97
|
+
Minting logic
|
|
98
|
+
//////////////////////////////////////////////////////////////*/
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @dev Mint ERC20 rewards to the staker. Override for custom logic.
|
|
102
|
+
*
|
|
103
|
+
* @param _staker Address for which to calculated rewards.
|
|
104
|
+
* @param _rewards Amount of tokens to be given out as reward.
|
|
105
|
+
*
|
|
106
|
+
*/
|
|
107
|
+
function _mintRewards(address _staker, uint256 _rewards) internal virtual override {
|
|
108
|
+
require(_rewards <= rewardTokenBalance, "Not enough reward tokens");
|
|
109
|
+
rewardTokenBalance -= _rewards;
|
|
110
|
+
CurrencyTransferLib.transferCurrencyWithWrapper(
|
|
111
|
+
rewardToken,
|
|
112
|
+
address(this),
|
|
113
|
+
_staker,
|
|
114
|
+
_rewards,
|
|
115
|
+
nativeTokenWrapper
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/*//////////////////////////////////////////////////////////////
|
|
120
|
+
Other Internal functions
|
|
121
|
+
//////////////////////////////////////////////////////////////*/
|
|
122
|
+
|
|
123
|
+
/// @dev Admin deposits reward tokens -- override for custom logic.
|
|
124
|
+
function _depositRewardTokens(uint256 _amount) internal virtual {
|
|
125
|
+
require(msg.sender == owner(), "Not authorized");
|
|
126
|
+
|
|
127
|
+
address _rewardToken = rewardToken == CurrencyTransferLib.NATIVE_TOKEN ? nativeTokenWrapper : rewardToken;
|
|
128
|
+
|
|
129
|
+
uint256 balanceBefore = IERC20(_rewardToken).balanceOf(address(this));
|
|
130
|
+
CurrencyTransferLib.transferCurrencyWithWrapper(
|
|
131
|
+
rewardToken,
|
|
132
|
+
msg.sender,
|
|
133
|
+
address(this),
|
|
134
|
+
_amount,
|
|
135
|
+
nativeTokenWrapper
|
|
136
|
+
);
|
|
137
|
+
uint256 actualAmount = IERC20(_rewardToken).balanceOf(address(this)) - balanceBefore;
|
|
138
|
+
|
|
139
|
+
rewardTokenBalance += actualAmount;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/// @dev Admin can withdraw excess reward tokens -- override for custom logic.
|
|
143
|
+
function _withdrawRewardTokens(uint256 _amount) internal virtual {
|
|
144
|
+
require(msg.sender == owner(), "Not authorized");
|
|
145
|
+
|
|
146
|
+
// to prevent locking of direct-transferred tokens
|
|
147
|
+
rewardTokenBalance = _amount > rewardTokenBalance ? 0 : rewardTokenBalance - _amount;
|
|
148
|
+
|
|
149
|
+
CurrencyTransferLib.transferCurrencyWithWrapper(
|
|
150
|
+
rewardToken,
|
|
151
|
+
address(this),
|
|
152
|
+
msg.sender,
|
|
153
|
+
_amount,
|
|
154
|
+
nativeTokenWrapper
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
// The withdrawal shouldn't reduce staking token balance. `>=` accounts for any accidental transfers.
|
|
158
|
+
address _stakingToken = stakingToken == CurrencyTransferLib.NATIVE_TOKEN ? nativeTokenWrapper : stakingToken;
|
|
159
|
+
require(
|
|
160
|
+
IERC20(_stakingToken).balanceOf(address(this)) >= stakingTokenBalance,
|
|
161
|
+
"Staking token balance reduced."
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/// @dev Returns whether staking restrictions can be set in given execution context.
|
|
166
|
+
function _canSetStakeConditions() internal view virtual override returns (bool) {
|
|
167
|
+
return msg.sender == owner();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/// @dev Returns whether contract metadata can be set in the given execution context.
|
|
171
|
+
function _canSetContractURI() internal view virtual override returns (bool) {
|
|
172
|
+
return msg.sender == owner();
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/// @dev Returns whether owner can be set in the given execution context.
|
|
176
|
+
function _canSetOwner() internal view virtual override returns (bool) {
|
|
177
|
+
return msg.sender == owner();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
import "../extension/ContractMetadata.sol";
|
|
7
|
+
import "../extension/Multicall.sol";
|
|
8
|
+
import "../extension/Ownable.sol";
|
|
9
|
+
import "../extension/Staking721.sol";
|
|
10
|
+
|
|
11
|
+
import "../eip/ERC165.sol";
|
|
12
|
+
import "../eip/interface/IERC20.sol";
|
|
13
|
+
import "../eip/interface/IERC721Receiver.sol";
|
|
14
|
+
|
|
15
|
+
import { CurrencyTransferLib } from "../lib/CurrencyTransferLib.sol";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* EXTENSION: Staking721
|
|
20
|
+
*
|
|
21
|
+
* The `Staking721Base` smart contract implements NFT staking mechanism.
|
|
22
|
+
* Allows users to stake their ERC-721 NFTs and earn rewards in form of ERC-20 tokens.
|
|
23
|
+
*
|
|
24
|
+
* Following features and implementation setup must be noted:
|
|
25
|
+
*
|
|
26
|
+
* - ERC-721 NFTs from only one NFT collection can be staked.
|
|
27
|
+
*
|
|
28
|
+
* - Contract admin can choose to give out rewards by either transferring or minting the rewardToken,
|
|
29
|
+
* which is an ERC20 token. See {_mintRewards}.
|
|
30
|
+
*
|
|
31
|
+
* - To implement custom logic for staking, reward calculation, etc. corresponding functions can be
|
|
32
|
+
* overridden from the extension `Staking721`.
|
|
33
|
+
*
|
|
34
|
+
* - Ownership of the contract, with the ability to restrict certain functions to
|
|
35
|
+
* only be called by the contract's owner.
|
|
36
|
+
*
|
|
37
|
+
* - Multicall capability to perform multiple actions atomically.
|
|
38
|
+
*
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
/// note: This contract is provided as a base contract.
|
|
42
|
+
// This is to support a variety of use-cases that can be build on top of this base.
|
|
43
|
+
//
|
|
44
|
+
// Additional functionality such as deposit functions, reward-minting, etc.
|
|
45
|
+
// must be implemented by the deployer of this contract, as needed for their use-case.
|
|
46
|
+
|
|
47
|
+
contract Staking721Base is ContractMetadata, Multicall, Ownable, Staking721, ERC165, IERC721Receiver {
|
|
48
|
+
/// @dev ERC20 Reward Token address. See {_mintRewards} below.
|
|
49
|
+
address public immutable rewardToken;
|
|
50
|
+
|
|
51
|
+
/// @dev The address of the native token wrapper contract.
|
|
52
|
+
address public immutable nativeTokenWrapper;
|
|
53
|
+
|
|
54
|
+
/// @dev Total amount of reward tokens in the contract.
|
|
55
|
+
uint256 private rewardTokenBalance;
|
|
56
|
+
|
|
57
|
+
constructor(
|
|
58
|
+
address _defaultAdmin,
|
|
59
|
+
uint256 _timeUnit,
|
|
60
|
+
uint256 _rewardsPerUnitTime,
|
|
61
|
+
address _stakingToken,
|
|
62
|
+
address _rewardToken,
|
|
63
|
+
address _nativeTokenWrapper
|
|
64
|
+
) Staking721(_stakingToken) {
|
|
65
|
+
_setupOwner(_defaultAdmin);
|
|
66
|
+
_setStakingCondition(_timeUnit, _rewardsPerUnitTime);
|
|
67
|
+
|
|
68
|
+
rewardToken = _rewardToken;
|
|
69
|
+
nativeTokenWrapper = _nativeTokenWrapper;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/// @dev Lets the contract receive ether to unwrap native tokens.
|
|
73
|
+
receive() external payable virtual {
|
|
74
|
+
require(msg.sender == nativeTokenWrapper, "caller not native token wrapper.");
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/// @dev Admin deposits reward tokens.
|
|
78
|
+
function depositRewardTokens(uint256 _amount) external payable virtual nonReentrant {
|
|
79
|
+
_depositRewardTokens(_amount); // override this for custom logic.
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/// @dev Admin can withdraw excess reward tokens.
|
|
83
|
+
function withdrawRewardTokens(uint256 _amount) external virtual nonReentrant {
|
|
84
|
+
_withdrawRewardTokens(_amount); // override this for custom logic.
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/// @notice View total rewards available in the staking contract.
|
|
88
|
+
function getRewardTokenBalance() external view virtual override returns (uint256) {
|
|
89
|
+
return rewardTokenBalance;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/*///////////////////////////////////////////////////////////////
|
|
93
|
+
ERC 165 / 721 logic
|
|
94
|
+
//////////////////////////////////////////////////////////////*/
|
|
95
|
+
|
|
96
|
+
function onERC721Received(
|
|
97
|
+
address,
|
|
98
|
+
address,
|
|
99
|
+
uint256,
|
|
100
|
+
bytes calldata
|
|
101
|
+
) external view virtual override returns (bytes4) {
|
|
102
|
+
require(isStaking == 2, "Direct transfer");
|
|
103
|
+
return this.onERC721Received.selector;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
|
|
107
|
+
return interfaceId == type(IERC721Receiver).interfaceId || super.supportsInterface(interfaceId);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/*//////////////////////////////////////////////////////////////
|
|
111
|
+
Minting logic
|
|
112
|
+
//////////////////////////////////////////////////////////////*/
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* @dev Mint ERC20 rewards to the staker. Override for custom logic.
|
|
116
|
+
*
|
|
117
|
+
* @param _staker Address for which to calculated rewards.
|
|
118
|
+
* @param _rewards Amount of tokens to be given out as reward.
|
|
119
|
+
*
|
|
120
|
+
*/
|
|
121
|
+
function _mintRewards(address _staker, uint256 _rewards) internal virtual override {
|
|
122
|
+
require(_rewards <= rewardTokenBalance, "Not enough reward tokens");
|
|
123
|
+
rewardTokenBalance -= _rewards;
|
|
124
|
+
CurrencyTransferLib.transferCurrencyWithWrapper(
|
|
125
|
+
rewardToken,
|
|
126
|
+
address(this),
|
|
127
|
+
_staker,
|
|
128
|
+
_rewards,
|
|
129
|
+
nativeTokenWrapper
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/*//////////////////////////////////////////////////////////////
|
|
134
|
+
Other Internal functions
|
|
135
|
+
//////////////////////////////////////////////////////////////*/
|
|
136
|
+
|
|
137
|
+
/// @dev Admin deposits reward tokens -- override for custom logic.
|
|
138
|
+
function _depositRewardTokens(uint256 _amount) internal virtual {
|
|
139
|
+
require(msg.sender == owner(), "Not authorized");
|
|
140
|
+
|
|
141
|
+
address _rewardToken = rewardToken == CurrencyTransferLib.NATIVE_TOKEN ? nativeTokenWrapper : rewardToken;
|
|
142
|
+
|
|
143
|
+
uint256 balanceBefore = IERC20(_rewardToken).balanceOf(address(this));
|
|
144
|
+
CurrencyTransferLib.transferCurrencyWithWrapper(
|
|
145
|
+
rewardToken,
|
|
146
|
+
msg.sender,
|
|
147
|
+
address(this),
|
|
148
|
+
_amount,
|
|
149
|
+
nativeTokenWrapper
|
|
150
|
+
);
|
|
151
|
+
uint256 actualAmount = IERC20(_rewardToken).balanceOf(address(this)) - balanceBefore;
|
|
152
|
+
|
|
153
|
+
rewardTokenBalance += actualAmount;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/// @dev Admin can withdraw excess reward tokens -- override for custom logic.
|
|
157
|
+
function _withdrawRewardTokens(uint256 _amount) internal virtual {
|
|
158
|
+
require(msg.sender == owner(), "Not authorized");
|
|
159
|
+
|
|
160
|
+
// to prevent locking of direct-transferred tokens
|
|
161
|
+
rewardTokenBalance = _amount > rewardTokenBalance ? 0 : rewardTokenBalance - _amount;
|
|
162
|
+
|
|
163
|
+
CurrencyTransferLib.transferCurrencyWithWrapper(
|
|
164
|
+
rewardToken,
|
|
165
|
+
address(this),
|
|
166
|
+
msg.sender,
|
|
167
|
+
_amount,
|
|
168
|
+
nativeTokenWrapper
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/// @dev Returns whether staking restrictions can be set in given execution context.
|
|
173
|
+
function _canSetStakeConditions() internal view virtual override returns (bool) {
|
|
174
|
+
return msg.sender == owner();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/// @dev Returns whether contract metadata can be set in the given execution context.
|
|
178
|
+
function _canSetContractURI() internal view virtual override returns (bool) {
|
|
179
|
+
return msg.sender == owner();
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/// @dev Returns whether owner can be set in the given execution context.
|
|
183
|
+
function _canSetOwner() internal view virtual override returns (bool) {
|
|
184
|
+
return msg.sender == owner();
|
|
185
|
+
}
|
|
186
|
+
}
|