@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,463 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.11;
|
|
3
|
+
|
|
4
|
+
/// @author thirdweb
|
|
5
|
+
|
|
6
|
+
// $$\ $$\ $$\ $$\ $$\
|
|
7
|
+
// $$ | $$ | \__| $$ | $$ |
|
|
8
|
+
// $$$$$$\ $$$$$$$\ $$\ $$$$$$\ $$$$$$$ |$$\ $$\ $$\ $$$$$$\ $$$$$$$\
|
|
9
|
+
// \_$$ _| $$ __$$\ $$ |$$ __$$\ $$ __$$ |$$ | $$ | $$ |$$ __$$\ $$ __$$\
|
|
10
|
+
// $$ | $$ | $$ |$$ |$$ | \__|$$ / $$ |$$ | $$ | $$ |$$$$$$$$ |$$ | $$ |
|
|
11
|
+
// $$ |$$\ $$ | $$ |$$ |$$ | $$ | $$ |$$ | $$ | $$ |$$ ____|$$ | $$ |
|
|
12
|
+
// \$$$$ |$$ | $$ |$$ |$$ | \$$$$$$$ |\$$$$$\$$$$ |\$$$$$$$\ $$$$$$$ |
|
|
13
|
+
// \____/ \__| \__|\__|\__| \_______| \_____\____/ \_______|\_______/
|
|
14
|
+
|
|
15
|
+
// ========== External imports ==========
|
|
16
|
+
|
|
17
|
+
import "@openzeppelin/contracts-upgradeable/token/ERC1155/extensions/ERC1155PausableUpgradeable.sol";
|
|
18
|
+
|
|
19
|
+
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
|
20
|
+
import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
|
|
21
|
+
import "@openzeppelin/contracts-upgradeable/interfaces/IERC2981Upgradeable.sol";
|
|
22
|
+
import "@openzeppelin/contracts/interfaces/IERC721Receiver.sol";
|
|
23
|
+
import { IERC1155Receiver } from "@openzeppelin/contracts/interfaces/IERC1155Receiver.sol";
|
|
24
|
+
|
|
25
|
+
// ========== Internal imports ==========
|
|
26
|
+
|
|
27
|
+
import "../interface/IPack.sol";
|
|
28
|
+
import "../../extension/Multicall.sol";
|
|
29
|
+
import "../../external-deps/openzeppelin/metatx/ERC2771ContextUpgradeable.sol";
|
|
30
|
+
|
|
31
|
+
// ========== Features ==========
|
|
32
|
+
|
|
33
|
+
import "../../extension/ContractMetadata.sol";
|
|
34
|
+
import "../../extension/Royalty.sol";
|
|
35
|
+
import "../../extension/Ownable.sol";
|
|
36
|
+
import "../../extension/PermissionsEnumerable.sol";
|
|
37
|
+
import { TokenStore, ERC1155Receiver } from "../../extension/TokenStore.sol";
|
|
38
|
+
|
|
39
|
+
contract Pack is
|
|
40
|
+
Initializable,
|
|
41
|
+
ContractMetadata,
|
|
42
|
+
Ownable,
|
|
43
|
+
Royalty,
|
|
44
|
+
PermissionsEnumerable,
|
|
45
|
+
TokenStore,
|
|
46
|
+
ReentrancyGuardUpgradeable,
|
|
47
|
+
ERC2771ContextUpgradeable,
|
|
48
|
+
Multicall,
|
|
49
|
+
ERC1155Upgradeable,
|
|
50
|
+
IPack
|
|
51
|
+
{
|
|
52
|
+
/*///////////////////////////////////////////////////////////////
|
|
53
|
+
State variables
|
|
54
|
+
//////////////////////////////////////////////////////////////*/
|
|
55
|
+
|
|
56
|
+
bytes32 private constant MODULE_TYPE = bytes32("Pack");
|
|
57
|
+
uint256 private constant VERSION = 2;
|
|
58
|
+
|
|
59
|
+
/// @dev Only transfers to or from TRANSFER_ROLE holders are valid, when transfers are restricted.
|
|
60
|
+
bytes32 private constant TRANSFER_ROLE = keccak256("TRANSFER_ROLE");
|
|
61
|
+
/// @dev Only MINTER_ROLE holders can create packs.
|
|
62
|
+
bytes32 private constant MINTER_ROLE = keccak256("MINTER_ROLE");
|
|
63
|
+
/// @dev Only assets with ASSET_ROLE can be packed, when packing is restricted to particular assets.
|
|
64
|
+
bytes32 private constant ASSET_ROLE = keccak256("ASSET_ROLE");
|
|
65
|
+
|
|
66
|
+
// Token name
|
|
67
|
+
string public name;
|
|
68
|
+
|
|
69
|
+
// Token symbol
|
|
70
|
+
string public symbol;
|
|
71
|
+
|
|
72
|
+
/// @dev The token Id of the next set of packs to be minted.
|
|
73
|
+
uint256 public nextTokenIdToMint;
|
|
74
|
+
|
|
75
|
+
/*///////////////////////////////////////////////////////////////
|
|
76
|
+
Mappings
|
|
77
|
+
//////////////////////////////////////////////////////////////*/
|
|
78
|
+
|
|
79
|
+
/// @dev Mapping from token ID => total circulating supply of token with that ID.
|
|
80
|
+
mapping(uint256 => uint256) public totalSupply;
|
|
81
|
+
|
|
82
|
+
/// @dev Mapping from pack ID => The state of that set of packs.
|
|
83
|
+
mapping(uint256 => PackInfo) private packInfo;
|
|
84
|
+
|
|
85
|
+
/// @dev Checks if pack-creator allowed to add more tokens to a packId; set to false after first transfer
|
|
86
|
+
mapping(uint256 => bool) public canUpdatePack;
|
|
87
|
+
|
|
88
|
+
/*///////////////////////////////////////////////////////////////
|
|
89
|
+
Constructor + initializer logic
|
|
90
|
+
//////////////////////////////////////////////////////////////*/
|
|
91
|
+
|
|
92
|
+
constructor(address _nativeTokenWrapper) TokenStore(_nativeTokenWrapper) initializer {}
|
|
93
|
+
|
|
94
|
+
/// @dev Initializes the contract, like a constructor.
|
|
95
|
+
/* solhint-disable no-unused-vars */
|
|
96
|
+
function initialize(
|
|
97
|
+
address _defaultAdmin,
|
|
98
|
+
string memory _name,
|
|
99
|
+
string memory _symbol,
|
|
100
|
+
string memory _contractURI,
|
|
101
|
+
address[] memory _trustedForwarders,
|
|
102
|
+
address _royaltyRecipient,
|
|
103
|
+
uint256 _royaltyBps
|
|
104
|
+
) external initializer {
|
|
105
|
+
__ERC1155_init(_contractURI);
|
|
106
|
+
|
|
107
|
+
name = _name;
|
|
108
|
+
symbol = _symbol;
|
|
109
|
+
|
|
110
|
+
_setupContractURI(_contractURI);
|
|
111
|
+
_setupOwner(_defaultAdmin);
|
|
112
|
+
_setupRole(DEFAULT_ADMIN_ROLE, _defaultAdmin);
|
|
113
|
+
_setupRole(MINTER_ROLE, _defaultAdmin);
|
|
114
|
+
|
|
115
|
+
// note: see `onlyRoleWithSwitch` for ASSET_ROLE behaviour.
|
|
116
|
+
_setupRole(ASSET_ROLE, address(0));
|
|
117
|
+
_setupRole(TRANSFER_ROLE, address(0));
|
|
118
|
+
|
|
119
|
+
_setupDefaultRoyaltyInfo(_royaltyRecipient, _royaltyBps);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* solhint-enable no-unused-vars */
|
|
123
|
+
|
|
124
|
+
receive() external payable {
|
|
125
|
+
require(msg.sender == nativeTokenWrapper, "!nativeTokenWrapper.");
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/*///////////////////////////////////////////////////////////////
|
|
129
|
+
Modifiers
|
|
130
|
+
//////////////////////////////////////////////////////////////*/
|
|
131
|
+
|
|
132
|
+
modifier onlyRoleWithSwitch(bytes32 role) {
|
|
133
|
+
_checkRoleWithSwitch(role, _msgSender());
|
|
134
|
+
_;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/*///////////////////////////////////////////////////////////////
|
|
138
|
+
Generic contract logic
|
|
139
|
+
//////////////////////////////////////////////////////////////*/
|
|
140
|
+
|
|
141
|
+
/// @dev Returns the type of the contract.
|
|
142
|
+
function contractType() external pure returns (bytes32) {
|
|
143
|
+
return MODULE_TYPE;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/// @dev Returns the version of the contract.
|
|
147
|
+
function contractVersion() external pure returns (uint8) {
|
|
148
|
+
return uint8(VERSION);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/*///////////////////////////////////////////////////////////////
|
|
152
|
+
ERC 165 / 1155 / 2981 logic
|
|
153
|
+
//////////////////////////////////////////////////////////////*/
|
|
154
|
+
|
|
155
|
+
/// @dev Returns the URI for a given tokenId.
|
|
156
|
+
function uri(uint256 _tokenId) public view override returns (string memory) {
|
|
157
|
+
return getUriOfBundle(_tokenId);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/// @dev See ERC 165
|
|
161
|
+
function supportsInterface(
|
|
162
|
+
bytes4 interfaceId
|
|
163
|
+
) public view virtual override(ERC1155Receiver, ERC1155Upgradeable, IERC165) returns (bool) {
|
|
164
|
+
return
|
|
165
|
+
super.supportsInterface(interfaceId) ||
|
|
166
|
+
type(IERC2981Upgradeable).interfaceId == interfaceId ||
|
|
167
|
+
type(IERC721Receiver).interfaceId == interfaceId ||
|
|
168
|
+
type(IERC1155Receiver).interfaceId == interfaceId;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/*///////////////////////////////////////////////////////////////
|
|
172
|
+
Pack logic: create | open packs.
|
|
173
|
+
//////////////////////////////////////////////////////////////*/
|
|
174
|
+
|
|
175
|
+
/// @dev Creates a pack with the stated contents.
|
|
176
|
+
function createPack(
|
|
177
|
+
Token[] calldata _contents,
|
|
178
|
+
uint256[] calldata _numOfRewardUnits,
|
|
179
|
+
string memory _packUri,
|
|
180
|
+
uint128 _openStartTimestamp,
|
|
181
|
+
uint128 _amountDistributedPerOpen,
|
|
182
|
+
address _recipient
|
|
183
|
+
) external payable onlyRoleWithSwitch(MINTER_ROLE) nonReentrant returns (uint256 packId, uint256 packTotalSupply) {
|
|
184
|
+
require(_contents.length > 0 && _contents.length == _numOfRewardUnits.length, "!Len");
|
|
185
|
+
|
|
186
|
+
if (!hasRole(ASSET_ROLE, address(0))) {
|
|
187
|
+
for (uint256 i = 0; i < _contents.length; i += 1) {
|
|
188
|
+
_checkRole(ASSET_ROLE, _contents[i].assetContract);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
packId = nextTokenIdToMint;
|
|
193
|
+
nextTokenIdToMint += 1;
|
|
194
|
+
|
|
195
|
+
packTotalSupply = escrowPackContents(
|
|
196
|
+
_contents,
|
|
197
|
+
_numOfRewardUnits,
|
|
198
|
+
_packUri,
|
|
199
|
+
packId,
|
|
200
|
+
_amountDistributedPerOpen,
|
|
201
|
+
false
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
packInfo[packId].openStartTimestamp = _openStartTimestamp;
|
|
205
|
+
packInfo[packId].amountDistributedPerOpen = _amountDistributedPerOpen;
|
|
206
|
+
|
|
207
|
+
canUpdatePack[packId] = true;
|
|
208
|
+
|
|
209
|
+
_mint(_recipient, packId, packTotalSupply, "");
|
|
210
|
+
|
|
211
|
+
emit PackCreated(packId, _recipient, packTotalSupply);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/// @dev Add contents to an existing packId.
|
|
215
|
+
function addPackContents(
|
|
216
|
+
uint256 _packId,
|
|
217
|
+
Token[] calldata _contents,
|
|
218
|
+
uint256[] calldata _numOfRewardUnits,
|
|
219
|
+
address _recipient
|
|
220
|
+
)
|
|
221
|
+
external
|
|
222
|
+
payable
|
|
223
|
+
onlyRoleWithSwitch(MINTER_ROLE)
|
|
224
|
+
nonReentrant
|
|
225
|
+
returns (uint256 packTotalSupply, uint256 newSupplyAdded)
|
|
226
|
+
{
|
|
227
|
+
require(canUpdatePack[_packId], "!Allowed");
|
|
228
|
+
require(_contents.length > 0 && _contents.length == _numOfRewardUnits.length, "!Len");
|
|
229
|
+
require(balanceOf(_recipient, _packId) != 0, "!Bal");
|
|
230
|
+
|
|
231
|
+
if (!hasRole(ASSET_ROLE, address(0))) {
|
|
232
|
+
for (uint256 i = 0; i < _contents.length; i += 1) {
|
|
233
|
+
_checkRole(ASSET_ROLE, _contents[i].assetContract);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
uint256 amountPerOpen = packInfo[_packId].amountDistributedPerOpen;
|
|
238
|
+
|
|
239
|
+
newSupplyAdded = escrowPackContents(_contents, _numOfRewardUnits, "", _packId, amountPerOpen, true);
|
|
240
|
+
packTotalSupply = totalSupply[_packId] + newSupplyAdded;
|
|
241
|
+
|
|
242
|
+
_mint(_recipient, _packId, newSupplyAdded, "");
|
|
243
|
+
|
|
244
|
+
emit PackUpdated(_packId, _recipient, newSupplyAdded);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/// @notice Lets a pack owner open packs and receive the packs' reward units.
|
|
248
|
+
function openPack(uint256 _packId, uint256 _amountToOpen) external nonReentrant returns (Token[] memory) {
|
|
249
|
+
address opener = _msgSender();
|
|
250
|
+
|
|
251
|
+
require(opener == tx.origin, "!EOA");
|
|
252
|
+
require(balanceOf(opener, _packId) >= _amountToOpen, "!Bal");
|
|
253
|
+
|
|
254
|
+
PackInfo memory pack = packInfo[_packId];
|
|
255
|
+
require(pack.openStartTimestamp <= block.timestamp, "cant open");
|
|
256
|
+
|
|
257
|
+
Token[] memory rewardUnits = getRewardUnits(_packId, _amountToOpen, pack.amountDistributedPerOpen, pack);
|
|
258
|
+
|
|
259
|
+
_burn(opener, _packId, _amountToOpen);
|
|
260
|
+
|
|
261
|
+
_transferTokenBatch(address(this), opener, rewardUnits);
|
|
262
|
+
|
|
263
|
+
emit PackOpened(_packId, opener, _amountToOpen, rewardUnits);
|
|
264
|
+
|
|
265
|
+
return rewardUnits;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/// @dev Stores assets within the contract.
|
|
269
|
+
function escrowPackContents(
|
|
270
|
+
Token[] calldata _contents,
|
|
271
|
+
uint256[] calldata _numOfRewardUnits,
|
|
272
|
+
string memory _packUri,
|
|
273
|
+
uint256 packId,
|
|
274
|
+
uint256 amountPerOpen,
|
|
275
|
+
bool isUpdate
|
|
276
|
+
) internal returns (uint256 supplyToMint) {
|
|
277
|
+
uint256 sumOfRewardUnits;
|
|
278
|
+
|
|
279
|
+
for (uint256 i = 0; i < _contents.length; i += 1) {
|
|
280
|
+
require(_contents[i].totalAmount != 0, "0 amt");
|
|
281
|
+
require(_contents[i].totalAmount % _numOfRewardUnits[i] == 0, "!R");
|
|
282
|
+
require(_contents[i].tokenType != TokenType.ERC721 || _contents[i].totalAmount == 1, "!R");
|
|
283
|
+
|
|
284
|
+
sumOfRewardUnits += _numOfRewardUnits[i];
|
|
285
|
+
|
|
286
|
+
packInfo[packId].perUnitAmounts.push(_contents[i].totalAmount / _numOfRewardUnits[i]);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
require(sumOfRewardUnits % amountPerOpen == 0, "!Amt");
|
|
290
|
+
supplyToMint = sumOfRewardUnits / amountPerOpen;
|
|
291
|
+
|
|
292
|
+
if (isUpdate) {
|
|
293
|
+
for (uint256 i = 0; i < _contents.length; i += 1) {
|
|
294
|
+
_addTokenInBundle(_contents[i], packId);
|
|
295
|
+
}
|
|
296
|
+
_transferTokenBatch(_msgSender(), address(this), _contents);
|
|
297
|
+
} else {
|
|
298
|
+
_storeTokens(_msgSender(), _contents, _packUri, packId);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/// @dev Returns the reward units to distribute.
|
|
303
|
+
function getRewardUnits(
|
|
304
|
+
uint256 _packId,
|
|
305
|
+
uint256 _numOfPacksToOpen,
|
|
306
|
+
uint256 _rewardUnitsPerOpen,
|
|
307
|
+
PackInfo memory pack
|
|
308
|
+
) internal returns (Token[] memory rewardUnits) {
|
|
309
|
+
uint256 numOfRewardUnitsToDistribute = _numOfPacksToOpen * _rewardUnitsPerOpen;
|
|
310
|
+
rewardUnits = new Token[](numOfRewardUnitsToDistribute);
|
|
311
|
+
uint256 totalRewardUnits = totalSupply[_packId] * _rewardUnitsPerOpen;
|
|
312
|
+
uint256 totalRewardKinds = getTokenCountOfBundle(_packId);
|
|
313
|
+
|
|
314
|
+
uint256 random = generateRandomValue();
|
|
315
|
+
|
|
316
|
+
(Token[] memory _token, ) = getPackContents(_packId);
|
|
317
|
+
bool[] memory _isUpdated = new bool[](totalRewardKinds);
|
|
318
|
+
for (uint256 i; i < numOfRewardUnitsToDistribute; ) {
|
|
319
|
+
uint256 randomVal = uint256(keccak256(abi.encode(random, i)));
|
|
320
|
+
uint256 target = randomVal % totalRewardUnits;
|
|
321
|
+
uint256 step;
|
|
322
|
+
for (uint256 j; j < totalRewardKinds; ) {
|
|
323
|
+
uint256 perUnitAmount = pack.perUnitAmounts[j];
|
|
324
|
+
uint256 totalRewardUnitsOfKind = _token[j].totalAmount / perUnitAmount;
|
|
325
|
+
if (target < step + totalRewardUnitsOfKind) {
|
|
326
|
+
_token[j].totalAmount -= perUnitAmount;
|
|
327
|
+
_isUpdated[j] = true;
|
|
328
|
+
rewardUnits[i].assetContract = _token[j].assetContract;
|
|
329
|
+
rewardUnits[i].tokenType = _token[j].tokenType;
|
|
330
|
+
rewardUnits[i].tokenId = _token[j].tokenId;
|
|
331
|
+
rewardUnits[i].totalAmount = perUnitAmount;
|
|
332
|
+
totalRewardUnits -= 1;
|
|
333
|
+
break;
|
|
334
|
+
} else {
|
|
335
|
+
step += totalRewardUnitsOfKind;
|
|
336
|
+
}
|
|
337
|
+
unchecked {
|
|
338
|
+
++j;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
unchecked {
|
|
342
|
+
++i;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
for (uint256 i; i < totalRewardKinds; ) {
|
|
346
|
+
if (_isUpdated[i]) {
|
|
347
|
+
_updateTokenInBundle(_token[i], _packId, i);
|
|
348
|
+
}
|
|
349
|
+
unchecked {
|
|
350
|
+
++i;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/*///////////////////////////////////////////////////////////////
|
|
356
|
+
Getter functions
|
|
357
|
+
//////////////////////////////////////////////////////////////*/
|
|
358
|
+
|
|
359
|
+
/// @dev Returns the underlying contents of a pack.
|
|
360
|
+
function getPackContents(
|
|
361
|
+
uint256 _packId
|
|
362
|
+
) public view returns (Token[] memory contents, uint256[] memory perUnitAmounts) {
|
|
363
|
+
PackInfo memory pack = packInfo[_packId];
|
|
364
|
+
uint256 total = getTokenCountOfBundle(_packId);
|
|
365
|
+
contents = new Token[](total);
|
|
366
|
+
perUnitAmounts = new uint256[](total);
|
|
367
|
+
|
|
368
|
+
for (uint256 i; i < total; ) {
|
|
369
|
+
contents[i] = getTokenOfBundle(_packId, i);
|
|
370
|
+
unchecked {
|
|
371
|
+
++i;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
perUnitAmounts = pack.perUnitAmounts;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/*///////////////////////////////////////////////////////////////
|
|
378
|
+
Internal functions
|
|
379
|
+
//////////////////////////////////////////////////////////////*/
|
|
380
|
+
|
|
381
|
+
/// @dev Returns whether owner can be set in the given execution context.
|
|
382
|
+
function _canSetOwner() internal view override returns (bool) {
|
|
383
|
+
return hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/// @dev Returns whether royalty info can be set in the given execution context.
|
|
387
|
+
function _canSetRoyaltyInfo() internal view override returns (bool) {
|
|
388
|
+
return hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/// @dev Returns whether contract metadata can be set in the given execution context.
|
|
392
|
+
function _canSetContractURI() internal view override returns (bool) {
|
|
393
|
+
return hasRole(DEFAULT_ADMIN_ROLE, _msgSender());
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/*///////////////////////////////////////////////////////////////
|
|
397
|
+
Miscellaneous
|
|
398
|
+
//////////////////////////////////////////////////////////////*/
|
|
399
|
+
|
|
400
|
+
function generateRandomValue() internal view returns (uint256 random) {
|
|
401
|
+
random = uint256(keccak256(abi.encodePacked(_msgSender(), blockhash(block.number - 1), block.difficulty)));
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* @dev See {ERC1155-_beforeTokenTransfer}.
|
|
406
|
+
*/
|
|
407
|
+
function _beforeTokenTransfer(
|
|
408
|
+
address operator,
|
|
409
|
+
address from,
|
|
410
|
+
address to,
|
|
411
|
+
uint256[] memory ids,
|
|
412
|
+
uint256[] memory amounts,
|
|
413
|
+
bytes memory data
|
|
414
|
+
) internal virtual override {
|
|
415
|
+
super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
|
|
416
|
+
|
|
417
|
+
// if transfer is restricted on the contract, we still want to allow burning and minting
|
|
418
|
+
if (!hasRole(TRANSFER_ROLE, address(0)) && from != address(0) && to != address(0)) {
|
|
419
|
+
require(hasRole(TRANSFER_ROLE, from) || hasRole(TRANSFER_ROLE, to), "!TRANSFER_ROLE");
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
if (from == address(0)) {
|
|
423
|
+
for (uint256 i = 0; i < ids.length; ++i) {
|
|
424
|
+
totalSupply[ids[i]] += amounts[i];
|
|
425
|
+
}
|
|
426
|
+
} else {
|
|
427
|
+
for (uint256 i = 0; i < ids.length; ++i) {
|
|
428
|
+
// pack can no longer be updated after first transfer to non-zero address
|
|
429
|
+
if (canUpdatePack[ids[i]] && amounts[i] != 0) {
|
|
430
|
+
canUpdatePack[ids[i]] = false;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
if (to == address(0)) {
|
|
436
|
+
for (uint256 i = 0; i < ids.length; ++i) {
|
|
437
|
+
totalSupply[ids[i]] -= amounts[i];
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/// @dev See EIP-2771
|
|
443
|
+
function _msgSender()
|
|
444
|
+
internal
|
|
445
|
+
view
|
|
446
|
+
virtual
|
|
447
|
+
override(ContextUpgradeable, ERC2771ContextUpgradeable, Multicall)
|
|
448
|
+
returns (address sender)
|
|
449
|
+
{
|
|
450
|
+
return ERC2771ContextUpgradeable._msgSender();
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/// @dev See EIP-2771
|
|
454
|
+
function _msgData()
|
|
455
|
+
internal
|
|
456
|
+
view
|
|
457
|
+
virtual
|
|
458
|
+
override(ContextUpgradeable, ERC2771ContextUpgradeable)
|
|
459
|
+
returns (bytes calldata)
|
|
460
|
+
{
|
|
461
|
+
return ERC2771ContextUpgradeable._msgData();
|
|
462
|
+
}
|
|
463
|
+
}
|