@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,246 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
pragma solidity ^0.8.0;
|
|
4
|
+
|
|
5
|
+
import "./ERC20Permit.sol";
|
|
6
|
+
|
|
7
|
+
import "../../../utils/math/Math.sol";
|
|
8
|
+
import "../../../governance/utils/IVotes.sol";
|
|
9
|
+
import "../../../utils/math/SafeCast.sol";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @dev Extension of ERC20 to support Compound-like voting and delegation. This version is more generic than Compound's,
|
|
13
|
+
* and supports token supply up to 2^224^ - 1, while COMP is limited to 2^96^ - 1.
|
|
14
|
+
*
|
|
15
|
+
* NOTE: If exact COMP compatibility is required, use the {ERC20VotesComp} variant of this module.
|
|
16
|
+
*
|
|
17
|
+
* This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either
|
|
18
|
+
* by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting
|
|
19
|
+
* power can be queried through the public accessors {getVotes} and {getPastVotes}.
|
|
20
|
+
*
|
|
21
|
+
* By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it
|
|
22
|
+
* requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked.
|
|
23
|
+
*
|
|
24
|
+
* _Available since v4.2._
|
|
25
|
+
*/
|
|
26
|
+
abstract contract ERC20Votes is IVotes, ERC20Permit {
|
|
27
|
+
struct Checkpoint {
|
|
28
|
+
uint32 fromBlock;
|
|
29
|
+
uint224 votes;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
bytes32 private constant _DELEGATION_TYPEHASH =
|
|
33
|
+
keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");
|
|
34
|
+
|
|
35
|
+
mapping(address => address) private _delegates;
|
|
36
|
+
mapping(address => Checkpoint[]) private _checkpoints;
|
|
37
|
+
Checkpoint[] private _totalSupplyCheckpoints;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @dev Get the `pos`-th checkpoint for `account`.
|
|
41
|
+
*/
|
|
42
|
+
function checkpoints(address account, uint32 pos) public view virtual returns (Checkpoint memory) {
|
|
43
|
+
return _checkpoints[account][pos];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @dev Get number of checkpoints for `account`.
|
|
48
|
+
*/
|
|
49
|
+
function numCheckpoints(address account) public view virtual returns (uint32) {
|
|
50
|
+
return SafeCast.toUint32(_checkpoints[account].length);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @dev Get the address `account` is currently delegating to.
|
|
55
|
+
*/
|
|
56
|
+
function delegates(address account) public view virtual override returns (address) {
|
|
57
|
+
return _delegates[account];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @dev Gets the current votes balance for `account`
|
|
62
|
+
*/
|
|
63
|
+
function getVotes(address account) public view virtual override returns (uint256) {
|
|
64
|
+
uint256 pos = _checkpoints[account].length;
|
|
65
|
+
return pos == 0 ? 0 : _checkpoints[account][pos - 1].votes;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @dev Retrieve the number of votes for `account` at the end of `blockNumber`.
|
|
70
|
+
*
|
|
71
|
+
* Requirements:
|
|
72
|
+
*
|
|
73
|
+
* - `blockNumber` must have been already mined
|
|
74
|
+
*/
|
|
75
|
+
function getPastVotes(address account, uint256 blockNumber) public view virtual override returns (uint256) {
|
|
76
|
+
require(blockNumber < block.number, "ERC20Votes: block not yet mined");
|
|
77
|
+
return _checkpointsLookup(_checkpoints[account], blockNumber);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @dev Retrieve the `totalSupply` at the end of `blockNumber`. Note, this value is the sum of all balances.
|
|
82
|
+
* It is but NOT the sum of all the delegated votes!
|
|
83
|
+
*
|
|
84
|
+
* Requirements:
|
|
85
|
+
*
|
|
86
|
+
* - `blockNumber` must have been already mined
|
|
87
|
+
*/
|
|
88
|
+
function getPastTotalSupply(uint256 blockNumber) public view virtual override returns (uint256) {
|
|
89
|
+
require(blockNumber < block.number, "ERC20Votes: block not yet mined");
|
|
90
|
+
return _checkpointsLookup(_totalSupplyCheckpoints, blockNumber);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @dev Lookup a value in a list of (sorted) checkpoints.
|
|
95
|
+
*/
|
|
96
|
+
function _checkpointsLookup(Checkpoint[] storage ckpts, uint256 blockNumber) private view returns (uint256) {
|
|
97
|
+
// We run a binary search to look for the earliest checkpoint taken after `blockNumber`.
|
|
98
|
+
//
|
|
99
|
+
// During the loop, the index of the wanted checkpoint remains in the range [low-1, high).
|
|
100
|
+
// With each iteration, either `low` or `high` is moved towards the middle of the range to maintain the invariant.
|
|
101
|
+
// - If the middle checkpoint is after `blockNumber`, we look in [low, mid)
|
|
102
|
+
// - If the middle checkpoint is before or equal to `blockNumber`, we look in [mid+1, high)
|
|
103
|
+
// Once we reach a single value (when low == high), we've found the right checkpoint at the index high-1, if not
|
|
104
|
+
// out of bounds (in which case we're looking too far in the past and the result is 0).
|
|
105
|
+
// Note that if the latest checkpoint available is exactly for `blockNumber`, we end up with an index that is
|
|
106
|
+
// past the end of the array, so we technically don't find a checkpoint after `blockNumber`, but it works out
|
|
107
|
+
// the same.
|
|
108
|
+
uint256 high = ckpts.length;
|
|
109
|
+
uint256 low = 0;
|
|
110
|
+
while (low < high) {
|
|
111
|
+
uint256 mid = Math.average(low, high);
|
|
112
|
+
if (ckpts[mid].fromBlock > blockNumber) {
|
|
113
|
+
high = mid;
|
|
114
|
+
} else {
|
|
115
|
+
low = mid + 1;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return high == 0 ? 0 : ckpts[high - 1].votes;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @dev Delegate votes from the sender to `delegatee`.
|
|
124
|
+
*/
|
|
125
|
+
function delegate(address delegatee) public virtual override {
|
|
126
|
+
// _delegate(_msgSender(), delegatee); //check
|
|
127
|
+
_delegate(_msgSender(), delegatee);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/*//////////////////////////////////////////////////////////////
|
|
131
|
+
Voting - delegation by signature
|
|
132
|
+
//////////////////////////////////////////////////////////////*/
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* @dev Delegates votes from signer to `delegatee`
|
|
136
|
+
*/
|
|
137
|
+
function delegateBySig(
|
|
138
|
+
address delegatee,
|
|
139
|
+
uint256 nonce,
|
|
140
|
+
uint256 expiry,
|
|
141
|
+
uint8 v,
|
|
142
|
+
bytes32 r,
|
|
143
|
+
bytes32 s
|
|
144
|
+
) public virtual override {
|
|
145
|
+
require(block.timestamp <= expiry, "ERC20Votes: signature expired");
|
|
146
|
+
|
|
147
|
+
bytes32 structHash = keccak256(abi.encode(_DELEGATION_TYPEHASH, delegatee, nonce, expiry));
|
|
148
|
+
bytes32 hash = ECDSA.toTypedDataHash(DOMAIN_SEPARATOR(), structHash);
|
|
149
|
+
address signer = ECDSA.recover(hash, v, r, s);
|
|
150
|
+
|
|
151
|
+
require(nonce == _useNonce(signer), "ERC20Votes: invalid nonce");
|
|
152
|
+
_delegate(signer, delegatee);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* @dev Maximum token supply. Defaults to `type(uint224).max` (2^224^ - 1).
|
|
157
|
+
*/
|
|
158
|
+
function _maxSupply() internal view virtual returns (uint224) {
|
|
159
|
+
return type(uint224).max;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* @dev Snapshots the totalSupply after it has been increased.
|
|
164
|
+
*/
|
|
165
|
+
function _mint(address account, uint256 amount) internal virtual override {
|
|
166
|
+
super._mint(account, amount);
|
|
167
|
+
require(totalSupply() <= _maxSupply(), "ERC20Votes: total supply risks overflowing votes");
|
|
168
|
+
|
|
169
|
+
_writeCheckpoint(_totalSupplyCheckpoints, _add, amount);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* @dev Snapshots the totalSupply after it has been decreased.
|
|
174
|
+
*/
|
|
175
|
+
function _burn(address account, uint256 amount) internal virtual override {
|
|
176
|
+
super._burn(account, amount);
|
|
177
|
+
|
|
178
|
+
_writeCheckpoint(_totalSupplyCheckpoints, _subtract, amount);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* @dev Move voting power when tokens are transferred.
|
|
183
|
+
*
|
|
184
|
+
* Emits a {DelegateVotesChanged} event.
|
|
185
|
+
*/
|
|
186
|
+
function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual override {
|
|
187
|
+
super._afterTokenTransfer(from, to, amount);
|
|
188
|
+
|
|
189
|
+
_moveVotingPower(delegates(from), delegates(to), amount);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* @dev Change delegation for `delegator` to `delegatee`.
|
|
194
|
+
*
|
|
195
|
+
* Emits events {DelegateChanged} and {DelegateVotesChanged}.
|
|
196
|
+
*/
|
|
197
|
+
function _delegate(address delegator, address delegatee) internal virtual {
|
|
198
|
+
address currentDelegate = delegates(delegator);
|
|
199
|
+
uint256 delegatorBalance = balanceOf(delegator);
|
|
200
|
+
_delegates[delegator] = delegatee;
|
|
201
|
+
|
|
202
|
+
emit DelegateChanged(delegator, currentDelegate, delegatee);
|
|
203
|
+
|
|
204
|
+
_moveVotingPower(currentDelegate, delegatee, delegatorBalance);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function _moveVotingPower(address src, address dst, uint256 amount) private {
|
|
208
|
+
if (src != dst && amount > 0) {
|
|
209
|
+
if (src != address(0)) {
|
|
210
|
+
(uint256 oldWeight, uint256 newWeight) = _writeCheckpoint(_checkpoints[src], _subtract, amount);
|
|
211
|
+
emit DelegateVotesChanged(src, oldWeight, newWeight);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
if (dst != address(0)) {
|
|
215
|
+
(uint256 oldWeight, uint256 newWeight) = _writeCheckpoint(_checkpoints[dst], _add, amount);
|
|
216
|
+
emit DelegateVotesChanged(dst, oldWeight, newWeight);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
function _writeCheckpoint(
|
|
222
|
+
Checkpoint[] storage ckpts,
|
|
223
|
+
function(uint256, uint256) view returns (uint256) op,
|
|
224
|
+
uint256 delta
|
|
225
|
+
) private returns (uint256 oldWeight, uint256 newWeight) {
|
|
226
|
+
uint256 pos = ckpts.length;
|
|
227
|
+
oldWeight = pos == 0 ? 0 : ckpts[pos - 1].votes;
|
|
228
|
+
newWeight = op(oldWeight, delta);
|
|
229
|
+
|
|
230
|
+
if (pos > 0 && ckpts[pos - 1].fromBlock == block.number) {
|
|
231
|
+
ckpts[pos - 1].votes = SafeCast.toUint224(newWeight);
|
|
232
|
+
} else {
|
|
233
|
+
ckpts.push(
|
|
234
|
+
Checkpoint({ fromBlock: SafeCast.toUint32(block.number), votes: SafeCast.toUint224(newWeight) })
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
function _add(uint256 a, uint256 b) private pure returns (uint256) {
|
|
240
|
+
return a + b;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
function _subtract(uint256 a, uint256 b) private pure returns (uint256) {
|
|
244
|
+
return a - b;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
import "../../../../../eip/interface/IERC20.sol";
|
|
7
|
+
import { Address } from "../../../../../lib/Address.sol";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @title SafeERC20
|
|
11
|
+
* @dev Wrappers around ERC20 operations that throw on failure (when the token
|
|
12
|
+
* contract returns false). Tokens that return no value (and instead revert or
|
|
13
|
+
* throw on failure) are also supported, non-reverting calls are assumed to be
|
|
14
|
+
* successful.
|
|
15
|
+
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
|
|
16
|
+
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
|
|
17
|
+
*/
|
|
18
|
+
library SafeERC20 {
|
|
19
|
+
using Address for address;
|
|
20
|
+
|
|
21
|
+
function safeTransfer(IERC20 token, address to, uint256 value) internal {
|
|
22
|
+
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
|
|
26
|
+
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @dev Deprecated. This function has issues similar to the ones found in
|
|
31
|
+
* {IERC20-approve}, and its usage is discouraged.
|
|
32
|
+
*
|
|
33
|
+
* Whenever possible, use {safeIncreaseAllowance} and
|
|
34
|
+
* {safeDecreaseAllowance} instead.
|
|
35
|
+
*/
|
|
36
|
+
function safeApprove(IERC20 token, address spender, uint256 value) internal {
|
|
37
|
+
// safeApprove should only be called when setting an initial allowance,
|
|
38
|
+
// or when resetting it to zero. To increase and decrease it, use
|
|
39
|
+
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
|
|
40
|
+
require(
|
|
41
|
+
(value == 0) || (token.allowance(address(this), spender) == 0),
|
|
42
|
+
"SafeERC20: approve from non-zero to non-zero allowance"
|
|
43
|
+
);
|
|
44
|
+
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
|
|
48
|
+
uint256 newAllowance = token.allowance(address(this), spender) + value;
|
|
49
|
+
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
|
|
53
|
+
unchecked {
|
|
54
|
+
uint256 oldAllowance = token.allowance(address(this), spender);
|
|
55
|
+
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
|
|
56
|
+
uint256 newAllowance = oldAllowance - value;
|
|
57
|
+
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
|
|
63
|
+
* on the return value: the return value is optional (but if data is returned, it must not be false).
|
|
64
|
+
* @param token The token targeted by the call.
|
|
65
|
+
* @param data The call data (encoded using abi.encode or one of its variants).
|
|
66
|
+
*/
|
|
67
|
+
function _callOptionalReturn(IERC20 token, bytes memory data) private {
|
|
68
|
+
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
|
|
69
|
+
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
|
|
70
|
+
// the target address contains contract code and also asserts for success in the low-level call.
|
|
71
|
+
|
|
72
|
+
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
|
|
73
|
+
if (returndata.length > 0) {
|
|
74
|
+
// Return data is optional
|
|
75
|
+
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @title ERC721 token receiver interface
|
|
8
|
+
* @dev Interface for any contract that wants to support safeTransfers
|
|
9
|
+
* from ERC721 asset contracts.
|
|
10
|
+
*/
|
|
11
|
+
interface IERC721Receiver {
|
|
12
|
+
/**
|
|
13
|
+
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
|
|
14
|
+
* by `operator` from `from`, this function is called.
|
|
15
|
+
*
|
|
16
|
+
* It must return its Solidity selector to confirm the token transfer.
|
|
17
|
+
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
|
|
18
|
+
*
|
|
19
|
+
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
|
|
20
|
+
*/
|
|
21
|
+
function onERC721Received(
|
|
22
|
+
address operator,
|
|
23
|
+
address from,
|
|
24
|
+
uint256 tokenId,
|
|
25
|
+
bytes calldata data
|
|
26
|
+
) external returns (bytes4);
|
|
27
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
import "../IERC721Receiver.sol";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @dev Implementation of the {IERC721Receiver} interface.
|
|
10
|
+
*
|
|
11
|
+
* Accepts all token transfers.
|
|
12
|
+
* Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
|
|
13
|
+
*/
|
|
14
|
+
contract ERC721Holder is IERC721Receiver {
|
|
15
|
+
/**
|
|
16
|
+
* @dev See {IERC721Receiver-onERC721Received}.
|
|
17
|
+
*
|
|
18
|
+
* Always returns `IERC721Receiver.onERC721Received.selector`.
|
|
19
|
+
*/
|
|
20
|
+
function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {
|
|
21
|
+
return this.onERC721Received.selector;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Base64.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @dev Provides a set of functions to operate with Base64 strings.
|
|
8
|
+
*
|
|
9
|
+
* _Available since v4.5._
|
|
10
|
+
*/
|
|
11
|
+
library Base64 {
|
|
12
|
+
/**
|
|
13
|
+
* @dev Base64 Encoding/Decoding Table
|
|
14
|
+
*/
|
|
15
|
+
string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @dev Converts a `bytes` to its Bytes64 `string` representation.
|
|
19
|
+
*/
|
|
20
|
+
function encode(bytes memory data) internal pure returns (string memory) {
|
|
21
|
+
/**
|
|
22
|
+
* Inspired by Brecht Devos (Brechtpd) implementation - MIT licence
|
|
23
|
+
* https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol
|
|
24
|
+
*/
|
|
25
|
+
if (data.length == 0) return "";
|
|
26
|
+
|
|
27
|
+
// Loads the table into memory
|
|
28
|
+
string memory table = _TABLE;
|
|
29
|
+
|
|
30
|
+
// Encoding takes 3 bytes chunks of binary data from `bytes` data parameter
|
|
31
|
+
// and split into 4 numbers of 6 bits.
|
|
32
|
+
// The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up
|
|
33
|
+
// - `data.length + 2` -> Round up
|
|
34
|
+
// - `/ 3` -> Number of 3-bytes chunks
|
|
35
|
+
// - `4 *` -> 4 characters for each chunk
|
|
36
|
+
string memory result = new string(4 * ((data.length + 2) / 3));
|
|
37
|
+
|
|
38
|
+
/// @solidity memory-safe-assembly
|
|
39
|
+
assembly {
|
|
40
|
+
// Prepare the lookup table (skip the first "length" byte)
|
|
41
|
+
let tablePtr := add(table, 1)
|
|
42
|
+
|
|
43
|
+
// Prepare result pointer, jump over length
|
|
44
|
+
let resultPtr := add(result, 32)
|
|
45
|
+
|
|
46
|
+
// Run over the input, 3 bytes at a time
|
|
47
|
+
for {
|
|
48
|
+
let dataPtr := data
|
|
49
|
+
let endPtr := add(data, mload(data))
|
|
50
|
+
} lt(dataPtr, endPtr) {
|
|
51
|
+
|
|
52
|
+
} {
|
|
53
|
+
// Advance 3 bytes
|
|
54
|
+
dataPtr := add(dataPtr, 3)
|
|
55
|
+
let input := mload(dataPtr)
|
|
56
|
+
|
|
57
|
+
// To write each character, shift the 3 bytes (18 bits) chunk
|
|
58
|
+
// 4 times in blocks of 6 bits for each character (18, 12, 6, 0)
|
|
59
|
+
// and apply logical AND with 0x3F which is the number of
|
|
60
|
+
// the previous character in the ASCII table prior to the Base64 Table
|
|
61
|
+
// The result is then added to the table to get the character to write,
|
|
62
|
+
// and finally write it in the result pointer but with a left shift
|
|
63
|
+
// of 256 (1 byte) - 8 (1 ASCII char) = 248 bits
|
|
64
|
+
|
|
65
|
+
mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
|
|
66
|
+
resultPtr := add(resultPtr, 1) // Advance
|
|
67
|
+
|
|
68
|
+
mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
|
|
69
|
+
resultPtr := add(resultPtr, 1) // Advance
|
|
70
|
+
|
|
71
|
+
mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
|
|
72
|
+
resultPtr := add(resultPtr, 1) // Advance
|
|
73
|
+
|
|
74
|
+
mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
|
|
75
|
+
resultPtr := add(resultPtr, 1) // Advance
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// When data `bytes` is not exactly 3 bytes long
|
|
79
|
+
// it is padded with `=` characters at the end
|
|
80
|
+
switch mod(mload(data), 3)
|
|
81
|
+
case 1 {
|
|
82
|
+
mstore8(sub(resultPtr, 1), 0x3d)
|
|
83
|
+
mstore8(sub(resultPtr, 2), 0x3d)
|
|
84
|
+
}
|
|
85
|
+
case 2 {
|
|
86
|
+
mstore8(sub(resultPtr, 1), 0x3d)
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @dev Provides information about the current execution context, including the
|
|
8
|
+
* sender of the transaction and its data. While these are generally available
|
|
9
|
+
* via msg.sender and msg.data, they should not be accessed in such a direct
|
|
10
|
+
* manner, since when dealing with meta-transactions the account sending and
|
|
11
|
+
* paying for execution may not be the actual sender (as far as an application
|
|
12
|
+
* is concerned).
|
|
13
|
+
*
|
|
14
|
+
* This contract is only required for intermediate, library-like contracts.
|
|
15
|
+
*/
|
|
16
|
+
abstract contract Context {
|
|
17
|
+
function _msgSender() internal view virtual returns (address) {
|
|
18
|
+
return msg.sender;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function _msgData() internal view virtual returns (bytes calldata) {
|
|
22
|
+
return msg.data;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @title Counters
|
|
8
|
+
* @author Matt Condon (@shrugs)
|
|
9
|
+
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
|
|
10
|
+
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
|
|
11
|
+
*
|
|
12
|
+
* Include with `using Counters for Counters.Counter;`
|
|
13
|
+
*/
|
|
14
|
+
library Counters {
|
|
15
|
+
struct Counter {
|
|
16
|
+
// This variable should never be directly accessed by users of the library: interactions must be restricted to
|
|
17
|
+
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
|
|
18
|
+
// this feature: see https://github.com/ethereum/solidity/issues/4637
|
|
19
|
+
uint256 _value; // default: 0
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function current(Counter storage counter) internal view returns (uint256) {
|
|
23
|
+
return counter._value;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function increment(Counter storage counter) internal {
|
|
27
|
+
unchecked {
|
|
28
|
+
counter._value += 1;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function decrement(Counter storage counter) internal {
|
|
33
|
+
uint256 value = counter._value;
|
|
34
|
+
require(value > 0, "Counter: decrement overflow");
|
|
35
|
+
unchecked {
|
|
36
|
+
counter._value = value - 1;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function reset(Counter storage counter) internal {
|
|
41
|
+
counter._value = 0;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Create2.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.
|
|
8
|
+
* `CREATE2` can be used to compute in advance the address where a smart
|
|
9
|
+
* contract will be deployed, which allows for interesting new mechanisms known
|
|
10
|
+
* as 'counterfactual interactions'.
|
|
11
|
+
*
|
|
12
|
+
* See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more
|
|
13
|
+
* information.
|
|
14
|
+
*/
|
|
15
|
+
library Create2 {
|
|
16
|
+
/**
|
|
17
|
+
* @dev Deploys a contract using `CREATE2`. The address where the contract
|
|
18
|
+
* will be deployed can be known in advance via {computeAddress}.
|
|
19
|
+
*
|
|
20
|
+
* The bytecode for a contract can be obtained from Solidity with
|
|
21
|
+
* `type(contractName).creationCode`.
|
|
22
|
+
*
|
|
23
|
+
* Requirements:
|
|
24
|
+
*
|
|
25
|
+
* - `bytecode` must not be empty.
|
|
26
|
+
* - `salt` must have not been used for `bytecode` already.
|
|
27
|
+
* - the factory must have a balance of at least `amount`.
|
|
28
|
+
* - if `amount` is non-zero, `bytecode` must have a `payable` constructor.
|
|
29
|
+
*/
|
|
30
|
+
function deploy(uint256 amount, bytes32 salt, bytes memory bytecode) internal returns (address) {
|
|
31
|
+
address addr;
|
|
32
|
+
require(address(this).balance >= amount, "Create2: insufficient balance");
|
|
33
|
+
require(bytecode.length != 0, "Create2: bytecode length is zero");
|
|
34
|
+
/// @solidity memory-safe-assembly
|
|
35
|
+
assembly {
|
|
36
|
+
addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)
|
|
37
|
+
}
|
|
38
|
+
require(addr != address(0), "Create2: Failed on deploy");
|
|
39
|
+
return addr;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the
|
|
44
|
+
* `bytecodeHash` or `salt` will result in a new destination address.
|
|
45
|
+
*/
|
|
46
|
+
function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {
|
|
47
|
+
return computeAddress(salt, bytecodeHash, address(this));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at
|
|
52
|
+
* `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.
|
|
53
|
+
*/
|
|
54
|
+
function computeAddress(bytes32 salt, bytes32 bytecodeHash, address deployer) internal pure returns (address) {
|
|
55
|
+
bytes32 _data = keccak256(abi.encodePacked(bytes1(0xff), deployer, salt, bytecodeHash));
|
|
56
|
+
return address(uint160(uint256(_data)));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/utils/ERC1155Holder.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
import "./ERC1155Receiver.sol";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Simple implementation of `ERC1155Receiver` that will allow a contract to hold ERC1155 tokens.
|
|
10
|
+
*
|
|
11
|
+
* IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be
|
|
12
|
+
* stuck.
|
|
13
|
+
*
|
|
14
|
+
* @dev _Available since v3.1._
|
|
15
|
+
*/
|
|
16
|
+
contract ERC1155Holder is ERC1155Receiver {
|
|
17
|
+
function onERC1155Received(
|
|
18
|
+
address,
|
|
19
|
+
address,
|
|
20
|
+
uint256,
|
|
21
|
+
uint256,
|
|
22
|
+
bytes memory
|
|
23
|
+
) public virtual override returns (bytes4) {
|
|
24
|
+
return this.onERC1155Received.selector;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function onERC1155BatchReceived(
|
|
28
|
+
address,
|
|
29
|
+
address,
|
|
30
|
+
uint256[] memory,
|
|
31
|
+
uint256[] memory,
|
|
32
|
+
bytes memory
|
|
33
|
+
) public virtual override returns (bytes4) {
|
|
34
|
+
return this.onERC1155BatchReceived.selector;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache 2.0
|
|
2
|
+
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
import "../../../../eip/interface/IERC1155Receiver.sol";
|
|
7
|
+
import "../../../../eip/ERC165.sol";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @dev _Available since v3.1._
|
|
11
|
+
*/
|
|
12
|
+
abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
|
|
13
|
+
/**
|
|
14
|
+
* @dev See {IERC165-supportsInterface}.
|
|
15
|
+
*/
|
|
16
|
+
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
|
|
17
|
+
return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
import "../../../../eip/interface/IERC721Receiver.sol";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @dev Implementation of the {IERC721Receiver} interface.
|
|
10
|
+
*
|
|
11
|
+
* Accepts all token transfers.
|
|
12
|
+
* Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
|
|
13
|
+
*/
|
|
14
|
+
contract ERC721Holder is IERC721Receiver {
|
|
15
|
+
/**
|
|
16
|
+
* @dev See {IERC721Receiver-onERC721Received}.
|
|
17
|
+
*
|
|
18
|
+
* Always returns `IERC721Receiver.onERC721Received.selector`.
|
|
19
|
+
*/
|
|
20
|
+
function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {
|
|
21
|
+
return this.onERC721Received.selector;
|
|
22
|
+
}
|
|
23
|
+
}
|