@artblocks/contracts 1.3.1 → 1.4.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 +11 -10
- package/artifacts/contracts/AdminACLV0RoyaltyRegistry.sol/AdminACLV0RoyaltyRegistry.json +193 -0
- package/artifacts/contracts/AdminACLV0RoyaltyRegistry.sol/IRoyaltyRegistry.json +35 -0
- package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
- package/artifacts/contracts/BytecodeStorageReaders/BytecodeStorageReaderContractV2.sol/BytecodeStorageReaderContractV2.json +2 -2
- package/artifacts/contracts/BytecodeStorageReaders/BytecodeStorageReaderContractV2_Web3Call.sol/BytecodeStorageReaderContractV2_Web3Call.json +2 -2
- package/artifacts/contracts/BytecodeStorageV2Writer.sol/BytecodeStorageV2Writer.json +2 -2
- package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +210 -2
- package/artifacts/contracts/GenArt721CoreV3_Curated.sol/GenArt721CoreV3_Curated.json +235 -20
- package/artifacts/contracts/GenArt721CoreV3_Curated_Flex.sol/GenArt721CoreV3_Curated_Flex.json +3197 -0
- package/artifacts/contracts/GenArt721CoreV3_Explorations_Flex.sol/GenArt721CoreV3_Explorations_Flex.json +3192 -0
- package/artifacts/contracts/OwnedCreate2FactoryV0.sol/OwnedCreate2FactoryV0.json +2 -2
- package/artifacts/contracts/archive/GenArt721CoreV3.sol/GenArt721CoreV3.json +27 -2
- package/artifacts/contracts/archive/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +27 -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/MinterDAExp/MinterDAExpV4.sol/MinterDAExpV4.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/MinterDAExpSettlement/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.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/MinterDALin/MinterDALinV4.sol/MinterDALinV4.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/MinterHolder/MinterHolderV4.sol/MinterHolderV4.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/MinterMerkle/MinterMerkleV5.sol/MinterMerkleV5.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterPolyptych/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +25 -0
- package/artifacts/contracts/archive/minter-suite/Minters/MinterPolyptych/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSEA/MinterSEAV0.sol/MinterSEAV0.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/MinterSetPrice/MinterSetPriceV4.sol/MinterSetPriceV4.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/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
- package/artifacts/contracts/engine/V3/EngineFactoryV0.sol/EngineFactoryV0.json +28 -2
- package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +239 -20
- package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +267 -48
- package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +27 -2
- 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 +27 -2
- package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +25 -0
- package/artifacts/contracts/engine/V3/transfer-hooks/AbstractTransferHook.sol/AbstractTransferHook.json +79 -0
- package/artifacts/contracts/engine/V3/transfer-hooks/OwnerHistoryTransferHook.sol/OwnerHistoryTransferHook.json +315 -0
- package/artifacts/contracts/generator/GenArt721GeneratorV0.sol/GenArt721GeneratorV0.json +2 -2
- package/artifacts/contracts/interfaces/v0.8.x/IClaimMinter.sol/IClaimMinter.json +189 -0
- package/artifacts/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +149 -0
- package/artifacts/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol/IEngineFactoryV0.json +26 -0
- package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +25 -0
- package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +25 -0
- package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +123 -0
- package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +123 -0
- package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.json +25 -0
- package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol/IGenArt721CoreContractV3_Engine_PreV3p2.json +25 -0
- package/artifacts/contracts/interfaces/v0.8.x/IOwnerHistoryTransferHook.sol/IOwnerHistoryTransferHook.json +299 -0
- package/artifacts/contracts/interfaces/v0.8.x/IPMPV0.sol/IPMPV0.json +7 -1
- package/artifacts/contracts/interfaces/v0.8.x/ISRHooks.sol/ISRHooks.json +432 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISeaDropShimForContract.sol/ISeaDropShimForContract.json +0 -13
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterTieredAllowV0.sol/ISharedMinterTieredAllowV0.json +94 -0
- package/artifacts/contracts/interfaces/v0.8.x/ITransferHook.sol/ITransferHook.json +63 -0
- package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageReader.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageWriter.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol/DependencyRegistryStorageLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/ENSLib.sol/ENSLib.json +10 -0
- package/artifacts/contracts/libs/v0.8.x/ENSLib.sol/IUniversalResolver.json +45 -0
- package/artifacts/contracts/libs/v0.8.x/EnumerableSetUint16.sol/EnumerableSetUint16.json +10 -0
- package/artifacts/contracts/libs/v0.8.x/FeistelWalkLib.sol/FeistelWalkLib.json +10 -0
- package/artifacts/contracts/libs/v0.8.x/ImmutableUint16Array.sol/ImmutableUint16Array.json +10 -0
- package/artifacts/contracts/libs/v0.8.x/V3EngineLib.sol/V3EngineLib.json +163 -0
- package/artifacts/contracts/libs/v0.8.x/V3FlexLib.sol/V3FlexLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/V3TransferHookLib.sol/V3TransferHookLib.json +79 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/OnChainAllowlistLib.sol/OnChainAllowlistLib.json +10 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/RAMLib.sol/RAMLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.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 +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterMinPriceMerkleV0.sol/MinterMinPriceMerkleV0.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterMinPriceV0.sol/MinterMinPriceV0.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterRAMV0.sol/MinterRAMV0.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceOnChainAllowV0.sol/MinterSetPriceOnChainAllowV0.json +522 -0
- package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceTieredAllowV1.sol/MinterSetPriceTieredAllowV1.json +715 -0
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSlidingScaleV0.sol/MinterSlidingScaleV0.json +431 -0
- package/artifacts/contracts/minter-suite/Minters/one-off/ClaimMinter.sol/ClaimMinter.json +502 -0
- package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceTieredOnChainAllowV0.sol/MinterSetPriceTieredOnChainAllowV0.json +673 -0
- package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol/MinterSetPriceV5_SingleCore.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/one-off/SeaDropXArtBlocksShim.sol/SeaDropXArtBlocksShim.json +6 -19
- package/artifacts/contracts/mock/BytecodeV2TextCR_DMock.sol/BytecodeV2TextCR_DMock.json +2 -2
- package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
- package/artifacts/contracts/mock/ENSLibMock.sol/ENSLibMock.json +30 -0
- package/artifacts/contracts/mock/EnumerableSetUint16Mock.sol/EnumerableSetUint16Mock.json +146 -0
- package/artifacts/contracts/mock/FeistelWalkLibMock.sol/FeistelWalkLibMock.json +142 -0
- package/artifacts/contracts/mock/ForceSendMock.sol/ForceSendMock.json +2 -2
- package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +2 -2
- package/artifacts/contracts/mock/ImmutableUint16ArrayMock.sol/ImmutableUint16ArrayMock.json +89 -0
- package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +2 -2
- package/artifacts/contracts/mock/MockGenArt721V3Core.sol/MockGenArt721V3Core.json +490 -0
- package/artifacts/contracts/mock/MockPMP.sol/MockPMP.json +523 -0
- package/artifacts/contracts/mock/MockPMPAugmentHook.sol/MockPMPAugmentHook.json +2 -2
- package/artifacts/contracts/mock/MockPMPConfigureHook.sol/MockPMPConfigureHook.json +2 -2
- package/artifacts/contracts/mock/MockTransferHook.sol/MockTransferHook.json +453 -0
- package/artifacts/contracts/mock/MockTransferHookTestHelpers.sol/MockBatchTransferrer.json +39 -0
- package/artifacts/contracts/mock/MockTransferHookTestHelpers.sol/MockForwardingERC721Receiver.json +71 -0
- package/artifacts/contracts/mock/MockTransferHookTestHelpers.sol/MockSpoofingCore.json +94 -0
- package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancyBatchMockShared.sol/IBatchMinter.json +64 -0
- package/artifacts/contracts/mock/ReentrancyBatchMockShared.sol/ReentrancyBatchMockShared.json +113 -0
- package/artifacts/contracts/mock/RelayExecutorTestHelper.sol/MockTarget.json +74 -0
- package/artifacts/contracts/mock/RelayExecutorTestHelper.sol/RelayExecutorPartialRevertsTestHelper.json +138 -0
- package/artifacts/contracts/mock/RelayExecutorTestHelper.sol/RelayExecutorTestHelper.json +119 -0
- 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/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +2 -2
- package/artifacts/contracts/relay/RelayExecutor.sol/RelayExecutor.json +101 -0
- package/artifacts/contracts/relay/RelayExecutorPartialReverts.sol/RelayExecutorPartialReverts.json +120 -0
- package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverrideSplits.sol/GenArt721RoyaltyOverrideSplits.json +263 -0
- package/artifacts/contracts/utils/MintMulticallUtil.sol/IMinterSetPriceV5.json +40 -0
- package/artifacts/contracts/utils/MintMulticallUtil.sol/MintMulticallUtil.json +163 -0
- package/artifacts/contracts/web3call/PMPV0.sol/PMPV0.json +9 -3
- package/artifacts/contracts/web3call/PMPV1.sol/PMPV1.json +648 -0
- package/artifacts/contracts/web3call/augment-hooks/InjectBaseGasFee.sol/InjectBaseGasFee.json +2 -2
- package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeight.sol/InjectBlockHeight.json +83 -0
- package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeightAndArtistProjectOverrides.sol/InjectBlockHeightAndArtistProjectOverrides.json +226 -0
- package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeightAndNumOwnedProjectTokens.sol/InjectBlockHeightAndNumOwnedProjectTokens.json +182 -0
- package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeightProjectInvocationsAndArtistProjectOverrides.sol/InjectBlockHeightProjectInvocationsAndArtistProjectOverrides.json +226 -0
- package/artifacts/contracts/web3call/augment-hooks/InjectBlockTimestamp.sol/InjectBlockTimestamp.json +83 -0
- package/artifacts/contracts/web3call/augment-hooks/InjectBytesPerToken.sol/InjectBytesPerToken.json +358 -0
- package/artifacts/contracts/web3call/augment-hooks/InjectChromieSquiggleFloorPrice.sol/InjectChromieSquiggleFloorPrice.json +2 -2
- package/artifacts/contracts/web3call/augment-hooks/InjectIsNounsDaoMember.sol/InjectIsNounsDaoMember.json +2 -2
- package/artifacts/contracts/web3call/augment-hooks/InjectIsProjectFullyMinted.sol/InjectIsProjectFullyMinted.json +2 -2
- package/artifacts/contracts/web3call/augment-hooks/InjectPolyptychTokenHash.sol/InjectPolyptychTokenHash.json +2 -2
- package/artifacts/contracts/web3call/augment-hooks/InjectTokenHashSeed.sol/InjectTokenHashSeed.json +2 -2
- package/artifacts/contracts/web3call/augment-hooks/InjectTokenOwner.sol/InjectTokenOwner.json +2 -2
- package/artifacts/contracts/web3call/augment-hooks/InjectTokenOwnerEthBalance.sol/InjectTokenOwnerEthBalance.json +2 -2
- package/artifacts/contracts/web3call/augment-hooks/InjectUSDCTotalSupply.sol/InjectUSDCTotalSupply.json +2 -2
- package/artifacts/contracts/web3call/augment-hooks/SRHooks.sol/SRHooks.json +899 -0
- package/artifacts/contracts/web3call/combined-hooks/LiftHooks.sol/IGenArt721V0_Minimal.json +30 -0
- package/artifacts/contracts/web3call/combined-hooks/LiftHooks.sol/IRelic.json +35 -0
- package/artifacts/contracts/web3call/combined-hooks/LiftHooks.sol/LiftHooks.json +256 -0
- package/artifacts/contracts/web3call/configure-hooks/{abstractPMPConfigureHook.sol → AbstractPMPConfigureHook.sol}/AbstractPMPConfigureHook.json +1 -1
- package/artifacts/contracts/web3call/configure-hooks/PMPConfigureLockHook.sol/PMPConfigureLockHook.json +195 -0
- package/contracts/AdminACLV0RoyaltyRegistry.sol +142 -0
- package/contracts/DependencyRegistryV0.sol +143 -13
- package/contracts/GenArt721CoreV3_Curated.sol +1 -1
- package/contracts/GenArt721CoreV3_Curated_Flex.sol +173 -0
- package/contracts/GenArt721CoreV3_Explorations_Flex.sol +159 -0
- package/contracts/engine/V3/EngineFactoryV0.sol +20 -1
- package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +286 -299
- package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +292 -301
- package/contracts/engine/V3/transfer-hooks/AbstractTransferHook.sol +101 -0
- package/contracts/engine/V3/transfer-hooks/OwnerHistoryTransferHook.sol +291 -0
- package/contracts/generator/GenArt721GeneratorV0.sol +145 -47
- package/contracts/helpers/ERC1967ProxyImport.sol +5 -0
- package/contracts/interfaces/v0.8.x/IArtblocksRoyaltyOverride.sol +1 -1
- package/contracts/interfaces/v0.8.x/IClaimMinter.sol +70 -0
- package/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol +95 -0
- package/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol +15 -0
- package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol +21 -2
- package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol +72 -0
- package/contracts/interfaces/v0.8.x/IOwnerHistoryTransferHook.sol +119 -0
- package/contracts/interfaces/v0.8.x/IPMPV0.sol +5 -3
- package/contracts/interfaces/v0.8.x/ISRHooks.sol +229 -0
- package/contracts/interfaces/v0.8.x/ISeaDropShimForContract.sol +0 -6
- package/contracts/interfaces/v0.8.x/ISharedMinterTieredAllowV0.sol +69 -0
- package/contracts/interfaces/v0.8.x/ITransferHook.sol +48 -0
- package/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol +12 -0
- package/contracts/libs/v0.8.x/ENSLib.sol +85 -0
- package/contracts/libs/v0.8.x/EnumerableSetUint16.sol +429 -0
- package/contracts/libs/v0.8.x/FeistelWalkLib.sol +221 -0
- package/contracts/libs/v0.8.x/ImmutableUint16Array.sol +201 -0
- package/contracts/libs/v0.8.x/V3EngineLib.sol +490 -0
- package/contracts/libs/v0.8.x/V3TransferHookLib.sol +251 -0
- package/contracts/libs/v0.8.x/minter-libs/OnChainAllowlistLib.sol +165 -0
- package/contracts/minter-suite/Minters/MinterSetPriceOnChainAllowV0.sol +632 -0
- package/contracts/minter-suite/Minters/MinterSetPriceTieredAllowV1.sol +871 -0
- package/contracts/minter-suite/Minters/MinterSlidingScaleV0.sol +493 -0
- package/contracts/minter-suite/Minters/one-off/ClaimMinter.sol +595 -0
- package/contracts/minter-suite/Minters/one-off/MinterSetPriceTieredOnChainAllowV0.sol +894 -0
- package/contracts/minter-suite/Minters/one-off/SeaDropXArtBlocksShim.sol +59 -41
- package/contracts/mock/ENSLibMock.sol +25 -0
- package/contracts/mock/EnumerableSetUint16Mock.sol +88 -0
- package/contracts/mock/FeistelWalkLibMock.sol +81 -0
- package/contracts/mock/ImmutableUint16ArrayMock.sol +62 -0
- package/contracts/mock/MockGenArt721V3Core.sol +416 -0
- package/contracts/mock/MockPMP.sol +287 -0
- package/contracts/mock/MockTransferHook.sol +160 -0
- package/contracts/mock/MockTransferHookTestHelpers.sol +96 -0
- package/contracts/mock/ReentrancyBatchMockShared.sol +53 -0
- package/contracts/mock/RelayExecutorTestHelper.sol +44 -0
- package/contracts/relay/RelayExecutor.sol +61 -0
- package/contracts/relay/RelayExecutorPartialReverts.sol +79 -0
- package/contracts/royalty-registry/GenArt721RoyaltyOverrideSplits.sol +130 -0
- package/contracts/utils/MintMulticallUtil.sol +103 -0
- package/contracts/web3call/PMPV0.sol +92 -98
- package/contracts/web3call/PMPV1.sol +1204 -0
- package/contracts/web3call/augment-hooks/AbstractPMPAugmentHook.sol +1 -1
- package/contracts/web3call/augment-hooks/InjectBaseGasFee.sol +1 -1
- package/contracts/web3call/augment-hooks/InjectBlockHeight.sol +57 -0
- package/contracts/web3call/augment-hooks/InjectBlockHeightAndArtistProjectOverrides.sol +310 -0
- package/contracts/web3call/augment-hooks/InjectBlockHeightAndNumOwnedProjectTokens.sol +141 -0
- package/contracts/web3call/augment-hooks/InjectBlockHeightProjectInvocationsAndArtistProjectOverrides.sol +326 -0
- package/contracts/web3call/augment-hooks/InjectBlockTimestamp.sol +57 -0
- package/contracts/web3call/augment-hooks/InjectBytesPerToken.sol +279 -0
- package/contracts/web3call/augment-hooks/InjectIsProjectFullyMinted.sol +1 -1
- package/contracts/web3call/augment-hooks/InjectTokenHashSeed.sol +1 -1
- package/contracts/web3call/augment-hooks/InjectTokenOwner.sol +1 -1
- package/contracts/web3call/augment-hooks/InjectTokenOwnerEthBalance.sol +1 -1
- package/contracts/web3call/augment-hooks/SRHooks.sol +1722 -0
- package/contracts/web3call/combined-hooks/LiftHooks.sol +304 -0
- package/contracts/web3call/configure-hooks/{abstractPMPConfigureHook.sol → AbstractPMPConfigureHook.sol} +1 -1
- package/contracts/web3call/configure-hooks/PMPConfigureLockHook.sol +107 -0
- package/package.json +40 -25
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
pragma solidity 0.8.22;
|
|
4
|
+
|
|
5
|
+
import "./interfaces/v0.8.x/IAdminACLV0.sol";
|
|
6
|
+
import {IAdminACLV0_Extended} from "./interfaces/v0.8.x/IAdminACLV0_Extended.sol";
|
|
7
|
+
import "@openzeppelin-4.7/contracts/access/Ownable.sol";
|
|
8
|
+
import "@openzeppelin-4.7/contracts/utils/introspection/ERC165.sol";
|
|
9
|
+
|
|
10
|
+
interface IRoyaltyRegistry {
|
|
11
|
+
function setRoyaltyLookupAddress(
|
|
12
|
+
address tokenAddress,
|
|
13
|
+
address royaltyLookupAddress
|
|
14
|
+
) external returns (bool);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @title Admin ACL contract, V0, with Royalty Registry support.
|
|
19
|
+
* @author Art Blocks Inc.
|
|
20
|
+
* @notice Privileged Roles and Ownership:
|
|
21
|
+
* This contract has a single superAdmin that passes all ACL checks. All checks
|
|
22
|
+
* for any other address will return false.
|
|
23
|
+
* The superAdmin can be changed by the current superAdmin.
|
|
24
|
+
* Extends AdminACLV0 with a single additional function to call
|
|
25
|
+
* setRoyaltyLookupAddress on a Royalty Registry contract. This is needed
|
|
26
|
+
* because V3 core contracts return this AdminACL as admin(), and the
|
|
27
|
+
* Royalty Registry's overrideAllowed check requires msg.sender == admin().
|
|
28
|
+
* Care must be taken to ensure that the admin ACL contract is secure behind a
|
|
29
|
+
* multi-sig or other secure access control mechanism.
|
|
30
|
+
*/
|
|
31
|
+
contract AdminACLV0RoyaltyRegistry is
|
|
32
|
+
IAdminACLV0,
|
|
33
|
+
IAdminACLV0_Extended,
|
|
34
|
+
ERC165
|
|
35
|
+
{
|
|
36
|
+
string public AdminACLType = "AdminACLV0RoyaltyRegistry";
|
|
37
|
+
|
|
38
|
+
/// superAdmin is the only address that passes any and all ACL checks
|
|
39
|
+
address public superAdmin;
|
|
40
|
+
|
|
41
|
+
constructor(address superAdmin_) {
|
|
42
|
+
superAdmin = superAdmin_;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @notice Allows superAdmin change the superAdmin address.
|
|
47
|
+
* @param _newSuperAdmin The new superAdmin address.
|
|
48
|
+
* @param _genArt721CoreAddressesToUpdate Array of genArt721Core
|
|
49
|
+
* addresses to update to the new superAdmin, for indexing purposes only.
|
|
50
|
+
* @dev this function is gated to only superAdmin address.
|
|
51
|
+
*/
|
|
52
|
+
function changeSuperAdmin(
|
|
53
|
+
address _newSuperAdmin,
|
|
54
|
+
address[] calldata _genArt721CoreAddressesToUpdate
|
|
55
|
+
) external {
|
|
56
|
+
require(msg.sender == superAdmin, "Only superAdmin");
|
|
57
|
+
address previousSuperAdmin = superAdmin;
|
|
58
|
+
superAdmin = _newSuperAdmin;
|
|
59
|
+
emit SuperAdminTransferred(
|
|
60
|
+
previousSuperAdmin,
|
|
61
|
+
_newSuperAdmin,
|
|
62
|
+
_genArt721CoreAddressesToUpdate
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Calls transferOwnership on other contract from this contract.
|
|
68
|
+
* This is useful for updating to a new AdminACL contract.
|
|
69
|
+
* @dev this function is gated to only superAdmin address.
|
|
70
|
+
* @dev This implementation requires that the new AdminACL contract
|
|
71
|
+
* broadcasts support of IAdminACLV0 via ERC165 interface detection.
|
|
72
|
+
*/
|
|
73
|
+
function transferOwnershipOn(
|
|
74
|
+
address _contract,
|
|
75
|
+
address _newAdminACL
|
|
76
|
+
) external {
|
|
77
|
+
require(msg.sender == superAdmin, "Only superAdmin");
|
|
78
|
+
require(
|
|
79
|
+
ERC165(_newAdminACL).supportsInterface(
|
|
80
|
+
type(IAdminACLV0).interfaceId
|
|
81
|
+
),
|
|
82
|
+
"AdminACLV0RoyaltyRegistry: new admin ACL does not support IAdminACLV0"
|
|
83
|
+
);
|
|
84
|
+
Ownable(_contract).transferOwnership(_newAdminACL);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @notice Calls renounceOwnership on other contract from this contract.
|
|
89
|
+
* @dev this function is gated to only superAdmin address.
|
|
90
|
+
*/
|
|
91
|
+
function renounceOwnershipOn(address _contract) external {
|
|
92
|
+
require(msg.sender == superAdmin, "Only superAdmin");
|
|
93
|
+
Ownable(_contract).renounceOwnership();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* @notice Checks if sender `_sender` is allowed to call function with selector
|
|
98
|
+
* `_selector` on contract `_contract`. Returns true if sender is superAdmin.
|
|
99
|
+
*/
|
|
100
|
+
function allowed(
|
|
101
|
+
address _sender,
|
|
102
|
+
address /*_contract*/,
|
|
103
|
+
bytes4 /*_selector*/
|
|
104
|
+
) external view returns (bool) {
|
|
105
|
+
return superAdmin == _sender;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* @notice Calls setRoyaltyLookupAddress on a Royalty Registry contract.
|
|
110
|
+
* This is necessary because V3 core contracts return this AdminACL's
|
|
111
|
+
* address from admin(), and the Royalty Registry requires
|
|
112
|
+
* msg.sender == admin() for override authorization.
|
|
113
|
+
* @param _royaltyRegistry Address of the Royalty Registry contract.
|
|
114
|
+
* @param _tokenAddress Core contract address to configure.
|
|
115
|
+
* @param _royaltyLookupAddress Override address for royalty lookups
|
|
116
|
+
* (typically a royalty override shim). Set to address(0) to clear.
|
|
117
|
+
* @dev this function is gated to only superAdmin address.
|
|
118
|
+
*/
|
|
119
|
+
function setRoyaltyLookupAddressOn(
|
|
120
|
+
address _royaltyRegistry,
|
|
121
|
+
address _tokenAddress,
|
|
122
|
+
address _royaltyLookupAddress
|
|
123
|
+
) external {
|
|
124
|
+
require(msg.sender == superAdmin, "Only superAdmin");
|
|
125
|
+
IRoyaltyRegistry(_royaltyRegistry).setRoyaltyLookupAddress(
|
|
126
|
+
_tokenAddress,
|
|
127
|
+
_royaltyLookupAddress
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* @inheritdoc ERC165
|
|
133
|
+
*/
|
|
134
|
+
function supportsInterface(
|
|
135
|
+
bytes4 interfaceId
|
|
136
|
+
) public view virtual override(ERC165) returns (bool) {
|
|
137
|
+
return
|
|
138
|
+
interfaceId == type(IAdminACLV0).interfaceId ||
|
|
139
|
+
interfaceId == type(IAdminACLV0_Extended).interfaceId ||
|
|
140
|
+
super.supportsInterface(interfaceId);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -439,6 +439,98 @@ contract DependencyRegistryV0 is
|
|
|
439
439
|
);
|
|
440
440
|
}
|
|
441
441
|
|
|
442
|
+
/**
|
|
443
|
+
* @notice Updates the canvas tag requirement for dependency `dependencyNameAndVersion`.
|
|
444
|
+
* @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
|
|
445
|
+
* @param canvasTagType Whether generated HTML requires a canvas tag, and where it belongs
|
|
446
|
+
* relative to the project script.
|
|
447
|
+
*/
|
|
448
|
+
function updateDependencyCanvasTagType(
|
|
449
|
+
bytes32 dependencyNameAndVersion,
|
|
450
|
+
IDependencyRegistryV0.CanvasTagType canvasTagType
|
|
451
|
+
) external {
|
|
452
|
+
_onlyAdminACL(this.updateDependencyCanvasTagType.selector);
|
|
453
|
+
_onlyExistingDependency(dependencyNameAndVersion);
|
|
454
|
+
|
|
455
|
+
DependencyRegistryStorageLib
|
|
456
|
+
.s()
|
|
457
|
+
.dependencyRecords[dependencyNameAndVersion]
|
|
458
|
+
.canvasTagType = canvasTagType;
|
|
459
|
+
|
|
460
|
+
emit DependencyCanvasTagTypeUpdated(
|
|
461
|
+
dependencyNameAndVersion,
|
|
462
|
+
canvasTagType
|
|
463
|
+
);
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* @notice Updates whether dependency `dependencyNameAndVersion` must be loaded as an ES module.
|
|
468
|
+
* @dev When true, the generator exposes the dependency to project scripts via an import map
|
|
469
|
+
* keyed on the dependency's name, rather than loading it with a plain `<script src>` tag.
|
|
470
|
+
* @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
|
|
471
|
+
* @param loadAsModule Whether the dependency's script is an ES module.
|
|
472
|
+
*/
|
|
473
|
+
function updateDependencyLoadAsModule(
|
|
474
|
+
bytes32 dependencyNameAndVersion,
|
|
475
|
+
bool loadAsModule
|
|
476
|
+
) external {
|
|
477
|
+
_onlyAdminACL(this.updateDependencyLoadAsModule.selector);
|
|
478
|
+
_onlyExistingDependency(dependencyNameAndVersion);
|
|
479
|
+
|
|
480
|
+
DependencyRegistryStorageLib
|
|
481
|
+
.s()
|
|
482
|
+
.dependencyRecords[dependencyNameAndVersion]
|
|
483
|
+
.loadAsModule = loadAsModule;
|
|
484
|
+
|
|
485
|
+
emit DependencyLoadAsModuleUpdated(
|
|
486
|
+
dependencyNameAndVersion,
|
|
487
|
+
loadAsModule
|
|
488
|
+
);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
/**
|
|
492
|
+
* @notice Updates how project scripts using `dependencyNameAndVersion` are injected into
|
|
493
|
+
* generated HTML.
|
|
494
|
+
* @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
|
|
495
|
+
* @param projectScriptTagType How the project script must be wrapped.
|
|
496
|
+
* @param projectScriptSpecialType `type` attribute to use, required to be non-empty when
|
|
497
|
+
* `projectScriptTagType` is SpecialType and required to be empty otherwise.
|
|
498
|
+
*/
|
|
499
|
+
function updateDependencyProjectScriptTagType(
|
|
500
|
+
bytes32 dependencyNameAndVersion,
|
|
501
|
+
IDependencyRegistryV0.ProjectScriptTagType projectScriptTagType,
|
|
502
|
+
string memory projectScriptSpecialType
|
|
503
|
+
) external {
|
|
504
|
+
_onlyAdminACL(this.updateDependencyProjectScriptTagType.selector);
|
|
505
|
+
_onlyExistingDependency(dependencyNameAndVersion);
|
|
506
|
+
// @dev keeps the special type and the tag type from drifting out of sync, which would
|
|
507
|
+
// otherwise silently produce a script tag with a missing or ignored `type` attribute.
|
|
508
|
+
if (
|
|
509
|
+
projectScriptTagType ==
|
|
510
|
+
IDependencyRegistryV0.ProjectScriptTagType.SpecialType
|
|
511
|
+
) {
|
|
512
|
+
_onlyNonEmptyString(projectScriptSpecialType);
|
|
513
|
+
} else {
|
|
514
|
+
require(
|
|
515
|
+
bytes(projectScriptSpecialType).length == 0,
|
|
516
|
+
"Special type only for SpecialType"
|
|
517
|
+
);
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
DependencyRegistryStorageLib.Dependency
|
|
521
|
+
storage dependency = DependencyRegistryStorageLib
|
|
522
|
+
.s()
|
|
523
|
+
.dependencyRecords[dependencyNameAndVersion];
|
|
524
|
+
dependency.projectScriptTagType = projectScriptTagType;
|
|
525
|
+
dependency.projectScriptSpecialType = projectScriptSpecialType;
|
|
526
|
+
|
|
527
|
+
emit DependencyProjectScriptTagTypeUpdated(
|
|
528
|
+
dependencyNameAndVersion,
|
|
529
|
+
projectScriptTagType,
|
|
530
|
+
projectScriptSpecialType
|
|
531
|
+
);
|
|
532
|
+
}
|
|
533
|
+
|
|
442
534
|
/**
|
|
443
535
|
* @notice Adds a new CDN url to `dependencyNameAndVersion`.
|
|
444
536
|
* @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
|
|
@@ -1377,6 +1469,46 @@ contract DependencyRegistryV0 is
|
|
|
1377
1469
|
/**
|
|
1378
1470
|
* @notice Returns details for a given dependency type `dependencyNameAndVersion`.
|
|
1379
1471
|
* @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
|
|
1472
|
+
* @return dependencyDetails Details for the given dependency.
|
|
1473
|
+
*/
|
|
1474
|
+
function getDependencyDetailsV2(
|
|
1475
|
+
bytes32 dependencyNameAndVersion
|
|
1476
|
+
)
|
|
1477
|
+
public
|
|
1478
|
+
view
|
|
1479
|
+
returns (
|
|
1480
|
+
IDependencyRegistryV0.DependencyDetails memory dependencyDetails
|
|
1481
|
+
)
|
|
1482
|
+
{
|
|
1483
|
+
DependencyRegistryStorageLib.Dependency
|
|
1484
|
+
storage dependency = DependencyRegistryStorageLib
|
|
1485
|
+
.s()
|
|
1486
|
+
.dependencyRecords[dependencyNameAndVersion];
|
|
1487
|
+
|
|
1488
|
+
return
|
|
1489
|
+
IDependencyRegistryV0.DependencyDetails({
|
|
1490
|
+
nameAndVersion: dependencyNameAndVersion.toString(),
|
|
1491
|
+
licenseType: dependency.licenseType.toString(),
|
|
1492
|
+
preferredCDN: dependency.preferredCDN,
|
|
1493
|
+
additionalCDNCount: dependency.additionalCDNCount,
|
|
1494
|
+
preferredRepository: dependency.preferredRepository,
|
|
1495
|
+
additionalRepositoryCount: dependency.additionalRepositoryCount,
|
|
1496
|
+
dependencyWebsite: dependency.website,
|
|
1497
|
+
availableOnChain: dependency.scriptCount > 0,
|
|
1498
|
+
scriptCount: dependency.scriptCount,
|
|
1499
|
+
loadAsModule: dependency.loadAsModule,
|
|
1500
|
+
canvasTagType: dependency.canvasTagType,
|
|
1501
|
+
projectScriptTagType: dependency.projectScriptTagType,
|
|
1502
|
+
projectScriptSpecialType: dependency.projectScriptSpecialType
|
|
1503
|
+
});
|
|
1504
|
+
}
|
|
1505
|
+
|
|
1506
|
+
/**
|
|
1507
|
+
* @notice Returns details for a given dependency type `dependencyNameAndVersion`.
|
|
1508
|
+
* @dev Superseded by `getDependencyDetailsV2`, which additionally returns the fields
|
|
1509
|
+
* prescribing how the generator renders projects using this dependency. Retained with an
|
|
1510
|
+
* unchanged signature so that existing off-chain consumers continue to decode correctly.
|
|
1511
|
+
* @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
|
|
1380
1512
|
* @return nameAndVersion String representation of `dependencyNameAndVersion`.
|
|
1381
1513
|
* (e.g. "p5js(atSymbol)1.0.0")
|
|
1382
1514
|
* @return licenseType License type for dependency
|
|
@@ -1405,21 +1537,19 @@ contract DependencyRegistryV0 is
|
|
|
1405
1537
|
uint24 scriptCount
|
|
1406
1538
|
)
|
|
1407
1539
|
{
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
.s()
|
|
1411
|
-
.dependencyRecords[dependencyNameAndVersion];
|
|
1540
|
+
IDependencyRegistryV0.DependencyDetails
|
|
1541
|
+
memory details = getDependencyDetailsV2(dependencyNameAndVersion);
|
|
1412
1542
|
|
|
1413
1543
|
return (
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1544
|
+
details.nameAndVersion,
|
|
1545
|
+
details.licenseType,
|
|
1546
|
+
details.preferredCDN,
|
|
1547
|
+
details.additionalCDNCount,
|
|
1548
|
+
details.preferredRepository,
|
|
1549
|
+
details.additionalRepositoryCount,
|
|
1550
|
+
details.dependencyWebsite,
|
|
1551
|
+
details.availableOnChain,
|
|
1552
|
+
details.scriptCount
|
|
1423
1553
|
);
|
|
1424
1554
|
}
|
|
1425
1555
|
|
|
@@ -24,7 +24,7 @@ contract GenArt721CoreV3_Curated is GenArt721CoreV3_Engine {
|
|
|
24
24
|
|
|
25
25
|
/// override patch version of this core contract
|
|
26
26
|
// @dev this is a constant value that is used to override the inherited core version CORE_VERSION
|
|
27
|
-
bytes32 private constant _CORE_VERSION_OVERRIDE = "v3.2
|
|
27
|
+
bytes32 private constant _CORE_VERSION_OVERRIDE = "v3.3.2";
|
|
28
28
|
|
|
29
29
|
// @dev overridden core version is returned instead of the inherited core version
|
|
30
30
|
function coreVersion() external pure override returns (string memory) {
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
pragma solidity 0.8.22;
|
|
3
|
+
|
|
4
|
+
// Created By: Art Blocks Inc.
|
|
5
|
+
|
|
6
|
+
import {GenArt721CoreV3_Engine_Flex} from "./engine/V3/GenArt721CoreV3_Engine_Flex.sol";
|
|
7
|
+
import {EngineConfiguration} from "./interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol";
|
|
8
|
+
|
|
9
|
+
import "./libs/v0.8.x/Bytes32Strings.sol";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @title Art Blocks Curated ERC-721 core contract, V3.2 Flex (ONCHAIN only)
|
|
13
|
+
* @author Art Blocks Inc.
|
|
14
|
+
* @notice This contract derives from the Art Blocks Engine Flex contract and adds
|
|
15
|
+
* some functionality to support curation of projects by Art Blocks.
|
|
16
|
+
* It also performs initialization of the contract in the constructor, because
|
|
17
|
+
* the contract is not intended to use a clone proxy pattern, and is intended
|
|
18
|
+
* to be deployed without any required follow-on calls to initialize.
|
|
19
|
+
* Constraints are added to the contract to only allow ONCHAIN dependencies,
|
|
20
|
+
* ensuring that the Art Blocks Curated projects are only dependent on onchain
|
|
21
|
+
* data, consistent with previous Art Blocks Curated contracts.
|
|
22
|
+
* ----------------------------------------------------------------------------
|
|
23
|
+
* See the Art Blocks Engine Flex contract for additional applicable documentation.
|
|
24
|
+
*/
|
|
25
|
+
contract GenArt721CoreV3_Curated_Flex is GenArt721CoreV3_Engine_Flex {
|
|
26
|
+
using Bytes32Strings for bytes32;
|
|
27
|
+
|
|
28
|
+
/// override patch version of this core contract
|
|
29
|
+
// @dev this is a constant value that is used to override the inherited core version CORE_VERSION
|
|
30
|
+
bytes32 private constant _CORE_VERSION_OVERRIDE = "v3.3.3";
|
|
31
|
+
|
|
32
|
+
// @dev overridden core version is returned instead of the inherited core version
|
|
33
|
+
function coreVersion() external pure override returns (string memory) {
|
|
34
|
+
return _CORE_VERSION_OVERRIDE.toString();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/// metadata pointer to the previous associated Flagship Artblocks core contracts
|
|
38
|
+
// @dev not defined as constant because constant address arrays are not yet implemented in Solidity
|
|
39
|
+
address[] public PREVIOUS_ART_BLOCKS_CONTRACTS = [
|
|
40
|
+
0x059EDD72Cd353dF5106D2B9cC5ab83a52287aC3a,
|
|
41
|
+
0xa7d8d9ef8D8Ce8992Df33D8b8CF4Aebabd5bD270,
|
|
42
|
+
0x99a9B7c1116f9ceEB1652de04d5969CcE509B069,
|
|
43
|
+
0xAB0000000000aa06f89B268D604a9c1C41524Ac6
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
/// Curation registry for Flagship projects, managed by Art Blocks
|
|
47
|
+
address public artblocksCurationRegistryAddress;
|
|
48
|
+
|
|
49
|
+
bool public constant IS_FLAGSHIP = true;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @notice Construct a new curated Art Blocks ERC-721 core contract.
|
|
53
|
+
* Performs all contract initialization in the constructor.
|
|
54
|
+
* @param engineConfiguration Configuration for the engine contract.
|
|
55
|
+
* note: parameter `engineConfiguration.newSuperAdminAddress` is not used or operated on in this contract.
|
|
56
|
+
* @param adminACLContract_ Address of the admin ACL contract.
|
|
57
|
+
* @param defaultBaseURIHost Default base URI host for token URIs, e.g. "https://token.artblocks.io/" for mainnet
|
|
58
|
+
* @param bytecodeStorageReaderContract_ Address of the bytecode storage reader contract to be used by this
|
|
59
|
+
* contract.
|
|
60
|
+
*/
|
|
61
|
+
constructor(
|
|
62
|
+
EngineConfiguration memory engineConfiguration,
|
|
63
|
+
address adminACLContract_,
|
|
64
|
+
string memory defaultBaseURIHost,
|
|
65
|
+
address bytecodeStorageReaderContract_
|
|
66
|
+
) GenArt721CoreV3_Engine_Flex() {
|
|
67
|
+
// input validation generally performed by the engine factory
|
|
68
|
+
_onlyNonZeroAddress(engineConfiguration.renderProviderAddress);
|
|
69
|
+
_onlyNonZeroAddress(engineConfiguration.randomizerContract);
|
|
70
|
+
_onlyNonZeroAddress(adminACLContract_);
|
|
71
|
+
_onlyNonZeroAddress(bytecodeStorageReaderContract_);
|
|
72
|
+
require(
|
|
73
|
+
bytes(defaultBaseURIHost).length > 0,
|
|
74
|
+
"GenArt721CoreV3_Curated_Flex: defaultBaseURIHost must be non-empty"
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
// input validation specific to the curated contract
|
|
78
|
+
require(
|
|
79
|
+
!engineConfiguration.autoApproveArtistSplitProposals,
|
|
80
|
+
"GenArt721CoreV3_Curated_Flex: autoApproveArtistSplitProposals must be false"
|
|
81
|
+
);
|
|
82
|
+
// @dev artblocks is listed as render provider, no party should be platform provider
|
|
83
|
+
require(
|
|
84
|
+
engineConfiguration.nullPlatformProvider,
|
|
85
|
+
"GenArt721CoreV3_Curated_Flex: nullPlatformProvider must be true"
|
|
86
|
+
);
|
|
87
|
+
require(
|
|
88
|
+
!engineConfiguration.allowArtistProjectActivation,
|
|
89
|
+
"GenArt721CoreV3_Curated_Flex: allowArtistProjectActivation must be false"
|
|
90
|
+
);
|
|
91
|
+
// @dev previous artblocks contracts exists, so only starting project ID > 0
|
|
92
|
+
require(
|
|
93
|
+
engineConfiguration.startingProjectId > 0,
|
|
94
|
+
"GenArt721CoreV3_Curated_Flex: startingProjectId must be greater than 0"
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
// initialize the contract
|
|
98
|
+
_initialize({
|
|
99
|
+
engineConfiguration: engineConfiguration,
|
|
100
|
+
adminACLContract_: adminACLContract_,
|
|
101
|
+
defaultBaseURIHost: defaultBaseURIHost,
|
|
102
|
+
bytecodeStorageReaderContract_: bytecodeStorageReaderContract_
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
// override default base URI to be curated format instead of Engine (no address required for curated)
|
|
106
|
+
_updateDefaultBaseURI(defaultBaseURIHost);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* @notice Override of the Engine contract's initialize function.
|
|
111
|
+
* Immediately reverts, as initialization of this Curated contract is performed in the constructor.
|
|
112
|
+
*/
|
|
113
|
+
function initialize(
|
|
114
|
+
EngineConfiguration memory /*engineConfiguration*/,
|
|
115
|
+
address /*adminACLContract_*/,
|
|
116
|
+
string memory /*defaultBaseURIHost*/,
|
|
117
|
+
address /*bytecodeStorageReaderContract_*/
|
|
118
|
+
) external pure override {
|
|
119
|
+
// revert - initialization for this contract is performed in the constructor
|
|
120
|
+
// @dev note that the initialize function would revert without this override, but it is included for clarity
|
|
121
|
+
revert(
|
|
122
|
+
"GenArt721CoreV3_Curated_Flex: contract initialized in constructor"
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* @notice Updates reference to Art Blocks Curation Registry contract.
|
|
128
|
+
* @param _artblocksCurationRegistryAddress Address of Art Blocks Curation Registry contract.
|
|
129
|
+
*/
|
|
130
|
+
function updateArtblocksCurationRegistryAddress(
|
|
131
|
+
address _artblocksCurationRegistryAddress
|
|
132
|
+
) external {
|
|
133
|
+
_onlyAdminACL(this.updateArtblocksCurationRegistryAddress.selector);
|
|
134
|
+
artblocksCurationRegistryAddress = _artblocksCurationRegistryAddress;
|
|
135
|
+
emit ArtBlocksCurationRegistryContractUpdated(
|
|
136
|
+
_artblocksCurationRegistryAddress
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function updateProjectExternalAssetDependency(
|
|
141
|
+
uint256 _projectId,
|
|
142
|
+
uint256 _index,
|
|
143
|
+
string memory _cidOrData,
|
|
144
|
+
ExternalAssetDependencyType _dependencyType
|
|
145
|
+
) public override {
|
|
146
|
+
require(
|
|
147
|
+
_dependencyType == ExternalAssetDependencyType.ONCHAIN,
|
|
148
|
+
"GenArt721CoreV3_Curated_Flex: Curated dependency type must be ONCHAIN"
|
|
149
|
+
);
|
|
150
|
+
super.updateProjectExternalAssetDependency({
|
|
151
|
+
_projectId: _projectId,
|
|
152
|
+
_index: _index,
|
|
153
|
+
_cidOrData: _cidOrData,
|
|
154
|
+
_dependencyType: _dependencyType
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function addProjectExternalAssetDependency(
|
|
159
|
+
uint256 _projectId,
|
|
160
|
+
string memory _cidOrData,
|
|
161
|
+
ExternalAssetDependencyType _dependencyType
|
|
162
|
+
) public override {
|
|
163
|
+
require(
|
|
164
|
+
_dependencyType == ExternalAssetDependencyType.ONCHAIN,
|
|
165
|
+
"GenArt721CoreV3_Curated_Flex: Curated dependency type must be ONCHAIN"
|
|
166
|
+
);
|
|
167
|
+
super.addProjectExternalAssetDependency({
|
|
168
|
+
_projectId: _projectId,
|
|
169
|
+
_cidOrData: _cidOrData,
|
|
170
|
+
_dependencyType: _dependencyType
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
pragma solidity 0.8.22;
|
|
3
|
+
|
|
4
|
+
// Created By: Art Blocks Inc.
|
|
5
|
+
|
|
6
|
+
import {GenArt721CoreV3_Engine_Flex} from "./engine/V3/GenArt721CoreV3_Engine_Flex.sol";
|
|
7
|
+
import {EngineConfiguration} from "./interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol";
|
|
8
|
+
|
|
9
|
+
import "./libs/v0.8.x/Bytes32Strings.sol";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @title Art Blocks Explorations ERC-721 core contract, V3.2 Flex (ONCHAIN only)
|
|
13
|
+
* @author Art Blocks Inc.
|
|
14
|
+
* @notice This contract derives from the Art Blocks Engine Flex contract and adds
|
|
15
|
+
* some functionality to support curation of projects by Art Blocks.
|
|
16
|
+
* It also performs initialization of the contract in the constructor, because
|
|
17
|
+
* the contract is not intended to use a clone proxy pattern, and is intended
|
|
18
|
+
* to be deployed without any required follow-on calls to initialize.
|
|
19
|
+
* Constraints are added to the contract to only allow ONCHAIN dependencies.
|
|
20
|
+
* ----------------------------------------------------------------------------
|
|
21
|
+
* See the Art Blocks Engine Flex contract for additional applicable documentation.
|
|
22
|
+
*/
|
|
23
|
+
contract GenArt721CoreV3_Explorations_Flex is GenArt721CoreV3_Engine_Flex {
|
|
24
|
+
using Bytes32Strings for bytes32;
|
|
25
|
+
|
|
26
|
+
/// override patch version of this core contract
|
|
27
|
+
// @dev this is a constant value that is used to override the inherited core version CORE_VERSION
|
|
28
|
+
bytes32 private constant _CORE_VERSION_OVERRIDE = "v3.3.4";
|
|
29
|
+
|
|
30
|
+
// @dev overridden core version is returned instead of the inherited core version
|
|
31
|
+
function coreVersion() external pure override returns (string memory) {
|
|
32
|
+
return _CORE_VERSION_OVERRIDE.toString();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/// metadata pointer to the previous associated Art Blocks Explorations core contracts
|
|
36
|
+
// @dev not defined as constant because constant address arrays are not yet implemented in Solidity
|
|
37
|
+
address[] public PREVIOUS_ART_BLOCKS_EXPLORATIONS_CONTRACTS = [
|
|
38
|
+
0x942BC2d3e7a589FE5bd4A5C6eF9727DFd82F5C8a
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
/// Curation registry for Flagship projects, managed by Art Blocks
|
|
42
|
+
address public artblocksCurationRegistryAddress;
|
|
43
|
+
|
|
44
|
+
bool public constant IS_FLAGSHIP = true;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @notice Construct a new Explorations Art Blocks ERC-721 core contract.
|
|
48
|
+
* Performs all contract initialization in the constructor.
|
|
49
|
+
* @param engineConfiguration Configuration for the engine contract.
|
|
50
|
+
* note: parameter `engineConfiguration.newSuperAdminAddress` is not used or operated on in this contract.
|
|
51
|
+
* @param adminACLContract_ Address of the admin ACL contract.
|
|
52
|
+
* @param bytecodeStorageReaderContract_ Address of the bytecode storage reader contract to be used by this
|
|
53
|
+
* contract.
|
|
54
|
+
*/
|
|
55
|
+
constructor(
|
|
56
|
+
EngineConfiguration memory engineConfiguration,
|
|
57
|
+
address adminACLContract_,
|
|
58
|
+
address bytecodeStorageReaderContract_
|
|
59
|
+
) GenArt721CoreV3_Engine_Flex() {
|
|
60
|
+
// input validation generally performed by the engine factory
|
|
61
|
+
_onlyNonZeroAddress(engineConfiguration.renderProviderAddress);
|
|
62
|
+
_onlyNonZeroAddress(engineConfiguration.randomizerContract);
|
|
63
|
+
_onlyNonZeroAddress(adminACLContract_);
|
|
64
|
+
_onlyNonZeroAddress(bytecodeStorageReaderContract_);
|
|
65
|
+
|
|
66
|
+
// input validation specific to the Explorations contract
|
|
67
|
+
require(
|
|
68
|
+
!engineConfiguration.autoApproveArtistSplitProposals,
|
|
69
|
+
"GenArt721CoreV3_Explorations_Flex: autoApproveArtistSplitProposals must be false"
|
|
70
|
+
);
|
|
71
|
+
// @dev artblocks is listed as render provider, no party should be platform provider
|
|
72
|
+
require(
|
|
73
|
+
engineConfiguration.nullPlatformProvider,
|
|
74
|
+
"GenArt721CoreV3_Explorations_Flex: nullPlatformProvider must be true"
|
|
75
|
+
);
|
|
76
|
+
require(
|
|
77
|
+
!engineConfiguration.allowArtistProjectActivation,
|
|
78
|
+
"GenArt721CoreV3_Explorations_Flex: allowArtistProjectActivation must be false"
|
|
79
|
+
);
|
|
80
|
+
// @dev previous artblocks contracts exists, so only starting project ID > 0
|
|
81
|
+
require(
|
|
82
|
+
engineConfiguration.startingProjectId > 0,
|
|
83
|
+
"GenArt721CoreV3_Explorations_Flex: startingProjectId must be greater than 0"
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
// initialize the contract
|
|
87
|
+
_initialize({
|
|
88
|
+
engineConfiguration: engineConfiguration,
|
|
89
|
+
adminACLContract_: adminACLContract_,
|
|
90
|
+
defaultBaseURIHost: "https://token.artblocks.io/", // function will append contract address
|
|
91
|
+
bytecodeStorageReaderContract_: bytecodeStorageReaderContract_
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* @notice Override of the Engine contract's initialize function.
|
|
97
|
+
* Immediately reverts, as initialization of this Explorations contract is performed in the constructor.
|
|
98
|
+
*/
|
|
99
|
+
function initialize(
|
|
100
|
+
EngineConfiguration memory /*engineConfiguration*/,
|
|
101
|
+
address /*adminACLContract_*/,
|
|
102
|
+
string memory /*defaultBaseURIHost*/,
|
|
103
|
+
address /*bytecodeStorageReaderContract_*/
|
|
104
|
+
) external pure override {
|
|
105
|
+
// revert - initialization for this contract is performed in the constructor
|
|
106
|
+
// @dev note that the initialize function would revert without this override, but it is included for clarity
|
|
107
|
+
revert(
|
|
108
|
+
"GenArt721CoreV3_Explorations_Flex: contract initialized in constructor"
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* @notice Updates reference to Art Blocks Curation Registry contract.
|
|
114
|
+
* @param _artblocksCurationRegistryAddress Address of Art Blocks Curation Registry contract.
|
|
115
|
+
*/
|
|
116
|
+
function updateArtblocksCurationRegistryAddress(
|
|
117
|
+
address _artblocksCurationRegistryAddress
|
|
118
|
+
) external {
|
|
119
|
+
_onlyAdminACL(this.updateArtblocksCurationRegistryAddress.selector);
|
|
120
|
+
artblocksCurationRegistryAddress = _artblocksCurationRegistryAddress;
|
|
121
|
+
emit ArtBlocksCurationRegistryContractUpdated(
|
|
122
|
+
_artblocksCurationRegistryAddress
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function updateProjectExternalAssetDependency(
|
|
127
|
+
uint256 _projectId,
|
|
128
|
+
uint256 _index,
|
|
129
|
+
string memory _cidOrData,
|
|
130
|
+
ExternalAssetDependencyType _dependencyType
|
|
131
|
+
) public override {
|
|
132
|
+
require(
|
|
133
|
+
_dependencyType == ExternalAssetDependencyType.ONCHAIN,
|
|
134
|
+
"GenArt721CoreV3_Explorations_Flex: Dependency type must be ONCHAIN"
|
|
135
|
+
);
|
|
136
|
+
super.updateProjectExternalAssetDependency({
|
|
137
|
+
_projectId: _projectId,
|
|
138
|
+
_index: _index,
|
|
139
|
+
_cidOrData: _cidOrData,
|
|
140
|
+
_dependencyType: _dependencyType
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function addProjectExternalAssetDependency(
|
|
145
|
+
uint256 _projectId,
|
|
146
|
+
string memory _cidOrData,
|
|
147
|
+
ExternalAssetDependencyType _dependencyType
|
|
148
|
+
) public override {
|
|
149
|
+
require(
|
|
150
|
+
_dependencyType == ExternalAssetDependencyType.ONCHAIN,
|
|
151
|
+
"GenArt721CoreV3_Explorations_Flex: Dependency type must be ONCHAIN"
|
|
152
|
+
);
|
|
153
|
+
super.addProjectExternalAssetDependency({
|
|
154
|
+
_projectId: _projectId,
|
|
155
|
+
_cidOrData: _cidOrData,
|
|
156
|
+
_dependencyType: _dependencyType
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|