@artblocks/contracts 1.0.3 → 1.1.0
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/README.md +32 -25
- package/artifacts/contracts/AdminACLV0.sol/AdminACLV0.json +2 -2
- package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
- package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +212 -17
- package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +6 -6
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV0.sol/MinterDAExpV0.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV1.sol/MinterDAExpV1.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV0.sol/MinterDALinV0.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV1.sol/MinterDALinV1.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV0.sol/MinterHolderV0.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV0.sol/MinterMerkleV0.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV0.sol/MinterSetPriceV0.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV1.sol/MinterSetPriceV1.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol/MinterSetPriceERC20V0.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol/MinterSetPriceERC20V1.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
- package/artifacts/contracts/engine/V2/GenArt721CoreV2_ENGINE_FLEX.sol/GenArt721CoreV2_ENGINE_FLEX.json +2 -2
- package/artifacts/contracts/engine/V2/GenArt721CoreV2_PBAB.sol/GenArt721CoreV2_PBAB.json +2 -2
- package/artifacts/contracts/engine/V2/GenArt721CoreV2_PRTNR.sol/GenArt721CoreV2_PRTNR.json +2 -2
- package/artifacts/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol/GenArt721MinterBurner_PBAB.json +2 -2
- package/artifacts/contracts/engine/V2/GenArt721MinterDAExp_PBAB.sol/GenArt721MinterDAExp_PBAB.json +2 -2
- package/artifacts/contracts/engine/V2/GenArt721Minter_PBAB.sol/GenArt721Minter_PBAB.json +2 -2
- package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +6 -11
- package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +6 -11
- package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +6 -11
- package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +2 -2
- package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +6 -11
- package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +12 -12
- package/artifacts/contracts/engine-registry/EngineRegistryV0.sol/EngineRegistryV0.json +2 -2
- package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +6 -6
- package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IBonusContract.sol/IBonusContract.json +1 -1
- package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreContractV1.sol/IGenArt721CoreContractV1.json +1 -1
- package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreV2_PBAB.sol/IGenArt721CoreV2_PBAB.json +1 -1
- package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IRandomizer.sol/IRandomizer.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IAdminACLV0.sol/IAdminACLV0.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IArtblocksRoyaltyOverride.sol/IArtblocksRoyaltyOverride.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IBonusContract.sol/IBonusContract.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IBytecodeStorageReader.sol/IBytecodeStorageReader.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/ICoreRegistryV1.sol/ICoreRegistryV1.json +7 -7
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IDelegationRegistry.sol/IDelegationRegistry.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryCompatibleV0.sol/IDependencyRegistryCompatibleV0.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +22 -3
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IEngineRegistryV0.sol/IEngineRegistryV0.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV0.sol/IFilteredMinterDAExpSettlementV0.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV1.sol/IFilteredMinterDAExpSettlementV1.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlement_Mixin.sol/IFilteredMinterDAExpSettlement_Mixin.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV0.sol/IFilteredMinterDAExpV0.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV1.sol/IFilteredMinterDAExpV1.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV0.sol/IFilteredMinterDALinV0.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV1.sol/IFilteredMinterDALinV1.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV0.sol/IFilteredMinterHolderV0.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV1.sol/IFilteredMinterHolderV1.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV2.sol/IFilteredMinterHolderV2.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV0.sol/IFilteredMinterMerkleV0.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV1.sol/IFilteredMinterMerkleV1.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV2.sol/IFilteredMinterMerkleV2.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterSEAV0.sol/IFilteredMinterSEAV0.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV0.sol/IFilteredMinterV0.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV1.sol/IFilteredMinterV1.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV2.sol/IFilteredMinterV2.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractExposesHashSeed.sol/IGenArt721CoreContractExposesHashSeed.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV1.sol/IGenArt721CoreContractV1.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +1 -1
- package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol/IGenArt721CoreContractV3WithSharedRandomizer.json +24 -0
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreV2_PBAB.sol/IGenArt721CoreV2_PBAB.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IManifold.sol/IManifold.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMinterBaseV0.sol/IMinterBaseV0.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV0.sol/IMinterFilterV0.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV1.sol/IMinterFilterV1.json +104 -19
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPICoreV0.sol/IMintingAPICoreV0.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPIMinterV0.sol/IMintingAPIMinterV0.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IPseudorandomAtomic.sol/IPseudorandomAtomic.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizer.sol/IRandomizer.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerPolyptychV0.sol/IRandomizerPolyptychV0.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerV2.sol/IRandomizerV2.json +1 -1
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizer_V3CoreBase.sol/IRandomizer_V3CoreBase.json +1 -1
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol/ISharedMinterDAExpSettlementV0.json +114 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol/ISharedMinterDAExpV0.json +37 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol/ISharedMinterDALinV0.json +37 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol/ISharedMinterDAV0.json +50 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol/ISharedMinterHolderERC20V0.json +158 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol/ISharedMinterHolderV0.json +128 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol/ISharedMinterMerkleV0.json +97 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol/ISharedMinterSEAV0.json +29 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol/ISharedMinterSimplePurchaseV0.json +64 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterV0.sol/ISharedMinterV0.json +117 -0
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/ISharedRandomizerV0.sol/ISharedRandomizerV0.json +52 -36
- package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IWETH.sol/IWETH.json +1 -1
- package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Address.json +2 -2
- package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Counters.json +2 -2
- package/artifacts/contracts/legacy/GenArt721CoreV1.sol/CustomERC721Metadata.json +2 -2
- package/artifacts/contracts/legacy/GenArt721CoreV1.sol/ERC721.json +2 -2
- package/artifacts/contracts/legacy/GenArt721CoreV1.sol/ERC721Enumerable.json +2 -2
- package/artifacts/contracts/legacy/GenArt721CoreV1.sol/GenArt721CoreV1.json +2 -2
- package/artifacts/contracts/legacy/GenArt721CoreV1.sol/SafeMath.json +2 -2
- package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Strings.json +2 -2
- package/artifacts/contracts/legacy/GenArt721LegacyMinter.sol/GenArt721LegacyMinter.json +2 -2
- package/artifacts/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol/DelegationRegistry.json +2 -2
- package/artifacts/contracts/libs/{0.5.x → v0.5.x}/CustomERC721Metadata.sol/CustomERC721Metadata.json +3 -3
- package/artifacts/contracts/libs/{0.5.x → v0.5.x}/IERC20.sol/IERC20.json +1 -1
- package/artifacts/contracts/libs/{0.5.x → v0.5.x}/SafeMath.sol/SafeMath.json +3 -3
- package/artifacts/contracts/libs/{0.5.x → v0.5.x}/Strings.sol/Strings.json +3 -3
- package/artifacts/contracts/libs/v0.8.x/ABHelpers.sol/ABHelpers.json +10 -0
- package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +10 -0
- package/artifacts/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV0.sol/BytecodeStorage.json +3 -3
- package/artifacts/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV1.sol/BytecodeStorageReader.json +3 -3
- package/artifacts/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV1.sol/BytecodeStorageWriter.json +3 -3
- package/artifacts/contracts/libs/{0.8.x → v0.8.x}/Bytes32Strings.sol/Bytes32Strings.json +3 -3
- package/artifacts/contracts/libs/{0.8.x → v0.8.x}/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +3 -3
- package/artifacts/contracts/libs/{0.8.x → v0.8.x}/SSTORE2.sol/SSTORE2.json +3 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol/DAExpLib.json +67 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/DALib.sol/DALib.json +30 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +67 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol/GenericMinterEventsLib.json +346 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +36 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +37 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +10 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +261 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +55 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +48 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +42 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +86 -0
- package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV0.sol/MinterFilterV0.json +2 -2
- package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
- package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +96 -40
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +662 -0
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -20
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +619 -0
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpV4.sol/MinterDAExpV4.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +418 -0
- package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +662 -0
- package/artifacts/contracts/minter-suite/Minters/MinterDALinV4.sol/MinterDALinV4.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +418 -0
- package/artifacts/contracts/minter-suite/Minters/MinterHolderV4.sol/MinterHolderV4.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterMerkleV5.sol/MinterMerkleV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSEAV0.sol/MinterSEAV0.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +659 -0
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +452 -0
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +600 -0
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +633 -0
- package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +782 -0
- package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +676 -0
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV4.sol/MinterSetPriceV4.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +356 -0
- package/artifacts/contracts/mock/BytecodeV0TextCR_DMock.sol/BytecodeV0TextCR_DMock.json +2 -2
- package/artifacts/contracts/mock/BytecodeV1LibCallsMock.sol/BytecodeV1LibCallsMock.json +2 -2
- package/artifacts/contracts/mock/BytecodeV1TextCR_DMock.sol/BytecodeV1TextCR_DMock.json +4 -4
- package/artifacts/contracts/mock/DeadReceiverBidderMock.sol/DeadReceiverBidderMock.json +25 -2
- package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
- package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +28 -2
- package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +6 -11
- package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +2 -2
- package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +2 -2
- package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +2 -2
- package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancyHolderMock.sol/ReentrancyHolderMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancyHolderMockShared.sol/ReentrancyHolderMockShared.json +136 -0
- package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancyMerkleMockShared.sol/ReentrancyMerkleMockShared.json +105 -0
- package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancyMockShared.sol/ReentrancyMockShared.json +100 -0
- package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancySEAMockShared.sol/ReentrancySEAAutoBidderMockShared.json +69 -0
- package/artifacts/contracts/mock/SSTORE2Mock.sol/SSTORE2Mock.json +2 -2
- package/artifacts/contracts/randomizer/deprecated/BasicRandomizer.sol/BasicRandomizer.json +2 -2
- package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +2 -2
- package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +2 -2
- package/artifacts/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol/PseudorandomAtomic.json +2 -2
- package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +58 -42
- package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +2 -2
- package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol/GenArt721RoyaltyOverride_PBAB.json +2 -2
- package/contracts/AdminACLV0.sol +1 -1
- package/contracts/AdminACLV1.sol +1 -1
- package/contracts/DependencyRegistryV0.sol +300 -123
- package/contracts/GenArt721CoreV3.sol +27 -12
- package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV0.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV1.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV0.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV1.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV0.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol +4 -4
- package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol +4 -4
- package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV0.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol +4 -4
- package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol +4 -4
- package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol +4 -4
- package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV0.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV1.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol +3 -3
- package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol +3 -3
- package/contracts/archive/readme.md +16 -0
- package/contracts/engine/README.md +21 -0
- package/contracts/engine/V2/GenArt721CoreV2_ENGINE_FLEX.sol +2 -2
- package/contracts/engine/V2/GenArt721CoreV2_PBAB.sol +2 -2
- package/contracts/engine/V2/GenArt721CoreV2_PRTNR.sol +3 -3
- package/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol +2 -2
- package/contracts/engine/V2/GenArt721MinterDAExp_PBAB.sol +1 -1
- package/contracts/engine/V2/GenArt721Minter_PBAB.sol +2 -2
- package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +31 -22
- package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +31 -22
- package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +12 -18
- package/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol +1 -1
- package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +23 -24
- package/contracts/engine/V3/forks/PROHIBITION/interfaces/IAdminACLV0_PROHIBITION.sol +1 -1
- package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +1 -1
- package/contracts/engine-registry/CoreRegistryV1.sol +58 -65
- package/contracts/engine-registry/EngineRegistryV0.sol +1 -1
- package/contracts/explorations/GenArt721CoreV3_Explorations.sol +27 -12
- package/contracts/interfaces/{0.8.x → v0.8.x}/ICoreRegistryV1.sol +6 -8
- package/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryV0.sol +5 -2
- package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol +23 -0
- package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV1.sol +45 -19
- package/contracts/interfaces/v0.8.x/IRandomizer_V3CoreBase.sol +23 -0
- package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +28 -0
- package/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol +12 -0
- package/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol +12 -0
- package/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol +13 -0
- package/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol +47 -0
- package/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol +41 -0
- package/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol +34 -0
- package/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol +15 -0
- package/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol +28 -0
- package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +43 -0
- package/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol +123 -0
- package/contracts/legacy/GenArt721CoreV1.sol +2 -2
- package/contracts/legacy/GenArt721LegacyMinter.sol +5 -5
- package/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol +1 -1
- package/contracts/libs/v0.8.x/ABHelpers.sol +55 -0
- package/contracts/libs/v0.8.x/AuthLib.sol +196 -0
- package/contracts/libs/{0.8.x → v0.8.x}/Bytes32Strings.sol +5 -5
- package/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol +250 -0
- package/contracts/libs/v0.8.x/minter-libs/DALib.sol +26 -0
- package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +216 -0
- package/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol +171 -0
- package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +488 -0
- package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +384 -0
- package/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol +240 -0
- package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +995 -0
- package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +166 -0
- package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +770 -0
- package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +741 -0
- package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +291 -0
- package/contracts/minter-suite/MinterFilter/MinterFilterV0.sol +3 -3
- package/contracts/minter-suite/MinterFilter/MinterFilterV1.sol +5 -5
- package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +414 -297
- package/contracts/minter-suite/Minters/MinterBase_v0_1_1.sol +4 -4
- package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +866 -0
- package/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol +4 -57
- package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +886 -0
- package/contracts/minter-suite/Minters/MinterDAExpV4.sol +3 -3
- package/contracts/minter-suite/Minters/MinterDAExpV5.sol +545 -0
- package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +857 -0
- package/contracts/minter-suite/Minters/MinterDALinV4.sol +3 -3
- package/contracts/minter-suite/Minters/MinterDALinV5.sol +534 -0
- package/contracts/minter-suite/Minters/MinterHolderV4.sol +4 -4
- package/contracts/minter-suite/Minters/MinterMerkleV5.sol +4 -4
- package/contracts/minter-suite/Minters/MinterPolyptychV0.sol +6 -6
- package/contracts/minter-suite/Minters/MinterSEAV0.sol +3 -3
- package/contracts/minter-suite/Minters/MinterSEAV1.sol +853 -0
- package/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol +5 -5
- package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +545 -0
- package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +730 -0
- package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +714 -0
- package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +1012 -0
- package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +868 -0
- package/contracts/minter-suite/Minters/MinterSetPriceV4.sol +3 -3
- package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +414 -0
- package/contracts/mock/BytecodeV0TextCR_DMock.sol +1 -1
- package/contracts/mock/BytecodeV1LibCallsMock.sol +1 -1
- package/contracts/mock/BytecodeV1TextCR_DMock.sol +1 -1
- package/contracts/mock/DeadReceiverBidderMock.sol +15 -0
- package/contracts/mock/DummySharedMinter.sol +2 -2
- package/contracts/mock/ERC20Mock.sol +16 -0
- package/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol +11 -18
- package/contracts/mock/MockAdminACLV0.sol +1 -1
- package/contracts/mock/MockAdminACLV0_PROHIBITION.sol +1 -1
- package/contracts/mock/OriginRegisterMock.sol +1 -1
- package/contracts/mock/ReentrancyHolderMock.sol +1 -1
- package/contracts/mock/ReentrancyHolderMockShared.sol +59 -0
- package/contracts/mock/ReentrancyMerkleMock.sol +1 -1
- package/contracts/mock/ReentrancyMerkleMockShared.sol +58 -0
- package/contracts/mock/ReentrancyMock.sol +1 -1
- package/contracts/mock/ReentrancyMockShared.sol +48 -0
- package/contracts/mock/ReentrancySEAMock.sol +1 -1
- package/contracts/mock/ReentrancySEAMockShared.sol +40 -0
- package/contracts/mock/SSTORE2Mock.sol +1 -1
- package/contracts/randomizer/deprecated/BasicRandomizer.sol +1 -1
- package/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol +2 -2
- package/contracts/randomizer/deprecated/RandomizerV2.sol +2 -2
- package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +1 -1
- package/contracts/randomizer/shared/SharedRandomizerV0.sol +134 -111
- package/contracts/royalty-registry/GenArt721RoyaltyOverride.sol +2 -2
- package/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol +2 -2
- package/package.json +57 -36
- package/LICENSE +0 -165
- package/contracts/interfaces/0.8.x/IRandomizer_V3CoreBase.sol +0 -10
- package/contracts/interfaces/0.8.x/ISharedRandomizerV0.sol +0 -105
- /package/contracts/interfaces/{0.5.x → v0.5.x}/IBonusContract.sol +0 -0
- /package/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreContractV1.sol +0 -0
- /package/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreV2_PBAB.sol +0 -0
- /package/contracts/interfaces/{0.5.x → v0.5.x}/IRandomizer.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IAdminACLV0.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IArtblocksRoyaltyOverride.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IBonusContract.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IBytecodeStorageReader.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IDelegationRegistry.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryCompatibleV0.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IEngineRegistryV0.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV0.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV1.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlement_Mixin.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV0.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV1.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV0.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV1.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV0.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV1.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV2.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV0.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV1.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV2.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterSEAV0.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV0.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV1.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV2.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractExposesHashSeed.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV1.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Base.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine_Flex.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreV2_PBAB.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IManifold.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterBaseV0.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV0.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPICoreV0.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPIMinterV0.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IPseudorandomAtomic.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizer.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerPolyptychV0.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerV2.sol +0 -0
- /package/contracts/interfaces/{0.8.x → v0.8.x}/IWETH.sol +0 -0
- /package/contracts/libs/{0.5.x → v0.5.x}/CustomERC721Metadata.sol +0 -0
- /package/contracts/libs/{0.5.x → v0.5.x}/IERC20.sol +0 -0
- /package/contracts/libs/{0.5.x → v0.5.x}/SafeMath.sol +0 -0
- /package/contracts/libs/{0.5.x → v0.5.x}/Strings.sol +0 -0
- /package/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV0.sol +0 -0
- /package/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV1.sol +0 -0
- /package/contracts/libs/{0.8.x → v0.8.x}/ERC721_PackedHashSeed.sol +0 -0
- /package/contracts/libs/{0.8.x → v0.8.x}/SSTORE2.sol +0 -0
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
// Created By: Art Blocks Inc.
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
import {GenericMinterEventsLib} from "./GenericMinterEventsLib.sol";
|
|
7
|
+
|
|
8
|
+
import {MerkleProof} from "@openzeppelin-4.7/contracts/utils/cryptography/MerkleProof.sol";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @title Art Blocks Merkle Library
|
|
12
|
+
* @notice This library is designed to manage and verify merkle based gating for Art Blocks projects.
|
|
13
|
+
* It provides functionalities such as updating the merkle root of project, verifying an address against a proof,
|
|
14
|
+
* and setting the maximum number of invocations per address for a project.
|
|
15
|
+
* @author Art Blocks Inc.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
library MerkleLib {
|
|
19
|
+
using MerkleProof for bytes32[];
|
|
20
|
+
|
|
21
|
+
/// Events specific to this library ///
|
|
22
|
+
/**
|
|
23
|
+
* @notice Notifies of the contract's default maximum mints allowed per
|
|
24
|
+
* user for a given project, on this minter. This value can be overridden
|
|
25
|
+
* by the artist of any project at any time.
|
|
26
|
+
* @param defaultMaxInvocationsPerAddress The default maximum mints allowed
|
|
27
|
+
*/
|
|
28
|
+
event DefaultMaxInvocationsPerAddress(
|
|
29
|
+
uint256 defaultMaxInvocationsPerAddress
|
|
30
|
+
);
|
|
31
|
+
/**
|
|
32
|
+
* @notice Notifies of the contracts' current delegation registry address.
|
|
33
|
+
* @param delegationRegistry The address of the delegation registry
|
|
34
|
+
*/
|
|
35
|
+
event DelegationRegistryUpdated(address delegationRegistry);
|
|
36
|
+
|
|
37
|
+
// position of Merkle Lib storage, using a diamond storage pattern for this
|
|
38
|
+
// library
|
|
39
|
+
bytes32 constant MERKLE_LIB_STORAGE_POSITION =
|
|
40
|
+
keccak256("merklelib.storage");
|
|
41
|
+
|
|
42
|
+
/// @notice Default maximum invocations per address
|
|
43
|
+
uint256 internal constant DEFAULT_MAX_INVOCATIONS_PER_ADDRESS = 1;
|
|
44
|
+
bytes32 internal constant CONFIG_MERKLE_ROOT = "merkleRoot";
|
|
45
|
+
bytes32 internal constant CONFIG_USE_MAX_INVOCATIONS_PER_ADDRESS_OVERRIDE =
|
|
46
|
+
"useMaxMintsPerAddrOverride"; // shortened to fit in 32 bytes
|
|
47
|
+
bytes32 internal constant CONFIG_MAX_INVOCATIONS_OVERRIDE =
|
|
48
|
+
"maxMintsPerAddrOverride"; // shortened to match format of previous key
|
|
49
|
+
|
|
50
|
+
struct MerkleProjectConfig {
|
|
51
|
+
// If true, the maxInvocationsPerAddressOverride will be used.
|
|
52
|
+
// If false, the default max invocations per address will be used.
|
|
53
|
+
bool useMaxInvocationsPerAddressOverride;
|
|
54
|
+
// Maximum invocations allowed per address.
|
|
55
|
+
// This will be used if useMaxInvocationsPerAddressOverride is true.
|
|
56
|
+
// A value of 0 means no limit.
|
|
57
|
+
// @dev Safe to use uint24 because maxInvocationsPerAddressOverride <= 1_000_000
|
|
58
|
+
// and 1_000_000 << max uint24
|
|
59
|
+
uint24 maxInvocationsPerAddressOverride;
|
|
60
|
+
// The root of the Merkle tree for this project.
|
|
61
|
+
bytes32 merkleRoot;
|
|
62
|
+
// The number of current invocations for this project from a given user address.
|
|
63
|
+
mapping(address user => uint256 mintInvocations) userMintInvocations;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Diamond storage pattern is used in this library
|
|
67
|
+
struct MerkleLibStorage {
|
|
68
|
+
mapping(address coreContract => mapping(uint256 projectId => MerkleProjectConfig)) merkleProjectConfigs;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @notice Sets the maximum number of invocations per address for a project.
|
|
73
|
+
* @param projectId The ID of the project to set the maximum invocations for.
|
|
74
|
+
* @param coreContract The address of the core contract.
|
|
75
|
+
* @param maxInvocationsPerAddress The maximum number of invocations per address.
|
|
76
|
+
*/
|
|
77
|
+
function setProjectInvocationsPerAddress(
|
|
78
|
+
uint256 projectId,
|
|
79
|
+
address coreContract,
|
|
80
|
+
uint24 maxInvocationsPerAddress
|
|
81
|
+
) internal {
|
|
82
|
+
MerkleProjectConfig
|
|
83
|
+
storage merkleProjectConfig = getMerkleProjectConfig({
|
|
84
|
+
projectId: projectId,
|
|
85
|
+
coreContract: coreContract
|
|
86
|
+
});
|
|
87
|
+
merkleProjectConfig.useMaxInvocationsPerAddressOverride = true;
|
|
88
|
+
merkleProjectConfig
|
|
89
|
+
.maxInvocationsPerAddressOverride = maxInvocationsPerAddress;
|
|
90
|
+
emit GenericMinterEventsLib.ConfigValueSet({
|
|
91
|
+
projectId: projectId,
|
|
92
|
+
coreContract: coreContract,
|
|
93
|
+
key: CONFIG_USE_MAX_INVOCATIONS_PER_ADDRESS_OVERRIDE,
|
|
94
|
+
value: true
|
|
95
|
+
});
|
|
96
|
+
emit GenericMinterEventsLib.ConfigValueSet({
|
|
97
|
+
projectId: projectId,
|
|
98
|
+
coreContract: coreContract,
|
|
99
|
+
key: CONFIG_MAX_INVOCATIONS_OVERRIDE,
|
|
100
|
+
value: uint256(maxInvocationsPerAddress)
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @notice Updates the Merkle root of a project.
|
|
106
|
+
* @param projectId The ID of the project to update.
|
|
107
|
+
* @param coreContract The address of the core contract.
|
|
108
|
+
* @param root The new Merkle root.
|
|
109
|
+
*/
|
|
110
|
+
function updateMerkleRoot(
|
|
111
|
+
uint256 projectId,
|
|
112
|
+
address coreContract,
|
|
113
|
+
bytes32 root
|
|
114
|
+
) internal {
|
|
115
|
+
require(root != bytes32(0), "Root must be provided");
|
|
116
|
+
MerkleProjectConfig
|
|
117
|
+
storage merkleProjectConfig = getMerkleProjectConfig({
|
|
118
|
+
projectId: projectId,
|
|
119
|
+
coreContract: coreContract
|
|
120
|
+
});
|
|
121
|
+
merkleProjectConfig.merkleRoot = root;
|
|
122
|
+
emit GenericMinterEventsLib.ConfigValueSet({
|
|
123
|
+
projectId: projectId,
|
|
124
|
+
coreContract: coreContract,
|
|
125
|
+
key: CONFIG_MERKLE_ROOT,
|
|
126
|
+
value: root
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* @notice Checks that a given proof is valid for the vault address, and
|
|
132
|
+
* also checks that the vault address has not exceeded the maximum number
|
|
133
|
+
* of invocations per address for the project.
|
|
134
|
+
* Reverts if the proof is invalid or if the vault address has exceeded the
|
|
135
|
+
* maximum number of invocations per address for the project.
|
|
136
|
+
* @param projectId project id to check
|
|
137
|
+
* @param coreContract core contract address to check
|
|
138
|
+
* @param proof Merkle proof to check
|
|
139
|
+
* @param vault address to check proof against
|
|
140
|
+
*/
|
|
141
|
+
function preMintChecks(
|
|
142
|
+
uint256 projectId,
|
|
143
|
+
address coreContract,
|
|
144
|
+
bytes32[] calldata proof,
|
|
145
|
+
address vault
|
|
146
|
+
) internal view {
|
|
147
|
+
MerkleProjectConfig
|
|
148
|
+
storage merkleProjectConfig = getMerkleProjectConfig({
|
|
149
|
+
projectId: projectId,
|
|
150
|
+
coreContract: coreContract
|
|
151
|
+
});
|
|
152
|
+
// require valid Merkle proof
|
|
153
|
+
require(
|
|
154
|
+
_verifyAddress({
|
|
155
|
+
proofRoot: merkleProjectConfig.merkleRoot,
|
|
156
|
+
proof: proof,
|
|
157
|
+
address_: vault
|
|
158
|
+
}),
|
|
159
|
+
"Invalid Merkle proof"
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
// limit mints per address by project
|
|
163
|
+
uint256 maxProjectInvocationsPerAddress = projectMaxInvocationsPerAddress(
|
|
164
|
+
merkleProjectConfig
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
// note that mint limits index off of the `vault` (when applicable)
|
|
168
|
+
require(
|
|
169
|
+
merkleProjectConfig.userMintInvocations[vault] <
|
|
170
|
+
maxProjectInvocationsPerAddress ||
|
|
171
|
+
maxProjectInvocationsPerAddress == 0,
|
|
172
|
+
"Max invocations reached"
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* @notice Updates the number of invocations for the `vault` address on the
|
|
178
|
+
* given project.
|
|
179
|
+
* @param projectId Project Id to mint on
|
|
180
|
+
* @param coreContract Core contract address to mint on
|
|
181
|
+
* @param vault Address being used to mint (the allowlisted address)
|
|
182
|
+
*/
|
|
183
|
+
function mintEffects(
|
|
184
|
+
uint256 projectId,
|
|
185
|
+
address coreContract,
|
|
186
|
+
address vault
|
|
187
|
+
) internal {
|
|
188
|
+
MerkleProjectConfig
|
|
189
|
+
storage merkleProjectConfig = getMerkleProjectConfig({
|
|
190
|
+
projectId: projectId,
|
|
191
|
+
coreContract: coreContract
|
|
192
|
+
});
|
|
193
|
+
// increment mint invocations for vault address
|
|
194
|
+
unchecked {
|
|
195
|
+
// this will never overflow since user's invocations on a project
|
|
196
|
+
// are limited by the project's max invocations
|
|
197
|
+
merkleProjectConfig.userMintInvocations[vault]++;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* @notice Hashes an address.
|
|
203
|
+
* @param address_ The address to hash.
|
|
204
|
+
* @return The hash of the address.
|
|
205
|
+
*/
|
|
206
|
+
function hashAddress(address address_) internal pure returns (bytes32) {
|
|
207
|
+
return keccak256(abi.encodePacked(address_));
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* @notice Processes a proof for an address.
|
|
212
|
+
* @param proof The proof to process.
|
|
213
|
+
* @param address_ The address to process the proof for.
|
|
214
|
+
* @return The resulting hash from processing the proof.
|
|
215
|
+
*/
|
|
216
|
+
function processProofForAddress(
|
|
217
|
+
bytes32[] calldata proof,
|
|
218
|
+
address address_
|
|
219
|
+
) internal pure returns (bytes32) {
|
|
220
|
+
return proof.processProofCalldata(hashAddress(address_));
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* @notice Returns the maximum number of invocations per address for a project.
|
|
225
|
+
* @param projectConfig The merkle project config to check.
|
|
226
|
+
* @return The maximum number of invocations per address.
|
|
227
|
+
*/
|
|
228
|
+
function projectMaxInvocationsPerAddress(
|
|
229
|
+
MerkleProjectConfig storage projectConfig
|
|
230
|
+
) internal view returns (uint256) {
|
|
231
|
+
if (projectConfig.useMaxInvocationsPerAddressOverride) {
|
|
232
|
+
return uint256(projectConfig.maxInvocationsPerAddressOverride);
|
|
233
|
+
} else {
|
|
234
|
+
return DEFAULT_MAX_INVOCATIONS_PER_ADDRESS;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* @notice Returns the maximum number of invocations per address for a project.
|
|
240
|
+
* @param projectId Project Id to get config for
|
|
241
|
+
* @param coreContract Core contract address to get config for
|
|
242
|
+
* @return The maximum number of invocations per address.
|
|
243
|
+
*/
|
|
244
|
+
function projectMaxInvocationsPerAddress(
|
|
245
|
+
uint256 projectId,
|
|
246
|
+
address coreContract
|
|
247
|
+
) internal view returns (uint256) {
|
|
248
|
+
MerkleProjectConfig storage projectConfig = getMerkleProjectConfig({
|
|
249
|
+
projectId: projectId,
|
|
250
|
+
coreContract: coreContract
|
|
251
|
+
});
|
|
252
|
+
return projectMaxInvocationsPerAddress(projectConfig);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* @notice Returns the number of invocations for a given address on a given
|
|
257
|
+
* project.
|
|
258
|
+
* @param projectId Project Id to query
|
|
259
|
+
* @param coreContract Core contract address to query
|
|
260
|
+
* @param purchaser Address to query
|
|
261
|
+
*/
|
|
262
|
+
function projectUserMintInvocations(
|
|
263
|
+
uint256 projectId,
|
|
264
|
+
address coreContract,
|
|
265
|
+
address purchaser
|
|
266
|
+
) internal view returns (uint256) {
|
|
267
|
+
MerkleProjectConfig storage projectConfig = getMerkleProjectConfig({
|
|
268
|
+
projectId: projectId,
|
|
269
|
+
coreContract: coreContract
|
|
270
|
+
});
|
|
271
|
+
return projectConfig.userMintInvocations[purchaser];
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* @notice Returns remaining invocations for a given address.
|
|
276
|
+
* If `projectLimitsMintInvocationsPerAddress` is false, individual
|
|
277
|
+
* addresses are only limited by the project's maximum invocations, and a
|
|
278
|
+
* dummy value of zero is returned for `mintInvocationsRemaining`.
|
|
279
|
+
* If `projectLimitsMintInvocationsPerAddress` is true, the quantity of
|
|
280
|
+
* remaining mint invocations for address `address` is returned as
|
|
281
|
+
* `mintInvocationsRemaining`.
|
|
282
|
+
* Note that mint invocations per address can be changed at any time by the
|
|
283
|
+
* artist of a project.
|
|
284
|
+
* Also note that all mint invocations are limited by a project's maximum
|
|
285
|
+
* invocations as defined on the core contract. This function may return
|
|
286
|
+
* a value greater than the project's remaining invocations.
|
|
287
|
+
* @param projectId Project Id to get remaining invocations on
|
|
288
|
+
* @param coreContract Core contract address of project
|
|
289
|
+
* @param address_ Address to get remaining invocations for
|
|
290
|
+
* @return projectLimitsMintInvocationsPerAddress If true, the project
|
|
291
|
+
* limits mint invocations per address. If false, the project does not
|
|
292
|
+
* limit mint invocations per address.
|
|
293
|
+
* @return mintInvocationsRemaining The number of remaining mint invocations
|
|
294
|
+
* for address `address_`. If `projectLimitsMintInvocationsPerAddress` is
|
|
295
|
+
* false, this value is always dummy zero.
|
|
296
|
+
*/
|
|
297
|
+
function projectRemainingInvocationsForAddress(
|
|
298
|
+
uint256 projectId,
|
|
299
|
+
address coreContract,
|
|
300
|
+
address address_
|
|
301
|
+
)
|
|
302
|
+
internal
|
|
303
|
+
view
|
|
304
|
+
returns (
|
|
305
|
+
bool projectLimitsMintInvocationsPerAddress,
|
|
306
|
+
uint256 mintInvocationsRemaining
|
|
307
|
+
)
|
|
308
|
+
{
|
|
309
|
+
MerkleProjectConfig storage projectConfig = getMerkleProjectConfig({
|
|
310
|
+
projectId: projectId,
|
|
311
|
+
coreContract: coreContract
|
|
312
|
+
});
|
|
313
|
+
uint256 maxInvocationsPerAddress = projectMaxInvocationsPerAddress(
|
|
314
|
+
projectConfig
|
|
315
|
+
);
|
|
316
|
+
if (maxInvocationsPerAddress == 0) {
|
|
317
|
+
// project does not limit mint invocations per address, so leave
|
|
318
|
+
// `projectLimitsMintInvocationsPerAddress` at solidity initial
|
|
319
|
+
// value of false. Also leave `mintInvocationsRemaining` at
|
|
320
|
+
// solidity initial value of zero, as indicated in this function's
|
|
321
|
+
// documentation.
|
|
322
|
+
} else {
|
|
323
|
+
projectLimitsMintInvocationsPerAddress = true;
|
|
324
|
+
uint256 userMintInvocations = projectConfig.userMintInvocations[
|
|
325
|
+
address_
|
|
326
|
+
];
|
|
327
|
+
// if user has not reached max invocations per address, return
|
|
328
|
+
// remaining invocations
|
|
329
|
+
if (maxInvocationsPerAddress > userMintInvocations) {
|
|
330
|
+
unchecked {
|
|
331
|
+
// will never underflow due to the check above
|
|
332
|
+
mintInvocationsRemaining =
|
|
333
|
+
maxInvocationsPerAddress -
|
|
334
|
+
userMintInvocations;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
// else user has reached their maximum invocations, so leave
|
|
338
|
+
// `mintInvocationsRemaining` at solidity initial value of zero
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Loads the MerkleProjectConfig for a given project and core contract.
|
|
344
|
+
* @param projectId Project Id to get config for
|
|
345
|
+
* @param coreContract Core contract address to get config for
|
|
346
|
+
*/
|
|
347
|
+
function getMerkleProjectConfig(
|
|
348
|
+
uint256 projectId,
|
|
349
|
+
address coreContract
|
|
350
|
+
) internal view returns (MerkleProjectConfig storage) {
|
|
351
|
+
return s().merkleProjectConfigs[coreContract][projectId];
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* @notice Return the storage struct for reading and writing. This library
|
|
356
|
+
* uses a diamond storage pattern when managing storage.
|
|
357
|
+
* @return storageStruct The MerkleLibStorage struct.
|
|
358
|
+
*/
|
|
359
|
+
function s()
|
|
360
|
+
internal
|
|
361
|
+
pure
|
|
362
|
+
returns (MerkleLibStorage storage storageStruct)
|
|
363
|
+
{
|
|
364
|
+
bytes32 position = MERKLE_LIB_STORAGE_POSITION;
|
|
365
|
+
assembly ("memory-safe") {
|
|
366
|
+
storageStruct.slot := position
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* @notice Verifies an address against a proof.
|
|
372
|
+
* @param proofRoot The root of the proof to verify agaisnst.
|
|
373
|
+
* @param proof The proof to verify.
|
|
374
|
+
* @param address_ The address to verify.
|
|
375
|
+
* @return True if the address is verified, false otherwise.
|
|
376
|
+
*/
|
|
377
|
+
function _verifyAddress(
|
|
378
|
+
bytes32 proofRoot,
|
|
379
|
+
bytes32[] calldata proof,
|
|
380
|
+
address address_
|
|
381
|
+
) private pure returns (bool) {
|
|
382
|
+
return proof.verifyCalldata(proofRoot, hashAddress(address_));
|
|
383
|
+
}
|
|
384
|
+
}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
// Created By: Art Blocks Inc.
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
import {IGenArt721CoreContractV3_Base} from "../../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
|
|
7
|
+
import {IGenArt721CoreContractExposesHashSeed} from "../../../interfaces/v0.8.x/IGenArt721CoreContractExposesHashSeed.sol";
|
|
8
|
+
import {IGenArt721CoreContractV3WithSharedRandomizer} from "../../../interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol";
|
|
9
|
+
import {ISharedRandomizerV0} from "../../../interfaces/v0.8.x/ISharedRandomizerV0.sol";
|
|
10
|
+
|
|
11
|
+
import {GenericMinterEventsLib} from "./GenericMinterEventsLib.sol";
|
|
12
|
+
|
|
13
|
+
import {IERC20} from "@openzeppelin-4.7/contracts/token/ERC20/IERC20.sol";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @title Art Blocks Polyptych Minter Library
|
|
17
|
+
* @notice This library is designed for the Art Blocks platform. It includes
|
|
18
|
+
* structs and functions to help configure Polyptych minters.
|
|
19
|
+
* @author Art Blocks Inc.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
library PolyptychLib {
|
|
23
|
+
bytes32 constant POLYPTYCH_PANEL_ID = "polyptychPanelId";
|
|
24
|
+
|
|
25
|
+
// position of Polyptych Lib storage, using a diamond storage pattern
|
|
26
|
+
// for this library
|
|
27
|
+
bytes32 constant POLYPTYCH_LIB_STORAGE_POSITION =
|
|
28
|
+
keccak256("polyptychlib.storage");
|
|
29
|
+
|
|
30
|
+
struct PolyptychProjectConfig {
|
|
31
|
+
// @dev uint24 provides sufficient qty of panels, and could be packed
|
|
32
|
+
// in the future if other values are added to this struct.
|
|
33
|
+
uint24 polyptychPanelId;
|
|
34
|
+
// Stores whether a panel with an ID has been minted for a given token hash seed
|
|
35
|
+
mapping(uint256 panelId => mapping(bytes12 hashSeed => bool panelIsMinted)) polyptychPanelHashSeedIsMinted;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Diamond storage pattern is used in this library
|
|
39
|
+
struct PolyptychLibStorage {
|
|
40
|
+
mapping(address coreContract => mapping(uint256 projectId => PolyptychProjectConfig)) polyptychProjectConfigs;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @notice Increments the minter to the next polyptych panel of a given project
|
|
45
|
+
* @param projectId Project ID to increment panel ID for
|
|
46
|
+
* @param coreContract Core contract address that _projectId is on
|
|
47
|
+
*/
|
|
48
|
+
function incrementPolyptychProjectPanelId(
|
|
49
|
+
uint256 projectId,
|
|
50
|
+
address coreContract
|
|
51
|
+
) internal {
|
|
52
|
+
PolyptychProjectConfig
|
|
53
|
+
storage polyptychProjectConfig = getPolyptychProjectConfig({
|
|
54
|
+
projectId: projectId,
|
|
55
|
+
coreContract: coreContract
|
|
56
|
+
});
|
|
57
|
+
// increment panel ID
|
|
58
|
+
++polyptychProjectConfig.polyptychPanelId;
|
|
59
|
+
|
|
60
|
+
// index the update
|
|
61
|
+
emit GenericMinterEventsLib.ConfigValueSet({
|
|
62
|
+
projectId: projectId,
|
|
63
|
+
coreContract: coreContract,
|
|
64
|
+
key: PolyptychLib.POLYPTYCH_PANEL_ID,
|
|
65
|
+
value: polyptychProjectConfig.polyptychPanelId
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Validate the polyptych-related effects after a purchase on a polyptych
|
|
71
|
+
* minter.
|
|
72
|
+
* Verifies that the token hash seed is non-zero, and also enforces that
|
|
73
|
+
* the hash seed can only be used up to one time per panel.
|
|
74
|
+
* @param projectId Project ID to validate
|
|
75
|
+
* @param coreContract Core contract address to validate
|
|
76
|
+
* @param tokenHashSeed token hash seed
|
|
77
|
+
*/
|
|
78
|
+
function validatePolyptychEffects(
|
|
79
|
+
uint256 projectId,
|
|
80
|
+
address coreContract,
|
|
81
|
+
bytes12 tokenHashSeed
|
|
82
|
+
) internal {
|
|
83
|
+
PolyptychProjectConfig
|
|
84
|
+
storage polyptychProjectConfig = getPolyptychProjectConfig({
|
|
85
|
+
projectId: projectId,
|
|
86
|
+
coreContract: coreContract
|
|
87
|
+
});
|
|
88
|
+
// ensure non-zero hash seed
|
|
89
|
+
require(tokenHashSeed != bytes12(0), "Only non-zero hash seeds");
|
|
90
|
+
// verify that the hash seed has not been used on the current panel
|
|
91
|
+
uint256 panelId = polyptychProjectConfig.polyptychPanelId;
|
|
92
|
+
require(
|
|
93
|
+
!polyptychProjectConfig.polyptychPanelHashSeedIsMinted[panelId][
|
|
94
|
+
tokenHashSeed
|
|
95
|
+
],
|
|
96
|
+
"Panel already minted"
|
|
97
|
+
);
|
|
98
|
+
// mark hash seed as used for the current panel
|
|
99
|
+
polyptychProjectConfig.polyptychPanelHashSeedIsMinted[panelId][
|
|
100
|
+
tokenHashSeed
|
|
101
|
+
] = true;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @notice Sets the polyptych token hash seed on shared randomizer for a
|
|
106
|
+
* token ID on a core contract.
|
|
107
|
+
* @dev This function assumes the core contract is configured to use a
|
|
108
|
+
* shared randomizer that supports polyptych minting.
|
|
109
|
+
* @param coreContract Core contract address
|
|
110
|
+
* @param tokenId Token ID to set hash seed for
|
|
111
|
+
* @param hashSeed Hash seed to set
|
|
112
|
+
*/
|
|
113
|
+
function setPolyptychHashSeed(
|
|
114
|
+
address coreContract,
|
|
115
|
+
uint256 tokenId,
|
|
116
|
+
bytes12 hashSeed
|
|
117
|
+
) internal {
|
|
118
|
+
IGenArt721CoreContractV3WithSharedRandomizer(coreContract)
|
|
119
|
+
.randomizerContract()
|
|
120
|
+
.preSetHashSeed({
|
|
121
|
+
coreContract: coreContract,
|
|
122
|
+
tokenId: tokenId,
|
|
123
|
+
hashSeed: hashSeed
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Validates that token hash seed is assigned to the token ID `tokenId` on
|
|
129
|
+
* the core contract `coreContract`.
|
|
130
|
+
* Reverts if hash seed is not assigned to the token ID.
|
|
131
|
+
* @param coreContract Core contract address
|
|
132
|
+
* @param tokenId Token ID to validate
|
|
133
|
+
* @param targetHashSeed target hash seed of `tokenId` on `coreContract`
|
|
134
|
+
*/
|
|
135
|
+
function validateAssignedHashSeed(
|
|
136
|
+
address coreContract,
|
|
137
|
+
uint256 tokenId,
|
|
138
|
+
bytes12 targetHashSeed
|
|
139
|
+
) internal view {
|
|
140
|
+
bytes12 assignedHashSeed = getTokenHashSeed({
|
|
141
|
+
coreContract: coreContract,
|
|
142
|
+
tokenId: tokenId
|
|
143
|
+
});
|
|
144
|
+
require(
|
|
145
|
+
assignedHashSeed == targetHashSeed,
|
|
146
|
+
"Unexpected token hash seed"
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Gets token hash seed from core contract.
|
|
152
|
+
* Note that this function assumes the core contract conforms to
|
|
153
|
+
* `IGenArt721CoreContractExposesHashSeed`, which early versions of V3
|
|
154
|
+
* core contracts do not. If a contract does not conform to this interface,
|
|
155
|
+
* this function will revert.
|
|
156
|
+
* @param coreContract Core contract address
|
|
157
|
+
* @param tokenId Token ID to query hash seed for
|
|
158
|
+
*/
|
|
159
|
+
function getTokenHashSeed(
|
|
160
|
+
address coreContract,
|
|
161
|
+
uint256 tokenId
|
|
162
|
+
) internal view returns (bytes12) {
|
|
163
|
+
return
|
|
164
|
+
IGenArt721CoreContractExposesHashSeed(coreContract)
|
|
165
|
+
.tokenIdToHashSeed(tokenId);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Gets the current polyptych panel ID from polyptych project config.
|
|
170
|
+
* Polyptych panel ID is an incremented value that is used to track the
|
|
171
|
+
* current panel of a polyptych project.
|
|
172
|
+
* @param projectId Project ID to query
|
|
173
|
+
* @param coreContract Core contract address to query
|
|
174
|
+
*/
|
|
175
|
+
function getPolyptychPanelId(
|
|
176
|
+
uint256 projectId,
|
|
177
|
+
address coreContract
|
|
178
|
+
) internal view returns (uint256) {
|
|
179
|
+
PolyptychProjectConfig
|
|
180
|
+
storage polyptychProjectConfig = getPolyptychProjectConfig({
|
|
181
|
+
projectId: projectId,
|
|
182
|
+
coreContract: coreContract
|
|
183
|
+
});
|
|
184
|
+
return polyptychProjectConfig.polyptychPanelId;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Gets if a polyptych panel has already been minted for a given panel ID
|
|
189
|
+
* and hash seed.
|
|
190
|
+
* @param projectId Project ID to query
|
|
191
|
+
* @param coreContract Core contract address to query
|
|
192
|
+
* @param panelId Polyptych panel ID to query
|
|
193
|
+
* @param hashSeed Hash seed of panel to query
|
|
194
|
+
*/
|
|
195
|
+
function getPolyptychPanelHashSeedIsMinted(
|
|
196
|
+
uint256 projectId,
|
|
197
|
+
address coreContract,
|
|
198
|
+
uint256 panelId,
|
|
199
|
+
bytes12 hashSeed
|
|
200
|
+
) internal view returns (bool) {
|
|
201
|
+
PolyptychProjectConfig
|
|
202
|
+
storage polyptychProjectConfig = getPolyptychProjectConfig({
|
|
203
|
+
projectId: projectId,
|
|
204
|
+
coreContract: coreContract
|
|
205
|
+
});
|
|
206
|
+
return
|
|
207
|
+
polyptychProjectConfig.polyptychPanelHashSeedIsMinted[panelId][
|
|
208
|
+
hashSeed
|
|
209
|
+
];
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Loads the PolyptychProjectConfig for a given project and core
|
|
214
|
+
* contract.
|
|
215
|
+
* @param projectId Project Id to get config for
|
|
216
|
+
* @param coreContract Core contract address to get config for
|
|
217
|
+
*/
|
|
218
|
+
function getPolyptychProjectConfig(
|
|
219
|
+
uint256 projectId,
|
|
220
|
+
address coreContract
|
|
221
|
+
) internal view returns (PolyptychProjectConfig storage) {
|
|
222
|
+
return s().polyptychProjectConfigs[coreContract][projectId];
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* @notice Return the storage struct for reading and writing. This library
|
|
227
|
+
* uses a diamond storage pattern when managing storage.
|
|
228
|
+
* @return storageStruct The PolyptychLibStorage struct.
|
|
229
|
+
*/
|
|
230
|
+
function s()
|
|
231
|
+
internal
|
|
232
|
+
pure
|
|
233
|
+
returns (PolyptychLibStorage storage storageStruct)
|
|
234
|
+
{
|
|
235
|
+
bytes32 position = POLYPTYCH_LIB_STORAGE_POSITION;
|
|
236
|
+
assembly ("memory-safe") {
|
|
237
|
+
storageStruct.slot := position
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|