@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,488 @@
|
|
|
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
|
+
|
|
8
|
+
import {ABHelpers} from "../ABHelpers.sol";
|
|
9
|
+
|
|
10
|
+
import {Math} from "@openzeppelin-4.7/contracts/utils/math/Math.sol";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @title Art Blocks Max Invocations Library
|
|
14
|
+
* @notice This library manages the maximum invocation limits for Art Blocks
|
|
15
|
+
* projects. It provides functionality for synchronizing, manually limiting, and
|
|
16
|
+
* updating these limits, ensuring the integrity in relation to the core Art
|
|
17
|
+
* Blocks contract, and managing updates upon token minting.
|
|
18
|
+
* @dev Functions include `syncProjectMaxInvocationsToCore`,
|
|
19
|
+
* `manuallyLimitProjectMaxInvocations`, and `purchaseEffectsInvocations`.
|
|
20
|
+
* @author Art Blocks Inc.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
library MaxInvocationsLib {
|
|
24
|
+
/**
|
|
25
|
+
* @notice Local max invocations for project `projectId`, tied to core contract `coreContractAddress`,
|
|
26
|
+
* updated to `maxInvocations`.
|
|
27
|
+
* @param projectId The id of the project.
|
|
28
|
+
* @param coreContract The address of the core contract.
|
|
29
|
+
* @param maxInvocations The new max invocations limit.
|
|
30
|
+
*/
|
|
31
|
+
event ProjectMaxInvocationsLimitUpdated(
|
|
32
|
+
uint256 indexed projectId,
|
|
33
|
+
address indexed coreContract,
|
|
34
|
+
uint256 maxInvocations
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
// position of Max Invocations Lib storage, using a diamond storage pattern
|
|
38
|
+
// for this library
|
|
39
|
+
bytes32 constant MAX_INVOCATIONS_LIB_STORAGE_POSITION =
|
|
40
|
+
keccak256("maxinvocationslib.storage");
|
|
41
|
+
|
|
42
|
+
uint256 internal constant ONE_MILLION = 1_000_000;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @notice Data structure that holds max invocations project configuration.
|
|
46
|
+
*/
|
|
47
|
+
struct MaxInvocationsProjectConfig {
|
|
48
|
+
bool maxHasBeenInvoked;
|
|
49
|
+
uint24 maxInvocations;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Diamond storage pattern is used in this library
|
|
53
|
+
struct MaxInvocationsLibStorage {
|
|
54
|
+
mapping(address coreContract => mapping(uint256 projectId => MaxInvocationsProjectConfig)) maxInvocationsProjectConfigs;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @notice Syncs project's max invocations to core contract value.
|
|
59
|
+
* @param projectId The id of the project.
|
|
60
|
+
* @param coreContract The address of the core contract.
|
|
61
|
+
*/
|
|
62
|
+
function syncProjectMaxInvocationsToCore(
|
|
63
|
+
uint256 projectId,
|
|
64
|
+
address coreContract
|
|
65
|
+
) internal {
|
|
66
|
+
(
|
|
67
|
+
uint256 coreInvocations,
|
|
68
|
+
uint256 coreMaxInvocations
|
|
69
|
+
) = coreContractInvocationData({
|
|
70
|
+
projectId: projectId,
|
|
71
|
+
coreContract: coreContract
|
|
72
|
+
});
|
|
73
|
+
// update storage with results
|
|
74
|
+
MaxInvocationsProjectConfig
|
|
75
|
+
storage maxInvocationsProjectConfig = getMaxInvocationsProjectConfig({
|
|
76
|
+
projectId: projectId,
|
|
77
|
+
coreContract: coreContract
|
|
78
|
+
});
|
|
79
|
+
maxInvocationsProjectConfig.maxInvocations = uint24(coreMaxInvocations);
|
|
80
|
+
|
|
81
|
+
// We need to ensure maxHasBeenInvoked is correctly set after manually syncing the
|
|
82
|
+
// local maxInvocations value with the core contract's maxInvocations value.
|
|
83
|
+
// This synced value of maxInvocations from the core contract will always be greater
|
|
84
|
+
// than or equal to the previous value of maxInvocations stored locally.
|
|
85
|
+
maxInvocationsProjectConfig.maxHasBeenInvoked =
|
|
86
|
+
coreInvocations == coreMaxInvocations;
|
|
87
|
+
|
|
88
|
+
emit ProjectMaxInvocationsLimitUpdated({
|
|
89
|
+
projectId: projectId,
|
|
90
|
+
coreContract: coreContract,
|
|
91
|
+
maxInvocations: coreMaxInvocations
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* @notice Manually limits project's max invocations.
|
|
97
|
+
* @param projectId The id of the project.
|
|
98
|
+
* @param coreContract The address of the core contract.
|
|
99
|
+
* @param maxInvocations The new max invocations limit.
|
|
100
|
+
*/
|
|
101
|
+
function manuallyLimitProjectMaxInvocations(
|
|
102
|
+
uint256 projectId,
|
|
103
|
+
address coreContract,
|
|
104
|
+
uint24 maxInvocations
|
|
105
|
+
) internal {
|
|
106
|
+
// CHECKS
|
|
107
|
+
(
|
|
108
|
+
uint256 coreInvocations,
|
|
109
|
+
uint256 coreMaxInvocations
|
|
110
|
+
) = coreContractInvocationData({
|
|
111
|
+
projectId: projectId,
|
|
112
|
+
coreContract: coreContract
|
|
113
|
+
});
|
|
114
|
+
require(
|
|
115
|
+
maxInvocations <= coreMaxInvocations,
|
|
116
|
+
"Invalid max invocations"
|
|
117
|
+
);
|
|
118
|
+
require(maxInvocations >= coreInvocations, "Invalid max invocations");
|
|
119
|
+
|
|
120
|
+
// EFFECTS
|
|
121
|
+
MaxInvocationsProjectConfig
|
|
122
|
+
storage maxInvocationsProjectConfig = getMaxInvocationsProjectConfig({
|
|
123
|
+
projectId: projectId,
|
|
124
|
+
coreContract: coreContract
|
|
125
|
+
});
|
|
126
|
+
// update storage with results
|
|
127
|
+
maxInvocationsProjectConfig.maxInvocations = uint24(maxInvocations);
|
|
128
|
+
// We need to ensure maxHasBeenInvoked is correctly set after manually setting the
|
|
129
|
+
// local maxInvocations value.
|
|
130
|
+
maxInvocationsProjectConfig.maxHasBeenInvoked =
|
|
131
|
+
coreInvocations == maxInvocations;
|
|
132
|
+
|
|
133
|
+
emit ProjectMaxInvocationsLimitUpdated({
|
|
134
|
+
projectId: projectId,
|
|
135
|
+
coreContract: coreContract,
|
|
136
|
+
maxInvocations: maxInvocations
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* @notice Validate effects on invocations after purchase. This ensures
|
|
142
|
+
* that the token invocation is less than or equal to the local max
|
|
143
|
+
* invocations, and also updates the local maxHasBeenInvoked value.
|
|
144
|
+
* @dev This function checks that the token invocation is less than or
|
|
145
|
+
* equal to the local max invocations, and also updates the local
|
|
146
|
+
* maxHasBeenInvoked value.
|
|
147
|
+
* @param tokenId The id of the token.
|
|
148
|
+
* @param coreContract The address of the core contract.
|
|
149
|
+
*/
|
|
150
|
+
function validatePurchaseEffectsInvocations(
|
|
151
|
+
uint256 tokenId,
|
|
152
|
+
address coreContract
|
|
153
|
+
) internal {
|
|
154
|
+
uint256 projectId = ABHelpers.tokenIdToProjectId(tokenId);
|
|
155
|
+
MaxInvocationsProjectConfig
|
|
156
|
+
storage maxInvocationsProjectConfig = getMaxInvocationsProjectConfig({
|
|
157
|
+
projectId: projectId,
|
|
158
|
+
coreContract: coreContract
|
|
159
|
+
});
|
|
160
|
+
// invocation is token number plus one, and will never overflow due to
|
|
161
|
+
// limit of 1e6 invocations per project. block scope for gas efficiency
|
|
162
|
+
// (i.e. avoid an unnecessary var initialization to 0).
|
|
163
|
+
unchecked {
|
|
164
|
+
uint256 tokenInvocation = (tokenId % ONE_MILLION) + 1;
|
|
165
|
+
uint256 localMaxInvocations = maxInvocationsProjectConfig
|
|
166
|
+
.maxInvocations;
|
|
167
|
+
// handle the case where the token invocation == minter local max
|
|
168
|
+
// invocations occurred on a different minter, and we have a stale
|
|
169
|
+
// local maxHasBeenInvoked value returning a false negative.
|
|
170
|
+
// @dev this is a CHECK after EFFECTS, so security was considered
|
|
171
|
+
// in detail here.
|
|
172
|
+
require(
|
|
173
|
+
tokenInvocation <= localMaxInvocations,
|
|
174
|
+
"Max invocations reached"
|
|
175
|
+
);
|
|
176
|
+
// in typical case, update the local maxHasBeenInvoked value
|
|
177
|
+
// to true if the token invocation == minter local max invocations
|
|
178
|
+
// (enables gas efficient reverts after sellout)
|
|
179
|
+
if (tokenInvocation == localMaxInvocations) {
|
|
180
|
+
maxInvocationsProjectConfig.maxHasBeenInvoked = true;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Checks that the max invocations have not been reached for a given
|
|
187
|
+
* project. This only checks the minter's local max invocations, and does
|
|
188
|
+
* not consider the core contract's max invocations.
|
|
189
|
+
* The function reverts if the max invocations have been reached.
|
|
190
|
+
* @param projectId The id of the project.
|
|
191
|
+
* @param coreContract The address of the core contract.
|
|
192
|
+
*/
|
|
193
|
+
function preMintChecks(
|
|
194
|
+
uint256 projectId,
|
|
195
|
+
address coreContract
|
|
196
|
+
) internal view {
|
|
197
|
+
// check that max invocations have not been reached
|
|
198
|
+
MaxInvocationsProjectConfig
|
|
199
|
+
storage maxInvocationsProjectConfig = getMaxInvocationsProjectConfig({
|
|
200
|
+
projectId: projectId,
|
|
201
|
+
coreContract: coreContract
|
|
202
|
+
});
|
|
203
|
+
require(
|
|
204
|
+
!maxInvocationsProjectConfig.maxHasBeenInvoked,
|
|
205
|
+
"Max invocations reached"
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* @notice Helper function to check if max invocations has not been initialized.
|
|
211
|
+
* Returns true if not initialized, false if initialized.
|
|
212
|
+
* @param projectId The id of the project.
|
|
213
|
+
* @param coreContract The address of the core contract.
|
|
214
|
+
* @return bool
|
|
215
|
+
* @dev We know a project's max invocations have never been initialized if
|
|
216
|
+
* both max invocations and maxHasBeenInvoked are still initial values.
|
|
217
|
+
* This is because if maxInvocations were ever set to zero,
|
|
218
|
+
* maxHasBeenInvoked would be set to true.
|
|
219
|
+
*/
|
|
220
|
+
function maxInvocationsIsUnconfigured(
|
|
221
|
+
uint256 projectId,
|
|
222
|
+
address coreContract
|
|
223
|
+
) internal view returns (bool) {
|
|
224
|
+
MaxInvocationsProjectConfig
|
|
225
|
+
storage maxInvocationsProjectConfig = getMaxInvocationsProjectConfig({
|
|
226
|
+
projectId: projectId,
|
|
227
|
+
coreContract: coreContract
|
|
228
|
+
});
|
|
229
|
+
return
|
|
230
|
+
maxInvocationsProjectConfig.maxInvocations == 0 &&
|
|
231
|
+
!maxInvocationsProjectConfig.maxHasBeenInvoked;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* @notice Function returns if invocations remain available for a given project.
|
|
236
|
+
* This function calls the core contract to get the most up-to-date
|
|
237
|
+
* invocation data (which may be useful to avoid reverts during mint).
|
|
238
|
+
* This function considers core contract max invocations, and minter local
|
|
239
|
+
* max invocations, and returns a response based on the most limiting
|
|
240
|
+
* max invocations value.
|
|
241
|
+
* @param projectId The id of the project.
|
|
242
|
+
* @param coreContract The address of the core contract.
|
|
243
|
+
*/
|
|
244
|
+
function invocationsRemain(
|
|
245
|
+
uint256 projectId,
|
|
246
|
+
address coreContract
|
|
247
|
+
) internal view returns (bool) {
|
|
248
|
+
// get up-to-data invocation data from core contract
|
|
249
|
+
(
|
|
250
|
+
uint256 coreInvocations,
|
|
251
|
+
uint256 coreMaxInvocations
|
|
252
|
+
) = coreContractInvocationData({
|
|
253
|
+
projectId: projectId,
|
|
254
|
+
coreContract: coreContract
|
|
255
|
+
});
|
|
256
|
+
// load minter-local max invocations into memory
|
|
257
|
+
MaxInvocationsProjectConfig
|
|
258
|
+
storage maxInvocationsProjectConfig = getMaxInvocationsProjectConfig({
|
|
259
|
+
projectId: projectId,
|
|
260
|
+
coreContract: coreContract
|
|
261
|
+
});
|
|
262
|
+
// invocations remain available if the core contract has not reached
|
|
263
|
+
// the most limiting max invocations, either on minter or core contract
|
|
264
|
+
uint256 limitingMaxInvocations = Math.min(
|
|
265
|
+
coreMaxInvocations,
|
|
266
|
+
maxInvocationsProjectConfig.maxInvocations // local max invocations
|
|
267
|
+
);
|
|
268
|
+
return coreInvocations < limitingMaxInvocations;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* @notice Pulls core contract invocation data for a given project.
|
|
273
|
+
* @dev This function calls the core contract to get the invocation data
|
|
274
|
+
* @param projectId The id of the project.
|
|
275
|
+
* @param coreContract The address of the core contract.
|
|
276
|
+
* @return coreInvocations The number of invocations for the project.
|
|
277
|
+
* @return coreMaxInvocations The max invocations for the project, as
|
|
278
|
+
* defined on the core contract.
|
|
279
|
+
*/
|
|
280
|
+
function coreContractInvocationData(
|
|
281
|
+
uint256 projectId,
|
|
282
|
+
address coreContract
|
|
283
|
+
)
|
|
284
|
+
internal
|
|
285
|
+
view
|
|
286
|
+
returns (uint256 coreInvocations, uint256 coreMaxInvocations)
|
|
287
|
+
{
|
|
288
|
+
(
|
|
289
|
+
coreInvocations,
|
|
290
|
+
coreMaxInvocations,
|
|
291
|
+
,
|
|
292
|
+
,
|
|
293
|
+
,
|
|
294
|
+
|
|
295
|
+
) = IGenArt721CoreContractV3_Base(coreContract).projectStateData(
|
|
296
|
+
projectId
|
|
297
|
+
);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* @notice Function returns the max invocations for a given project.
|
|
302
|
+
* @param projectId The id of the project.
|
|
303
|
+
* @param coreContract The address of the core contract.
|
|
304
|
+
* to be queried.
|
|
305
|
+
*/
|
|
306
|
+
function getMaxInvocations(
|
|
307
|
+
uint256 projectId,
|
|
308
|
+
address coreContract
|
|
309
|
+
) internal view returns (uint256) {
|
|
310
|
+
MaxInvocationsProjectConfig
|
|
311
|
+
storage maxInvocationsProjectConfig = getMaxInvocationsProjectConfig({
|
|
312
|
+
projectId: projectId,
|
|
313
|
+
coreContract: coreContract
|
|
314
|
+
});
|
|
315
|
+
return maxInvocationsProjectConfig.maxInvocations;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* @notice Function returns if max has been invoked for a given project.
|
|
320
|
+
* @param projectId The id of the project.
|
|
321
|
+
* @param coreContract The address of the core contract.
|
|
322
|
+
* to be queried.
|
|
323
|
+
*/
|
|
324
|
+
function getMaxHasBeenInvoked(
|
|
325
|
+
uint256 projectId,
|
|
326
|
+
address coreContract
|
|
327
|
+
) internal view returns (bool) {
|
|
328
|
+
MaxInvocationsProjectConfig
|
|
329
|
+
storage maxInvocationsProjectConfig = getMaxInvocationsProjectConfig({
|
|
330
|
+
projectId: projectId,
|
|
331
|
+
coreContract: coreContract
|
|
332
|
+
});
|
|
333
|
+
return maxInvocationsProjectConfig.maxHasBeenInvoked;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* @notice Function returns if a project has reached its max invocations.
|
|
338
|
+
* Function is labelled as "safe" because it checks the core contract's
|
|
339
|
+
* invocations and max invocations. If the local max invocations is greater
|
|
340
|
+
* than the core contract's max invocations, it will defer to the core
|
|
341
|
+
* contract's max invocations (since those are the limiting factor).
|
|
342
|
+
* @param projectId The id of the project.
|
|
343
|
+
* @param coreContract The address of the core contract.
|
|
344
|
+
*/
|
|
345
|
+
function projectMaxHasBeenInvokedSafe(
|
|
346
|
+
uint256 projectId,
|
|
347
|
+
address coreContract
|
|
348
|
+
) internal view returns (bool) {
|
|
349
|
+
// get max invocations from core contract
|
|
350
|
+
(
|
|
351
|
+
uint256 coreInvocations,
|
|
352
|
+
uint256 coreMaxInvocations
|
|
353
|
+
) = coreContractInvocationData({
|
|
354
|
+
projectId: projectId,
|
|
355
|
+
coreContract: coreContract
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
MaxInvocationsProjectConfig
|
|
359
|
+
storage maxInvocationsProjectConfig = getMaxInvocationsProjectConfig({
|
|
360
|
+
projectId: projectId,
|
|
361
|
+
coreContract: coreContract
|
|
362
|
+
});
|
|
363
|
+
uint256 localMaxInvocations = maxInvocationsProjectConfig
|
|
364
|
+
.maxInvocations;
|
|
365
|
+
// value is locally defined, and could be out of date.
|
|
366
|
+
// only possible illogical state is if local max invocations is
|
|
367
|
+
// greater than core contract's max invocations, in which case
|
|
368
|
+
// we should use the core contract's max invocations
|
|
369
|
+
if (localMaxInvocations > coreMaxInvocations) {
|
|
370
|
+
// local max invocations is stale and illogical, defer to core
|
|
371
|
+
// contract's max invocations since it is the limiting factor
|
|
372
|
+
return (coreMaxInvocations == coreInvocations);
|
|
373
|
+
}
|
|
374
|
+
// local max invocations is limiting, so check core invocations against
|
|
375
|
+
// local max invocations
|
|
376
|
+
return (coreInvocations >= localMaxInvocations);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* @notice Refreshes max invocations to account for core contract max
|
|
381
|
+
* invocations state, without imposing any additional restrictions on the
|
|
382
|
+
* minter's max invocations state.
|
|
383
|
+
* If minter max invocations have never been populated, this function will
|
|
384
|
+
* populate them to equal the core contract's max invocations state (which
|
|
385
|
+
* is the least restrictive state).
|
|
386
|
+
* If minter max invocations have been populated, this function will ensure
|
|
387
|
+
* the minter's max invocations are not greater than the core contract's
|
|
388
|
+
* max invocations (which would be stale and illogical), and update the
|
|
389
|
+
* minter's max invocations and maxHasBeenInvoked state to be consistent
|
|
390
|
+
* with the core contract's max invocations.
|
|
391
|
+
* If the minter max invocations have been populated and are not greater
|
|
392
|
+
* than the core contract's max invocations, this function will do nothing,
|
|
393
|
+
* since that is a valid state in which the minter has been configured to
|
|
394
|
+
* be more restrictive than the core contract.
|
|
395
|
+
* @dev assumes core contract's max invocations may only be reduced, which
|
|
396
|
+
* is the case for all V3 core contracts
|
|
397
|
+
* @param projectId The id of the project.
|
|
398
|
+
* @param coreContract The address of the core contract.
|
|
399
|
+
*/
|
|
400
|
+
function refreshMaxInvocations(
|
|
401
|
+
uint256 projectId,
|
|
402
|
+
address coreContract
|
|
403
|
+
) internal {
|
|
404
|
+
MaxInvocationsProjectConfig
|
|
405
|
+
storage maxInvocationsProjectConfig = getMaxInvocationsProjectConfig({
|
|
406
|
+
projectId: projectId,
|
|
407
|
+
coreContract: coreContract
|
|
408
|
+
});
|
|
409
|
+
if (maxInvocationsIsUnconfigured(projectId, coreContract)) {
|
|
410
|
+
// populate the minter max invocation state to equal the values on
|
|
411
|
+
// the core contract (least restrictive state)
|
|
412
|
+
syncProjectMaxInvocationsToCore({
|
|
413
|
+
projectId: projectId,
|
|
414
|
+
coreContract: coreContract
|
|
415
|
+
});
|
|
416
|
+
} else {
|
|
417
|
+
// if local max invocations were already populated, validate the local state
|
|
418
|
+
(
|
|
419
|
+
uint256 coreInvocations,
|
|
420
|
+
uint256 coreMaxInvocations
|
|
421
|
+
) = coreContractInvocationData({
|
|
422
|
+
projectId: projectId,
|
|
423
|
+
coreContract: coreContract
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
uint256 localMaxInvocations = maxInvocationsProjectConfig
|
|
427
|
+
.maxInvocations;
|
|
428
|
+
if (localMaxInvocations > coreMaxInvocations) {
|
|
429
|
+
// if local max invocations are greater than core max invocations, make
|
|
430
|
+
// them equal since that is the least restrictive logical state
|
|
431
|
+
// @dev this is only possible if the core contract's max invocations
|
|
432
|
+
// have been reduced since the minter's max invocations were last
|
|
433
|
+
// updated
|
|
434
|
+
// set local max invocations to core contract's max invocations
|
|
435
|
+
maxInvocationsProjectConfig.maxInvocations = uint24(
|
|
436
|
+
coreMaxInvocations
|
|
437
|
+
);
|
|
438
|
+
// update the minter's `maxHasBeenInvoked` state
|
|
439
|
+
maxInvocationsProjectConfig
|
|
440
|
+
.maxHasBeenInvoked = (coreMaxInvocations ==
|
|
441
|
+
coreInvocations);
|
|
442
|
+
emit ProjectMaxInvocationsLimitUpdated({
|
|
443
|
+
projectId: projectId,
|
|
444
|
+
coreContract: coreContract,
|
|
445
|
+
maxInvocations: coreMaxInvocations
|
|
446
|
+
});
|
|
447
|
+
} else if (coreInvocations >= localMaxInvocations) {
|
|
448
|
+
// core invocations are greater than this minter's max
|
|
449
|
+
// invocations, indicating that minting must have occurred on
|
|
450
|
+
// another minter. update the minter's `maxHasBeenInvoked` to
|
|
451
|
+
// true to prevent any false negatives on
|
|
452
|
+
// `getMaxHasBeenInvoked'
|
|
453
|
+
maxInvocationsProjectConfig.maxHasBeenInvoked = true;
|
|
454
|
+
// @dev do not emit event, because we did not change the value
|
|
455
|
+
// of minter-local max invocations
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/**
|
|
461
|
+
* @notice Loads the MaxInvocationsProjectConfig for a given project and core
|
|
462
|
+
* contract.
|
|
463
|
+
* @param projectId Project Id to get config for
|
|
464
|
+
* @param coreContract Core contract address to get config for
|
|
465
|
+
*/
|
|
466
|
+
function getMaxInvocationsProjectConfig(
|
|
467
|
+
uint256 projectId,
|
|
468
|
+
address coreContract
|
|
469
|
+
) internal view returns (MaxInvocationsProjectConfig storage) {
|
|
470
|
+
return s().maxInvocationsProjectConfigs[coreContract][projectId];
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* @notice Return the storage struct for reading and writing. This library
|
|
475
|
+
* uses a diamond storage pattern when managing storage.
|
|
476
|
+
* @return storageStruct The MaxInvocationsLibStorage struct.
|
|
477
|
+
*/
|
|
478
|
+
function s()
|
|
479
|
+
internal
|
|
480
|
+
pure
|
|
481
|
+
returns (MaxInvocationsLibStorage storage storageStruct)
|
|
482
|
+
{
|
|
483
|
+
bytes32 position = MAX_INVOCATIONS_LIB_STORAGE_POSITION;
|
|
484
|
+
assembly ("memory-safe") {
|
|
485
|
+
storageStruct.slot := position
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|