@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
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
2
|
// Created By: Art Blocks Inc.
|
|
3
3
|
|
|
4
|
+
// @dev fixed to specific solidity version for clarity and for more clear
|
|
5
|
+
// source code verification purposes.
|
|
4
6
|
pragma solidity 0.8.19;
|
|
5
7
|
|
|
6
|
-
import "../../interfaces/
|
|
7
|
-
import "../../interfaces/
|
|
8
|
-
import "../../interfaces/
|
|
9
|
-
import "../../interfaces/
|
|
8
|
+
import {IMinterFilterV1} from "../../interfaces/v0.8.x/IMinterFilterV1.sol";
|
|
9
|
+
import {ISharedMinterV0} from "../../interfaces/v0.8.x/ISharedMinterV0.sol";
|
|
10
|
+
import {IGenArt721CoreContractV3_Base} from "../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
|
|
11
|
+
import {ICoreRegistryV1} from "../../interfaces/v0.8.x/ICoreRegistryV1.sol";
|
|
12
|
+
import {IAdminACLV0} from "../../interfaces/v0.8.x/IAdminACLV0.sol";
|
|
10
13
|
|
|
11
|
-
import "../../libs/
|
|
14
|
+
import {Bytes32Strings} from "../../libs/v0.8.x/Bytes32Strings.sol";
|
|
12
15
|
|
|
13
|
-
import "@openzeppelin-4.7/contracts/access/Ownable.sol";
|
|
14
|
-
import "@openzeppelin-4.7/contracts/utils/structs/EnumerableMap.sol";
|
|
15
|
-
import "@openzeppelin-4.7/contracts/utils/structs/EnumerableSet.sol";
|
|
16
|
+
import {Ownable} from "@openzeppelin-4.7/contracts/access/Ownable.sol";
|
|
17
|
+
import {EnumerableMap} from "@openzeppelin-4.7/contracts/utils/structs/EnumerableMap.sol";
|
|
18
|
+
import {EnumerableSet} from "@openzeppelin-4.7/contracts/utils/structs/EnumerableSet.sol";
|
|
16
19
|
|
|
17
20
|
/**
|
|
18
21
|
* @title MinterFilterV2
|
|
@@ -36,7 +39,6 @@ import "@openzeppelin-4.7/contracts/utils/structs/EnumerableSet.sol";
|
|
|
36
39
|
* - updateCoreRegistry
|
|
37
40
|
* - approveMinterGlobally
|
|
38
41
|
* - revokeMinterGlobally
|
|
39
|
-
* - removeMintersForProjectsOnContracts
|
|
40
42
|
* ----------------------------------------------------------------------------
|
|
41
43
|
* The following functions are restricted as allowed by each core contract's
|
|
42
44
|
* Admin ACL contract:
|
|
@@ -53,26 +55,21 @@ import "@openzeppelin-4.7/contracts/utils/structs/EnumerableSet.sol";
|
|
|
53
55
|
* registries, and other contracts that may interact with this contract.
|
|
54
56
|
*/
|
|
55
57
|
contract MinterFilterV2 is Ownable, IMinterFilterV1 {
|
|
56
|
-
// add Enumerable Map methods
|
|
58
|
+
// add Enumerable Map, Enumerable Set methods
|
|
57
59
|
using EnumerableMap for EnumerableMap.UintToAddressMap;
|
|
58
60
|
using EnumerableSet for EnumerableSet.AddressSet;
|
|
59
61
|
// add Bytes32Strings methods
|
|
60
62
|
using Bytes32Strings for bytes32;
|
|
61
63
|
|
|
62
|
-
///
|
|
64
|
+
/// @notice Version of this minter filter contract
|
|
65
|
+
// @dev use function minterFilterVersion to get this as a string
|
|
63
66
|
bytes32 constant MINTER_FILTER_VERSION = "v2.0.0";
|
|
64
67
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
|
|
68
|
+
/// @notice Type of this minter filter contract
|
|
69
|
+
// @dev use function minterFilterType to get this as a string
|
|
69
70
|
bytes32 constant MINTER_FILTER_TYPE = "MinterFilterV2";
|
|
70
71
|
|
|
71
|
-
|
|
72
|
-
return MINTER_FILTER_TYPE.toString();
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/// Admin ACL contract for this minter filter
|
|
72
|
+
/// @notice Admin ACL contract for this minter filter
|
|
76
73
|
IAdminACLV0 public adminACLContract;
|
|
77
74
|
|
|
78
75
|
/**
|
|
@@ -80,48 +77,54 @@ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
|
|
|
80
77
|
*/
|
|
81
78
|
ICoreRegistryV1 public coreRegistry;
|
|
82
79
|
|
|
83
|
-
///
|
|
80
|
+
/// @notice Minter address => qty projects across all core contracts currently
|
|
84
81
|
/// using the minter
|
|
85
|
-
mapping(address => uint256)
|
|
82
|
+
mapping(address minterAddress => uint256 numProjects)
|
|
83
|
+
public numProjectsUsingMinter;
|
|
86
84
|
|
|
87
85
|
/**
|
|
88
|
-
* Enumerable Set of globally approved minters.
|
|
86
|
+
* @notice Enumerable Set of globally approved minters.
|
|
89
87
|
* This is a Set of addresses that are approved to mint on any
|
|
90
88
|
* project, for any core contract.
|
|
91
89
|
* @dev note that contract admins can extend a separate Set of minters for
|
|
92
90
|
* their core contract via the `approveMinterForContract` function.
|
|
93
91
|
*/
|
|
94
|
-
EnumerableSet.AddressSet private
|
|
92
|
+
EnumerableSet.AddressSet private _globallyApprovedMinters;
|
|
95
93
|
|
|
96
94
|
/**
|
|
97
|
-
* Mapping of core contract addresses to Enumerable Sets of approved
|
|
95
|
+
* @notice Mapping of core contract addresses to Enumerable Sets of approved
|
|
98
96
|
* minters for that core contract.
|
|
99
97
|
* @dev note that contract admins can extend this Set for their core
|
|
100
98
|
* contract by via the `approveMinterForContract` function, and can remove
|
|
101
99
|
* minters from this Set via the `revokeMinterForContract` function.
|
|
102
100
|
*/
|
|
103
|
-
mapping(address => EnumerableSet.AddressSet)
|
|
104
|
-
private
|
|
101
|
+
mapping(address coreContract => EnumerableSet.AddressSet approvedMintersForContract)
|
|
102
|
+
private _contractApprovedMinters;
|
|
105
103
|
|
|
106
104
|
/**
|
|
107
|
-
* Mapping of core contract addresses to Enumerable Maps of project IDs to
|
|
105
|
+
* @notice Mapping of core contract addresses to Enumerable Maps of project IDs to
|
|
108
106
|
* minter addresses.
|
|
109
107
|
*/
|
|
110
|
-
mapping(address => EnumerableMap.UintToAddressMap)
|
|
108
|
+
mapping(address coreContract => EnumerableMap.UintToAddressMap projectIdToMinterAddress)
|
|
109
|
+
private _minterForProject;
|
|
111
110
|
|
|
112
|
-
|
|
113
|
-
|
|
111
|
+
/**
|
|
112
|
+
* @notice Function to validate an address is non-zero.
|
|
113
|
+
* @param address_ Address to validate
|
|
114
|
+
*/
|
|
115
|
+
function _onlyNonZeroAddress(address address_) internal pure {
|
|
116
|
+
require(address_ != address(0), "Only non-zero address");
|
|
114
117
|
}
|
|
115
118
|
|
|
116
119
|
/**
|
|
117
120
|
* @notice Function to restrict access to only AdminACL allowed calls
|
|
118
121
|
* on a given core contract.
|
|
119
122
|
* @dev defers to the ACL contract used by the core contract
|
|
120
|
-
* @param
|
|
123
|
+
* @param selector function selector to be checked
|
|
121
124
|
*/
|
|
122
|
-
function _onlyAdminACL(bytes4
|
|
125
|
+
function _onlyAdminACL(bytes4 selector) internal {
|
|
123
126
|
require(
|
|
124
|
-
adminACLAllowed(msg.sender, address(this),
|
|
127
|
+
adminACLAllowed(msg.sender, address(this), selector),
|
|
125
128
|
"Only Admin ACL allowed"
|
|
126
129
|
);
|
|
127
130
|
}
|
|
@@ -130,225 +133,253 @@ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
|
|
|
130
133
|
* @notice Function to restrict access to only AdminACL allowed calls
|
|
131
134
|
* on a given core contract.
|
|
132
135
|
* @dev defers to the ACL contract used by the core contract
|
|
133
|
-
* @param
|
|
134
|
-
* @param
|
|
136
|
+
* @param coreContract core contract address
|
|
137
|
+
* @param selector function selector to be checked
|
|
135
138
|
*/
|
|
136
|
-
function _onlyCoreAdminACL(
|
|
137
|
-
address _coreContract,
|
|
138
|
-
bytes4 _selector
|
|
139
|
-
) internal {
|
|
139
|
+
function _onlyCoreAdminACL(address coreContract, bytes4 selector) internal {
|
|
140
140
|
require(
|
|
141
|
-
IGenArt721CoreContractV3_Base(
|
|
142
|
-
msg.sender,
|
|
143
|
-
address(this),
|
|
144
|
-
_selector
|
|
145
|
-
),
|
|
141
|
+
IGenArt721CoreContractV3_Base(coreContract).adminACLAllowed({
|
|
142
|
+
_sender: msg.sender,
|
|
143
|
+
_contract: address(this),
|
|
144
|
+
_selector: selector
|
|
145
|
+
}),
|
|
146
146
|
"Only Core AdminACL allowed"
|
|
147
147
|
);
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
|
|
150
|
+
/**
|
|
151
|
+
* @notice Function to restrict access to only core AdminACL or the project artist.
|
|
152
|
+
* @dev Defers to the ACL contract used by the core contract
|
|
153
|
+
* @param coreContract core contract address
|
|
154
|
+
* @param selector function selector to be checked
|
|
155
|
+
*/
|
|
151
156
|
function _onlyCoreAdminACLOrArtist(
|
|
152
|
-
uint256
|
|
153
|
-
address
|
|
154
|
-
bytes4
|
|
157
|
+
uint256 projectId,
|
|
158
|
+
address coreContract,
|
|
159
|
+
bytes4 selector
|
|
155
160
|
) internal {
|
|
156
161
|
IGenArt721CoreContractV3_Base genArtCoreContract_Base = IGenArt721CoreContractV3_Base(
|
|
157
|
-
|
|
162
|
+
coreContract
|
|
158
163
|
);
|
|
159
164
|
require(
|
|
160
165
|
(msg.sender ==
|
|
161
|
-
genArtCoreContract_Base.projectIdToArtistAddress(
|
|
166
|
+
genArtCoreContract_Base.projectIdToArtistAddress(projectId)) ||
|
|
162
167
|
(
|
|
163
|
-
genArtCoreContract_Base.adminACLAllowed(
|
|
164
|
-
msg.sender,
|
|
165
|
-
address(this),
|
|
166
|
-
_selector
|
|
167
|
-
)
|
|
168
|
+
genArtCoreContract_Base.adminACLAllowed({
|
|
169
|
+
_sender: msg.sender,
|
|
170
|
+
_contract: address(this),
|
|
171
|
+
_selector: selector
|
|
172
|
+
})
|
|
168
173
|
),
|
|
169
174
|
"Only Artist or Core Admin ACL"
|
|
170
175
|
);
|
|
171
176
|
}
|
|
172
177
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
178
|
+
/**
|
|
179
|
+
* @notice Function to restrict access to only core contracts registered with the
|
|
180
|
+
* currently configured core registry. This is used to prevent non-registered core
|
|
181
|
+
* contracts from being used with this minter filter.
|
|
182
|
+
* @param coreContract core contract address
|
|
183
|
+
*/
|
|
184
|
+
function _onlyRegisteredCoreContract(address coreContract) internal view {
|
|
177
185
|
// @dev use core registry to check if core contract is registered
|
|
178
186
|
require(
|
|
179
|
-
coreRegistry.isRegisteredContract(
|
|
187
|
+
coreRegistry.isRegisteredContract(coreContract),
|
|
180
188
|
"Only registered core contract"
|
|
181
189
|
);
|
|
182
190
|
}
|
|
183
191
|
|
|
184
|
-
|
|
192
|
+
/**
|
|
193
|
+
* @notice Function to restrict access to only valid project IDs.
|
|
194
|
+
* @param projectId Project ID to validate.
|
|
195
|
+
* @param coreContract core contract address
|
|
196
|
+
*/
|
|
185
197
|
function _onlyValidProjectId(
|
|
186
|
-
uint256
|
|
187
|
-
address
|
|
198
|
+
uint256 projectId,
|
|
199
|
+
address coreContract
|
|
188
200
|
) internal view {
|
|
189
201
|
IGenArt721CoreContractV3_Base genArtCoreContract = IGenArt721CoreContractV3_Base(
|
|
190
|
-
|
|
202
|
+
coreContract
|
|
191
203
|
);
|
|
192
204
|
require(
|
|
193
|
-
(
|
|
194
|
-
(
|
|
205
|
+
(projectId >= genArtCoreContract.startingProjectId()) &&
|
|
206
|
+
(projectId < genArtCoreContract.nextProjectId()),
|
|
195
207
|
"Only valid project ID"
|
|
196
208
|
);
|
|
197
209
|
}
|
|
198
210
|
|
|
199
|
-
|
|
211
|
+
/**
|
|
212
|
+
* @notice Function to check if minter is globally approved or approved for a core contract.
|
|
213
|
+
* @param coreContract core contract address
|
|
214
|
+
* @param minter Minter to validate.
|
|
215
|
+
*/
|
|
200
216
|
function _onlyApprovedMinter(
|
|
201
|
-
address
|
|
202
|
-
address
|
|
217
|
+
address coreContract,
|
|
218
|
+
address minter
|
|
203
219
|
) internal view {
|
|
204
220
|
require(
|
|
205
|
-
isApprovedMinterForContract(
|
|
221
|
+
isApprovedMinterForContract({
|
|
222
|
+
coreContract: coreContract,
|
|
223
|
+
minter: minter
|
|
224
|
+
}),
|
|
206
225
|
"Only approved minters"
|
|
207
226
|
);
|
|
208
227
|
}
|
|
209
228
|
|
|
210
229
|
/**
|
|
211
|
-
* @notice Initializes contract to be a Minter for `
|
|
212
|
-
* @param
|
|
230
|
+
* @notice Initializes contract to be a Minter for `genArt721Address`.
|
|
231
|
+
* @param adminACLContract_ Address of admin access control contract, to be
|
|
213
232
|
* set as contract owner.
|
|
214
|
-
* @param
|
|
233
|
+
* @param coreRegistry_ Address of core registry contract.
|
|
215
234
|
*/
|
|
216
|
-
constructor(address
|
|
235
|
+
constructor(address adminACLContract_, address coreRegistry_) {
|
|
217
236
|
// set AdminACL management contract as owner
|
|
218
|
-
_transferOwnership(
|
|
237
|
+
_transferOwnership(adminACLContract_);
|
|
219
238
|
// set core registry contract
|
|
220
|
-
_updateCoreRegistry(
|
|
239
|
+
_updateCoreRegistry(coreRegistry_);
|
|
221
240
|
emit Deployed();
|
|
222
241
|
}
|
|
223
242
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
243
|
+
/**
|
|
244
|
+
* @notice returns the version of this minter filter contract
|
|
245
|
+
*/
|
|
246
|
+
function minterFilterVersion() external pure returns (string memory) {
|
|
247
|
+
return MINTER_FILTER_VERSION.toString();
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* @notice returns the type of this minter filter contract
|
|
252
|
+
*/
|
|
253
|
+
function minterFilterType() external pure returns (string memory) {
|
|
254
|
+
return MINTER_FILTER_TYPE.toString();
|
|
228
255
|
}
|
|
229
256
|
|
|
230
257
|
/**
|
|
231
258
|
* @notice Updates the core registry contract to be used by this contract.
|
|
232
259
|
* Only callable as allowed by AdminACL of this contract.
|
|
233
|
-
* @param
|
|
260
|
+
* @param coreRegistry_ Address of the new core registry contract.
|
|
234
261
|
*/
|
|
235
|
-
function updateCoreRegistry(address
|
|
262
|
+
function updateCoreRegistry(address coreRegistry_) external {
|
|
236
263
|
_onlyAdminACL(this.updateCoreRegistry.selector);
|
|
237
|
-
_updateCoreRegistry(
|
|
264
|
+
_updateCoreRegistry(coreRegistry_);
|
|
238
265
|
}
|
|
239
266
|
|
|
240
267
|
/**
|
|
241
|
-
* @notice Globally approves minter `
|
|
268
|
+
* @notice Globally approves minter `minter` to be available for
|
|
242
269
|
* minting on any project, for any core contract.
|
|
243
270
|
* Only callable as allowed by AdminACL of this contract.
|
|
244
271
|
* @dev Reverts if minter is already globally approved, or does not
|
|
245
272
|
* implement minterType().
|
|
246
|
-
* @param
|
|
273
|
+
* @param minter Minter to be approved.
|
|
247
274
|
*/
|
|
248
|
-
function approveMinterGlobally(address
|
|
275
|
+
function approveMinterGlobally(address minter) external {
|
|
249
276
|
_onlyAdminACL(this.approveMinterGlobally.selector);
|
|
250
|
-
// @dev add()
|
|
277
|
+
// @dev add() return true if the value was removed from the set
|
|
251
278
|
require(
|
|
252
|
-
|
|
279
|
+
_globallyApprovedMinters.add(minter),
|
|
253
280
|
"Minter already approved"
|
|
254
281
|
);
|
|
255
|
-
emit MinterApprovedGlobally(
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
);
|
|
282
|
+
emit MinterApprovedGlobally({
|
|
283
|
+
minter: minter,
|
|
284
|
+
minterType: ISharedMinterV0(minter).minterType()
|
|
285
|
+
});
|
|
259
286
|
}
|
|
260
287
|
|
|
261
288
|
/**
|
|
262
|
-
* @notice Removes previously globally approved minter `
|
|
289
|
+
* @notice Removes previously globally approved minter `minter`
|
|
263
290
|
* from the list of globally approved minters.
|
|
264
291
|
* Only callable as allowed by AdminACL of this contract.
|
|
265
|
-
* Reverts if minter is not globally approved
|
|
266
|
-
* in use by any project.
|
|
292
|
+
* Reverts if minter is not globally approved.
|
|
267
293
|
* @dev intentionally do not check if minter is still in use by any
|
|
268
294
|
* project, meaning that any projects currently using the minter will
|
|
269
295
|
* continue to be able to use it. If existing projects should be forced
|
|
270
296
|
* to discontinue using a minter, the minter may be removed by the minter
|
|
271
|
-
* filter admin in bulk via the `
|
|
272
|
-
*
|
|
297
|
+
* filter admin in bulk via the `removeMintersForProjectsOnContract`
|
|
298
|
+
* function.
|
|
299
|
+
* @param minter Minter to remove.
|
|
273
300
|
*/
|
|
274
|
-
function revokeMinterGlobally(address
|
|
301
|
+
function revokeMinterGlobally(address minter) external {
|
|
275
302
|
_onlyAdminACL(this.revokeMinterGlobally.selector);
|
|
276
303
|
// @dev remove() returns true only if the value was already in the Set
|
|
277
304
|
require(
|
|
278
|
-
|
|
305
|
+
_globallyApprovedMinters.remove(minter),
|
|
279
306
|
"Only previously approved minter"
|
|
280
307
|
);
|
|
281
|
-
emit MinterRevokedGlobally(
|
|
308
|
+
emit MinterRevokedGlobally(minter);
|
|
282
309
|
}
|
|
283
310
|
|
|
284
311
|
/**
|
|
285
|
-
* @notice Approves minter `
|
|
286
|
-
* any project on core contarct `
|
|
287
|
-
* Only callable as allowed by AdminACL of core contract `
|
|
312
|
+
* @notice Approves minter `minter` to be available for minting on
|
|
313
|
+
* any project on core contarct `coreContract`.
|
|
314
|
+
* Only callable as allowed by AdminACL of core contract `coreContract`.
|
|
288
315
|
* Reverts if core contract is not registered, if minter is already
|
|
289
316
|
* approved for the contract, or if minter does not implement minterType().
|
|
290
|
-
* @param
|
|
291
|
-
* @param
|
|
317
|
+
* @param coreContract Core contract to approve minter for.
|
|
318
|
+
* @param minter Minter to be approved.
|
|
292
319
|
*/
|
|
293
320
|
function approveMinterForContract(
|
|
294
|
-
address
|
|
295
|
-
address
|
|
321
|
+
address coreContract,
|
|
322
|
+
address minter
|
|
296
323
|
) external {
|
|
297
|
-
_onlyRegisteredCoreContract(
|
|
298
|
-
_onlyCoreAdminACL(
|
|
299
|
-
|
|
300
|
-
this.approveMinterForContract.selector
|
|
301
|
-
);
|
|
302
|
-
// @dev add() returns true
|
|
324
|
+
_onlyRegisteredCoreContract(coreContract);
|
|
325
|
+
_onlyCoreAdminACL({
|
|
326
|
+
coreContract: coreContract,
|
|
327
|
+
selector: this.approveMinterForContract.selector
|
|
328
|
+
});
|
|
329
|
+
// @dev add() returns true if the value was removed from the Set
|
|
303
330
|
require(
|
|
304
|
-
|
|
331
|
+
_contractApprovedMinters[coreContract].add(minter),
|
|
305
332
|
"Minter already approved"
|
|
306
333
|
);
|
|
307
334
|
emit MinterApprovedForContract({
|
|
308
|
-
coreContract:
|
|
309
|
-
minter:
|
|
310
|
-
minterType:
|
|
335
|
+
coreContract: coreContract,
|
|
336
|
+
minter: minter,
|
|
337
|
+
minterType: ISharedMinterV0(minter).minterType()
|
|
311
338
|
});
|
|
312
339
|
}
|
|
313
340
|
|
|
314
341
|
/**
|
|
315
|
-
* @notice Removes previously approved minter `
|
|
316
|
-
* list of approved minters on core contract `
|
|
317
|
-
* Only callable as allowed by AdminACL of core contract `
|
|
342
|
+
* @notice Removes previously approved minter `minter` from the
|
|
343
|
+
* list of approved minters on core contract `coreContract`.
|
|
344
|
+
* Only callable as allowed by AdminACL of core contract `coreContract`.
|
|
318
345
|
* Reverts if core contract is not registered, or if minter is not approved
|
|
319
346
|
* on contract.
|
|
320
347
|
* @dev intentionally does not check if minter is still in use by any
|
|
321
348
|
* project, meaning that any projects currently using the minter will
|
|
322
349
|
* continue to be able to use it. If existing projects should be forced
|
|
323
350
|
* to discontinue using a minter, the minter may be removed by the contract
|
|
324
|
-
* admin in bulk via the `
|
|
325
|
-
* @param
|
|
351
|
+
* admin in bulk via the `removeMintersForProjectsOnContract` function.
|
|
352
|
+
* @param coreContract Core contract to remove minter from.
|
|
353
|
+
* @param minter Minter to remove.
|
|
326
354
|
*/
|
|
327
355
|
function revokeMinterForContract(
|
|
328
|
-
address
|
|
329
|
-
address
|
|
356
|
+
address coreContract,
|
|
357
|
+
address minter
|
|
330
358
|
) external {
|
|
331
|
-
_onlyRegisteredCoreContract(
|
|
332
|
-
_onlyCoreAdminACL(
|
|
359
|
+
_onlyRegisteredCoreContract(coreContract);
|
|
360
|
+
_onlyCoreAdminACL({
|
|
361
|
+
coreContract: coreContract,
|
|
362
|
+
selector: this.revokeMinterForContract.selector
|
|
363
|
+
});
|
|
333
364
|
// @dev intentionally do not check if minter is still in use by any
|
|
334
365
|
// project, since it is possible that a different contract's project is
|
|
335
366
|
// using the minter
|
|
336
367
|
// @dev remove() returns true only if the value was already in the Set
|
|
337
368
|
require(
|
|
338
|
-
|
|
369
|
+
_contractApprovedMinters[coreContract].remove(minter),
|
|
339
370
|
"Only previously approved minter"
|
|
340
371
|
);
|
|
341
372
|
emit MinterRevokedForContract({
|
|
342
|
-
coreContract:
|
|
343
|
-
minter:
|
|
373
|
+
coreContract: coreContract,
|
|
374
|
+
minter: minter
|
|
344
375
|
});
|
|
345
376
|
}
|
|
346
377
|
|
|
347
378
|
/**
|
|
348
|
-
* @notice Sets minter for project `
|
|
349
|
-
* to minter `
|
|
379
|
+
* @notice Sets minter for project `projectId` on contract `coreContract`
|
|
380
|
+
* to minter `minter`.
|
|
350
381
|
* Only callable by the project's artist or as allowed by AdminACL of
|
|
351
|
-
* core contract `
|
|
382
|
+
* core contract `coreContract`.
|
|
352
383
|
* Reverts if:
|
|
353
384
|
* - core contract is not registered
|
|
354
385
|
* - minter is not approved globally on this minter filter or for the
|
|
@@ -357,91 +388,98 @@ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
|
|
|
357
388
|
* - function is called by an address other than the project's artist
|
|
358
389
|
* or a sender allowed by the core contract's admin ACL
|
|
359
390
|
* - minter does not implement minterType()
|
|
360
|
-
* @param
|
|
361
|
-
* @param
|
|
362
|
-
* @param
|
|
391
|
+
* @param projectId Project ID to set minter for.
|
|
392
|
+
* @param coreContract Core contract of project.
|
|
393
|
+
* @param minter Minter to be the project's minter.
|
|
363
394
|
*/
|
|
364
395
|
function setMinterForProject(
|
|
365
|
-
uint256
|
|
366
|
-
address
|
|
367
|
-
address
|
|
396
|
+
uint256 projectId,
|
|
397
|
+
address coreContract,
|
|
398
|
+
address minter
|
|
368
399
|
) external {
|
|
369
400
|
/// CHECKS
|
|
370
|
-
_onlyRegisteredCoreContract(
|
|
371
|
-
_onlyCoreAdminACLOrArtist(
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
this.setMinterForProject.selector
|
|
375
|
-
);
|
|
376
|
-
_onlyApprovedMinter(
|
|
377
|
-
_onlyValidProjectId(
|
|
401
|
+
_onlyRegisteredCoreContract(coreContract);
|
|
402
|
+
_onlyCoreAdminACLOrArtist({
|
|
403
|
+
projectId: projectId,
|
|
404
|
+
coreContract: coreContract,
|
|
405
|
+
selector: this.setMinterForProject.selector
|
|
406
|
+
});
|
|
407
|
+
_onlyApprovedMinter({coreContract: coreContract, minter: minter});
|
|
408
|
+
_onlyValidProjectId({projectId: projectId, coreContract: coreContract});
|
|
378
409
|
/// EFFECTS
|
|
379
410
|
// decrement number of projects using a previous minter
|
|
380
|
-
(bool hasPreviousMinter, address previousMinter) =
|
|
381
|
-
|
|
382
|
-
].tryGet(
|
|
411
|
+
(bool hasPreviousMinter, address previousMinter) = _minterForProject[
|
|
412
|
+
coreContract
|
|
413
|
+
].tryGet(projectId);
|
|
383
414
|
if (hasPreviousMinter) {
|
|
384
415
|
numProjectsUsingMinter[previousMinter]--;
|
|
385
416
|
}
|
|
386
417
|
// assign new minter
|
|
387
|
-
numProjectsUsingMinter[
|
|
388
|
-
|
|
418
|
+
numProjectsUsingMinter[minter]++;
|
|
419
|
+
_minterForProject[coreContract].set(projectId, minter);
|
|
389
420
|
emit ProjectMinterRegistered({
|
|
390
|
-
projectId:
|
|
391
|
-
coreContract:
|
|
392
|
-
minter:
|
|
393
|
-
minterType:
|
|
421
|
+
projectId: projectId,
|
|
422
|
+
coreContract: coreContract,
|
|
423
|
+
minter: minter,
|
|
424
|
+
minterType: ISharedMinterV0(minter).minterType()
|
|
394
425
|
});
|
|
395
426
|
}
|
|
396
427
|
|
|
397
428
|
/**
|
|
398
|
-
* @notice Updates project `
|
|
429
|
+
* @notice Updates project `projectId` on contract `coreContract` to have
|
|
399
430
|
* no configured minter.
|
|
400
431
|
* Only callable by the project's artist or as allowed by AdminACL of
|
|
401
|
-
* core contract `
|
|
432
|
+
* core contract `coreContract`.
|
|
402
433
|
* Reverts if:
|
|
403
434
|
* - core contract is not registered
|
|
404
435
|
* - project does not already have a minter assigned
|
|
405
436
|
* - function is called by an address other than the project's artist
|
|
406
437
|
* or a sender allowed by the core contract's admin ACL
|
|
407
|
-
* @param
|
|
408
|
-
* @param
|
|
438
|
+
* @param projectId Project ID to remove minter for.
|
|
439
|
+
* @param coreContract Core contract of project.
|
|
409
440
|
* @dev requires project to have an assigned minter
|
|
410
441
|
*/
|
|
411
442
|
function removeMinterForProject(
|
|
412
|
-
uint256
|
|
413
|
-
address
|
|
443
|
+
uint256 projectId,
|
|
444
|
+
address coreContract
|
|
414
445
|
) external {
|
|
415
|
-
_onlyRegisteredCoreContract(
|
|
416
|
-
_onlyCoreAdminACLOrArtist(
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
this.removeMinterForProject.selector
|
|
420
|
-
);
|
|
446
|
+
_onlyRegisteredCoreContract(coreContract);
|
|
447
|
+
_onlyCoreAdminACLOrArtist({
|
|
448
|
+
projectId: projectId,
|
|
449
|
+
coreContract: coreContract,
|
|
450
|
+
selector: this.removeMinterForProject.selector
|
|
451
|
+
});
|
|
421
452
|
// @dev this will revert if project does not have a minter
|
|
422
|
-
_removeMinterForProject(
|
|
453
|
+
_removeMinterForProject({
|
|
454
|
+
projectId: projectId,
|
|
455
|
+
coreContract: coreContract
|
|
456
|
+
});
|
|
423
457
|
}
|
|
424
458
|
|
|
425
459
|
/**
|
|
426
460
|
* @notice Updates an array of project IDs to have no configured minter.
|
|
427
|
-
* Only callable as allowed by AdminACL of core contract `
|
|
461
|
+
* Only callable as allowed by AdminACL of core contract `coreContract`.
|
|
428
462
|
* Reverts if the core contract is not registered, or if any project does
|
|
429
463
|
* not already have a minter assigned.
|
|
430
|
-
* @param
|
|
464
|
+
* @param projectIds Array of project IDs to remove minters for.
|
|
465
|
+
* @param coreContract Core contract of projects.
|
|
431
466
|
* @dev caution with respect to single tx gas limits
|
|
432
467
|
*/
|
|
433
468
|
function removeMintersForProjectsOnContract(
|
|
434
|
-
uint256[] calldata
|
|
435
|
-
address
|
|
469
|
+
uint256[] calldata projectIds,
|
|
470
|
+
address coreContract
|
|
436
471
|
) external {
|
|
437
|
-
_onlyRegisteredCoreContract(
|
|
438
|
-
_onlyCoreAdminACL(
|
|
439
|
-
|
|
440
|
-
this.removeMintersForProjectsOnContract.selector
|
|
441
|
-
);
|
|
442
|
-
uint256 numProjects =
|
|
472
|
+
_onlyRegisteredCoreContract(coreContract);
|
|
473
|
+
_onlyCoreAdminACL({
|
|
474
|
+
coreContract: coreContract,
|
|
475
|
+
selector: this.removeMintersForProjectsOnContract.selector
|
|
476
|
+
});
|
|
477
|
+
uint256 numProjects = projectIds.length;
|
|
443
478
|
for (uint256 i; i < numProjects; ) {
|
|
444
|
-
_removeMinterForProject(
|
|
479
|
+
_removeMinterForProject({
|
|
480
|
+
projectId: projectIds[i],
|
|
481
|
+
coreContract: coreContract
|
|
482
|
+
});
|
|
445
483
|
unchecked {
|
|
446
484
|
++i;
|
|
447
485
|
}
|
|
@@ -449,12 +487,12 @@ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
|
|
|
449
487
|
}
|
|
450
488
|
|
|
451
489
|
/**
|
|
452
|
-
* @notice Mint a token from project `
|
|
453
|
-
* `
|
|
454
|
-
* @param
|
|
455
|
-
* @param
|
|
456
|
-
* @param
|
|
457
|
-
* @param
|
|
490
|
+
* @notice Mint a token from project `projectId` on contract
|
|
491
|
+
* `coreContract` to `to`, originally purchased by `sender`.
|
|
492
|
+
* @param to The new token's owner.
|
|
493
|
+
* @param projectId Project ID to mint a new token on.
|
|
494
|
+
* @param sender Address purchasing a new token.
|
|
495
|
+
* @param coreContract Core contract of project.
|
|
458
496
|
* @return tokenId Token ID of minted token
|
|
459
497
|
* @dev reverts w/nonexistent key error when project has no assigned minter
|
|
460
498
|
* @dev does not check if core contract is registered, for gas efficiency
|
|
@@ -465,32 +503,32 @@ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
|
|
|
465
503
|
* @dev function name is optimized for gas.
|
|
466
504
|
*/
|
|
467
505
|
function mint_joo(
|
|
468
|
-
address
|
|
469
|
-
uint256
|
|
470
|
-
address
|
|
471
|
-
address
|
|
506
|
+
address to,
|
|
507
|
+
uint256 projectId,
|
|
508
|
+
address coreContract,
|
|
509
|
+
address sender
|
|
472
510
|
) external returns (uint256 tokenId) {
|
|
473
511
|
// CHECKS
|
|
474
512
|
// minter is the project's minter
|
|
475
513
|
require(
|
|
476
|
-
msg.sender ==
|
|
514
|
+
msg.sender == _minterForProject[coreContract].get(projectId),
|
|
477
515
|
"Only assigned minter"
|
|
478
516
|
);
|
|
479
517
|
// INTERACTIONS
|
|
480
|
-
tokenId = IGenArt721CoreContractV3_Base(
|
|
481
|
-
_to,
|
|
482
|
-
_projectId,
|
|
483
|
-
|
|
484
|
-
);
|
|
518
|
+
tokenId = IGenArt721CoreContractV3_Base(coreContract).mint_Ecf({
|
|
519
|
+
_to: to,
|
|
520
|
+
_projectId: projectId,
|
|
521
|
+
_by: sender
|
|
522
|
+
});
|
|
485
523
|
return tokenId;
|
|
486
524
|
}
|
|
487
525
|
|
|
488
526
|
/**
|
|
489
|
-
* @notice Gets the assigned minter for project `
|
|
490
|
-
* contract `
|
|
527
|
+
* @notice Gets the assigned minter for project `projectId` on core
|
|
528
|
+
* contract `coreContract`.
|
|
491
529
|
* Reverts if project does not have an assigned minter.
|
|
492
|
-
* @param
|
|
493
|
-
* @param
|
|
530
|
+
* @param projectId Project ID to query.
|
|
531
|
+
* @param coreContract Core contract of project.
|
|
494
532
|
* @return address Minter address assigned to project
|
|
495
533
|
* @dev requires project to have an assigned minter
|
|
496
534
|
* @dev this function intentionally does not check that the core contract
|
|
@@ -498,21 +536,21 @@ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
|
|
|
498
536
|
* project was assigned a minter
|
|
499
537
|
*/
|
|
500
538
|
function getMinterForProject(
|
|
501
|
-
uint256
|
|
502
|
-
address
|
|
539
|
+
uint256 projectId,
|
|
540
|
+
address coreContract
|
|
503
541
|
) external view returns (address) {
|
|
504
|
-
(bool hasMinter, address currentMinter) =
|
|
505
|
-
|
|
506
|
-
].tryGet(
|
|
542
|
+
(bool hasMinter, address currentMinter) = _minterForProject[
|
|
543
|
+
coreContract
|
|
544
|
+
].tryGet(projectId);
|
|
507
545
|
require(hasMinter, "No minter assigned");
|
|
508
546
|
return currentMinter;
|
|
509
547
|
}
|
|
510
548
|
|
|
511
549
|
/**
|
|
512
|
-
* @notice Queries if project `
|
|
550
|
+
* @notice Queries if project `projectId` on core contract `coreContract`
|
|
513
551
|
* has an assigned minter.
|
|
514
|
-
* @param
|
|
515
|
-
* @param
|
|
552
|
+
* @param projectId Project ID to query.
|
|
553
|
+
* @param coreContract Core contract of project.
|
|
516
554
|
* @return bool true if project has an assigned minter, else false
|
|
517
555
|
* @dev requires project to have an assigned minter
|
|
518
556
|
* @dev this function intentionally does not check that the core contract
|
|
@@ -520,35 +558,35 @@ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
|
|
|
520
558
|
* project was assigned a minter
|
|
521
559
|
*/
|
|
522
560
|
function projectHasMinter(
|
|
523
|
-
uint256
|
|
524
|
-
address
|
|
561
|
+
uint256 projectId,
|
|
562
|
+
address coreContract
|
|
525
563
|
) external view returns (bool) {
|
|
526
|
-
(bool hasMinter, ) =
|
|
564
|
+
(bool hasMinter, ) = _minterForProject[coreContract].tryGet(projectId);
|
|
527
565
|
return hasMinter;
|
|
528
566
|
}
|
|
529
567
|
|
|
530
568
|
/**
|
|
531
569
|
* @notice Gets quantity of projects on a given core contract that have
|
|
532
570
|
* assigned minters.
|
|
533
|
-
* @param
|
|
571
|
+
* @param coreContract Core contract to query.
|
|
534
572
|
* @return uint256 quantity of projects that have assigned minters
|
|
535
573
|
* @dev this function intentionally does not check that the core contract
|
|
536
574
|
* is registered, since it must have been registered at the time the
|
|
537
575
|
* project was assigned a minter
|
|
538
576
|
*/
|
|
539
577
|
function getNumProjectsOnContractWithMinters(
|
|
540
|
-
address
|
|
578
|
+
address coreContract
|
|
541
579
|
) external view returns (uint256) {
|
|
542
|
-
return
|
|
580
|
+
return _minterForProject[coreContract].length();
|
|
543
581
|
}
|
|
544
582
|
|
|
545
583
|
/**
|
|
546
|
-
* @notice Get project ID and minter address at index `
|
|
584
|
+
* @notice Get project ID and minter address at index `index` of
|
|
547
585
|
* enumerable map.
|
|
548
|
-
* @param
|
|
549
|
-
* @param
|
|
550
|
-
* @return projectId project ID at index `
|
|
551
|
-
* @return minterAddress minter address for project at index `
|
|
586
|
+
* @param coreContract Core contract to query.
|
|
587
|
+
* @param index enumerable map index to query.
|
|
588
|
+
* @return projectId project ID at index `index`
|
|
589
|
+
* @return minterAddress minter address for project at index `index`
|
|
552
590
|
* @return minterType minter type of minter at minterAddress
|
|
553
591
|
* @dev index must be < quantity of projects that have assigned minters,
|
|
554
592
|
* otherwise reverts
|
|
@@ -558,8 +596,8 @@ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
|
|
|
558
596
|
* project was assigned a minter
|
|
559
597
|
*/
|
|
560
598
|
function getProjectAndMinterInfoOnContractAt(
|
|
561
|
-
address
|
|
562
|
-
uint256
|
|
599
|
+
address coreContract,
|
|
600
|
+
uint256 index
|
|
563
601
|
)
|
|
564
602
|
external
|
|
565
603
|
view
|
|
@@ -570,123 +608,195 @@ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
|
|
|
570
608
|
)
|
|
571
609
|
{
|
|
572
610
|
// @dev at() reverts if index is out of bounds
|
|
573
|
-
(projectId, minterAddress) =
|
|
574
|
-
minterType =
|
|
575
|
-
return (projectId, minterAddress, minterType);
|
|
611
|
+
(projectId, minterAddress) = _minterForProject[coreContract].at(index);
|
|
612
|
+
minterType = ISharedMinterV0(minterAddress).minterType();
|
|
576
613
|
}
|
|
577
614
|
|
|
578
615
|
/**
|
|
579
616
|
* @notice View that returns if a core contract is registered with the
|
|
580
617
|
* core registry, allowing this minter filter to service it.
|
|
581
|
-
* @param
|
|
618
|
+
* @param coreContract core contract address to be checked
|
|
582
619
|
* @return bool true if core contract is registered, else false
|
|
583
620
|
*/
|
|
584
621
|
function isRegisteredCoreContract(
|
|
585
|
-
address
|
|
622
|
+
address coreContract
|
|
586
623
|
) external view override returns (bool) {
|
|
587
|
-
return coreRegistry.isRegisteredContract(
|
|
624
|
+
return coreRegistry.isRegisteredContract(coreContract);
|
|
588
625
|
}
|
|
589
626
|
|
|
590
627
|
/**
|
|
591
|
-
* @notice Gets all projects on core contract `
|
|
592
|
-
* using minter `
|
|
628
|
+
* @notice Gets all projects on core contract `coreContract` that are
|
|
629
|
+
* using minter `minter`.
|
|
593
630
|
* Warning: Unbounded gas limit. This function is gas-intensive and should
|
|
594
631
|
* only be used for off-chain queries. Alternatively, the subgraph indexing
|
|
595
632
|
* layer may be used to query these values.
|
|
596
|
-
* @param
|
|
597
|
-
* @param
|
|
633
|
+
* @param coreContract core contract to query
|
|
634
|
+
* @param minter minter to query
|
|
598
635
|
*/
|
|
599
636
|
function getProjectsOnContractUsingMinter(
|
|
600
|
-
address
|
|
601
|
-
address
|
|
637
|
+
address coreContract,
|
|
638
|
+
address minter
|
|
602
639
|
) external view returns (uint256[] memory projectIds) {
|
|
603
640
|
// initialize arrays with maximum potential length
|
|
604
641
|
// @dev use num projects using minter across all contracts since it the
|
|
605
642
|
// maximum length of this array
|
|
606
|
-
uint256 maxNumProjects = numProjectsUsingMinter[
|
|
643
|
+
uint256 maxNumProjects = numProjectsUsingMinter[minter];
|
|
607
644
|
projectIds = new uint256[](maxNumProjects);
|
|
608
645
|
// iterate over all projects on contract, adding to array if using
|
|
609
|
-
// `
|
|
610
|
-
EnumerableMap.UintToAddressMap storage minterMap =
|
|
611
|
-
|
|
646
|
+
// `minter`
|
|
647
|
+
EnumerableMap.UintToAddressMap storage minterMap = _minterForProject[
|
|
648
|
+
coreContract
|
|
612
649
|
];
|
|
613
650
|
uint256 numProjects = minterMap.length();
|
|
614
651
|
uint256 numProjectsOnContractUsingMinter;
|
|
615
652
|
for (uint256 i; i < numProjects; ) {
|
|
616
|
-
(uint256 projectId, address
|
|
617
|
-
if (minter == _minter) {
|
|
618
|
-
projectIds[numProjectsOnContractUsingMinter++] = projectId;
|
|
619
|
-
}
|
|
653
|
+
(uint256 projectId, address minter_) = minterMap.at(i);
|
|
620
654
|
unchecked {
|
|
655
|
+
if (minter_ == minter) {
|
|
656
|
+
projectIds[numProjectsOnContractUsingMinter++] = projectId;
|
|
657
|
+
}
|
|
621
658
|
++i;
|
|
622
659
|
}
|
|
623
660
|
}
|
|
624
661
|
// trim array if necessary
|
|
625
662
|
if (maxNumProjects > numProjectsOnContractUsingMinter) {
|
|
626
|
-
assembly {
|
|
627
|
-
|
|
628
|
-
maxNumProjects,
|
|
629
|
-
numProjectsOnContractUsingMinter
|
|
630
|
-
)
|
|
631
|
-
mstore(projectIds, sub(mload(projectIds), decrease))
|
|
663
|
+
assembly ("memory-safe") {
|
|
664
|
+
mstore(projectIds, numProjectsOnContractUsingMinter)
|
|
632
665
|
}
|
|
633
666
|
}
|
|
634
667
|
return projectIds;
|
|
635
668
|
}
|
|
636
669
|
|
|
637
670
|
/**
|
|
638
|
-
* @notice
|
|
639
|
-
*
|
|
671
|
+
* @notice Gets all minters that are globally approved on this minter
|
|
672
|
+
* filter. Returns an array of MinterWithType structs, which contain the
|
|
673
|
+
* minter address and minter type.
|
|
674
|
+
* This function has unbounded gas, and should only be used for off-chain
|
|
675
|
+
* queries.
|
|
676
|
+
* Alternatively, the subgraph indexing layer may be used to query these
|
|
677
|
+
* values.
|
|
678
|
+
* @return mintersWithTypes Array of MinterWithType structs, which contain
|
|
679
|
+
* the minter address and minter type.
|
|
680
|
+
*/
|
|
681
|
+
function getAllGloballyApprovedMinters()
|
|
682
|
+
external
|
|
683
|
+
view
|
|
684
|
+
returns (MinterWithType[] memory mintersWithTypes)
|
|
685
|
+
{
|
|
686
|
+
// initialize arrays with appropriate length
|
|
687
|
+
uint256 numMinters = _globallyApprovedMinters.length();
|
|
688
|
+
mintersWithTypes = new MinterWithType[](numMinters);
|
|
689
|
+
// iterate over all globally approved minters, adding to array
|
|
690
|
+
for (uint256 i; i < numMinters; ) {
|
|
691
|
+
address minterAddress = _globallyApprovedMinters.at(i);
|
|
692
|
+
// @dev we know minterType() does not revert, because it was called
|
|
693
|
+
// when globally approving the minter
|
|
694
|
+
string memory minterType = ISharedMinterV0(minterAddress)
|
|
695
|
+
.minterType();
|
|
696
|
+
mintersWithTypes[i] = MinterWithType({
|
|
697
|
+
minterAddress: minterAddress,
|
|
698
|
+
minterType: minterType
|
|
699
|
+
});
|
|
700
|
+
unchecked {
|
|
701
|
+
++i;
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
/**
|
|
707
|
+
* @notice Gets all minters that are approved for a specific core contract.
|
|
708
|
+
* Returns an array of MinterWithType structs, which contain the minter
|
|
709
|
+
* address and minter type.
|
|
710
|
+
* This function has unbounded gas, and should only be used for off-chain
|
|
711
|
+
* queries.
|
|
712
|
+
* @param coreContract Core contract to query.
|
|
713
|
+
* @return mintersWithTypes Array of MinterWithType structs, which contain
|
|
714
|
+
* the minter address and minter type.
|
|
715
|
+
*/
|
|
716
|
+
function getAllContractApprovedMinters(
|
|
717
|
+
address coreContract
|
|
718
|
+
) external view returns (MinterWithType[] memory mintersWithTypes) {
|
|
719
|
+
// initialize arrays with appropriate length
|
|
720
|
+
EnumerableSet.AddressSet
|
|
721
|
+
storage contractApprovedMinters = _contractApprovedMinters[
|
|
722
|
+
coreContract
|
|
723
|
+
];
|
|
724
|
+
uint256 numMinters = contractApprovedMinters.length();
|
|
725
|
+
mintersWithTypes = new MinterWithType[](numMinters);
|
|
726
|
+
// iterate over all minters approved for a given contract, adding to
|
|
727
|
+
// array
|
|
728
|
+
for (uint256 i; i < numMinters; ) {
|
|
729
|
+
address minterAddress = contractApprovedMinters.at(i);
|
|
730
|
+
// @dev we know minterType() does not revert, because it was called
|
|
731
|
+
// when approving the minter for a contract
|
|
732
|
+
string memory minterType = ISharedMinterV0(minterAddress)
|
|
733
|
+
.minterType();
|
|
734
|
+
mintersWithTypes[i] = MinterWithType({
|
|
735
|
+
minterAddress: minterAddress,
|
|
736
|
+
minterType: minterType
|
|
737
|
+
});
|
|
738
|
+
unchecked {
|
|
739
|
+
++i;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
/**
|
|
745
|
+
* @notice Convenience function that returns whether `sender` is allowed
|
|
746
|
+
* to call function with selector `selector` on contract `contract`, as
|
|
640
747
|
* determined by this contract's current Admin ACL contract. Expected use
|
|
641
748
|
* cases include minter contracts checking if caller is allowed to call
|
|
642
749
|
* admin-gated functions on minter contracts.
|
|
643
|
-
* @param
|
|
644
|
-
* `
|
|
645
|
-
* @param
|
|
646
|
-
* @param
|
|
647
|
-
* `
|
|
648
|
-
* @return bool Whether `
|
|
649
|
-
* `
|
|
750
|
+
* @param sender Address of the sender calling function with selector
|
|
751
|
+
* `selector` on contract `contract`.
|
|
752
|
+
* @param contract_ Address of the contract being called by `sender`.
|
|
753
|
+
* @param selector Function selector of the function being called by
|
|
754
|
+
* `sender`.
|
|
755
|
+
* @return bool Whether `sender` is allowed to call function with selector
|
|
756
|
+
* `selector` on contract `contract`.
|
|
650
757
|
* @dev assumes the Admin ACL contract is the owner of this contract, which
|
|
651
758
|
* is expected to always be true.
|
|
652
|
-
* @dev adminACLContract is expected to
|
|
653
|
-
*
|
|
654
|
-
*
|
|
759
|
+
* @dev adminACLContract is expected to not be null address (owner cannot
|
|
760
|
+
* renounce ownership on this contract), and conform to IAdminACLV0
|
|
761
|
+
* interface.
|
|
655
762
|
*/
|
|
656
763
|
function adminACLAllowed(
|
|
657
|
-
address
|
|
658
|
-
address
|
|
659
|
-
bytes4
|
|
764
|
+
address sender,
|
|
765
|
+
address contract_,
|
|
766
|
+
bytes4 selector
|
|
660
767
|
) public returns (bool) {
|
|
661
768
|
return
|
|
662
|
-
|
|
663
|
-
|
|
769
|
+
adminACLContract.allowed({
|
|
770
|
+
_sender: sender,
|
|
771
|
+
_contract: contract_,
|
|
772
|
+
_selector: selector
|
|
773
|
+
});
|
|
664
774
|
}
|
|
665
775
|
|
|
666
776
|
/**
|
|
667
|
-
* @notice Returns whether `
|
|
777
|
+
* @notice Returns whether `minter` is globally approved to mint tokens
|
|
668
778
|
* on any contract.
|
|
669
|
-
* @param
|
|
779
|
+
* @param minter Address of minter to check.
|
|
670
780
|
*/
|
|
671
781
|
function isGloballyApprovedMinter(
|
|
672
|
-
address
|
|
782
|
+
address minter
|
|
673
783
|
) public view returns (bool) {
|
|
674
|
-
return
|
|
784
|
+
return _globallyApprovedMinters.contains(minter);
|
|
675
785
|
}
|
|
676
786
|
|
|
677
787
|
/**
|
|
678
|
-
* @notice Returns whether `
|
|
679
|
-
* core contract `
|
|
680
|
-
* @param
|
|
681
|
-
* @param
|
|
788
|
+
* @notice Returns whether `minter` is approved to mint tokens on
|
|
789
|
+
* core contract `coreContract`.
|
|
790
|
+
* @param coreContract Address of core contract to check.
|
|
791
|
+
* @param minter Address of minter to check.
|
|
682
792
|
*/
|
|
683
793
|
function isApprovedMinterForContract(
|
|
684
|
-
address
|
|
685
|
-
address
|
|
794
|
+
address coreContract,
|
|
795
|
+
address minter
|
|
686
796
|
) public view returns (bool) {
|
|
687
797
|
return
|
|
688
|
-
isGloballyApprovedMinter(
|
|
689
|
-
|
|
798
|
+
isGloballyApprovedMinter(minter) ||
|
|
799
|
+
_contractApprovedMinters[coreContract].contains(minter);
|
|
690
800
|
}
|
|
691
801
|
|
|
692
802
|
/**
|
|
@@ -705,52 +815,59 @@ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
|
|
|
705
815
|
return Ownable.owner();
|
|
706
816
|
}
|
|
707
817
|
|
|
818
|
+
/// @dev override to prevent renouncing ownership
|
|
819
|
+
/// @dev not permission gated since this immediately reverts
|
|
820
|
+
function renounceOwnership() public pure override {
|
|
821
|
+
revert("Cannot renounce ownership");
|
|
822
|
+
}
|
|
823
|
+
|
|
708
824
|
/**
|
|
709
|
-
* @notice Updates project `
|
|
825
|
+
* @notice Updates project `projectId` to have no configured minter
|
|
710
826
|
* Reverts if project does not already have an assigned minter.
|
|
711
|
-
* @param
|
|
827
|
+
* @param projectId Project ID to remove minter.
|
|
828
|
+
* @param coreContract Core contract of project.
|
|
712
829
|
* @dev requires project to have an assigned minter
|
|
713
830
|
* @dev this function intentionally does not check that the core contract
|
|
714
831
|
* is registered, since it must have been registered at the time the
|
|
715
832
|
* project was assigned a minter
|
|
716
833
|
*/
|
|
717
834
|
function _removeMinterForProject(
|
|
718
|
-
uint256
|
|
719
|
-
address
|
|
835
|
+
uint256 projectId,
|
|
836
|
+
address coreContract
|
|
720
837
|
) internal {
|
|
721
838
|
// remove minter for project and emit
|
|
722
839
|
// @dev `minterForProject.get()` reverts tx if no minter set for project
|
|
723
840
|
numProjectsUsingMinter[
|
|
724
|
-
|
|
725
|
-
_projectId,
|
|
726
|
-
"No minter assigned"
|
|
727
|
-
)
|
|
841
|
+
_minterForProject[coreContract].get(projectId, "No minter assigned")
|
|
728
842
|
]--;
|
|
729
|
-
|
|
730
|
-
emit ProjectMinterRemoved(
|
|
843
|
+
_minterForProject[coreContract].remove(projectId);
|
|
844
|
+
emit ProjectMinterRemoved({
|
|
845
|
+
projectId: projectId,
|
|
846
|
+
coreContract: coreContract
|
|
847
|
+
});
|
|
731
848
|
}
|
|
732
849
|
|
|
733
850
|
/**
|
|
734
|
-
* @notice Transfers ownership of the contract to a new account (`
|
|
851
|
+
* @notice Transfers ownership of the contract to a new account (`owner`).
|
|
735
852
|
* Internal function without access restriction.
|
|
736
|
-
* @param
|
|
853
|
+
* @param owner_ New owner.
|
|
737
854
|
* @dev owner role was called `admin` prior to V3 core contract.
|
|
738
855
|
* @dev Overrides and wraps OpenZeppelin's _transferOwnership function to
|
|
739
856
|
* also update adminACLContract for improved introspection.
|
|
740
857
|
*/
|
|
741
|
-
function _transferOwnership(address
|
|
742
|
-
Ownable._transferOwnership(
|
|
743
|
-
adminACLContract = IAdminACLV0(
|
|
858
|
+
function _transferOwnership(address owner_) internal override {
|
|
859
|
+
Ownable._transferOwnership(owner_);
|
|
860
|
+
adminACLContract = IAdminACLV0(owner_);
|
|
744
861
|
}
|
|
745
862
|
|
|
746
863
|
/**
|
|
747
864
|
* @notice Updates this contract's core registry contract to
|
|
748
|
-
* `
|
|
749
|
-
* @param
|
|
865
|
+
* `coreRegistry`.
|
|
866
|
+
* @param coreRegistry_ New core registry contract address.
|
|
750
867
|
*/
|
|
751
|
-
function _updateCoreRegistry(address
|
|
752
|
-
_onlyNonZeroAddress(
|
|
753
|
-
coreRegistry = ICoreRegistryV1(
|
|
754
|
-
emit CoreRegistryUpdated(
|
|
868
|
+
function _updateCoreRegistry(address coreRegistry_) internal {
|
|
869
|
+
_onlyNonZeroAddress(coreRegistry_);
|
|
870
|
+
coreRegistry = ICoreRegistryV1(coreRegistry_);
|
|
871
|
+
emit CoreRegistryUpdated(coreRegistry_);
|
|
755
872
|
}
|
|
756
873
|
}
|