@artblocks/contracts 1.0.1 → 1.0.3
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 +67 -154
- 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 +22 -4
- package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +42 -5
- 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/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/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/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/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/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
- package/artifacts/contracts/engine/{GenArt721CoreV2_ENGINE_FLEX.sol → V2/GenArt721CoreV2_ENGINE_FLEX.sol}/GenArt721CoreV2_ENGINE_FLEX.json +3 -3
- package/artifacts/contracts/engine/{GenArt721CoreV2_PBAB.sol → V2/GenArt721CoreV2_PBAB.sol}/GenArt721CoreV2_PBAB.json +3 -3
- package/artifacts/contracts/engine/{GenArt721CoreV2_PRTNR.sol → V2/GenArt721CoreV2_PRTNR.sol}/GenArt721CoreV2_PRTNR.json +3 -3
- package/artifacts/contracts/engine/{GenArt721MinterBurner_PBAB.sol → V2/GenArt721MinterBurner_PBAB.sol}/GenArt721MinterBurner_PBAB.json +3 -3
- package/artifacts/contracts/engine/{GenArt721MinterDAExp_PBAB.sol → V2/GenArt721MinterDAExp_PBAB.sol}/GenArt721MinterDAExp_PBAB.json +3 -3
- package/artifacts/contracts/engine/{GenArt721Minter_PBAB.sol → V2/GenArt721Minter_PBAB.sol}/GenArt721Minter_PBAB.json +3 -3
- package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +1960 -0
- package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +2247 -0
- package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +2247 -0
- package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +401 -0
- package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +2281 -0
- package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IAdminACLV0_PROHIBITION.sol/IAdminACLV0_PROHIBITION.json +359 -0
- package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +1094 -0
- package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +242 -0
- package/artifacts/contracts/engine-registry/EngineRegistryV0.sol/EngineRegistryV0.json +2 -2
- package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +41 -4
- package/artifacts/contracts/interfaces/0.8.x/IBytecodeStorageReader.sol/IBytecodeStorageReader.json +111 -0
- package/artifacts/contracts/interfaces/0.8.x/ICoreRegistryV1.sol/ICoreRegistryV1.json +172 -0
- package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterSEAV0.sol/IFilteredMinterSEAV0.json +1034 -0
- package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractExposesHashSeed.sol/IGenArt721CoreContractExposesHashSeed.json +30 -0
- package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +162 -0
- package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +162 -0
- package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +137 -13
- package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +1060 -0
- package/artifacts/contracts/interfaces/0.8.x/IMinterFilterV1.sol/IMinterFilterV1.json +429 -0
- package/artifacts/contracts/interfaces/0.8.x/IPseudorandomAtomic.sol/IPseudorandomAtomic.json +30 -0
- package/artifacts/contracts/interfaces/0.8.x/IRandomizer_V3CoreBase.sol/IRandomizer_V3CoreBase.json +24 -0
- package/artifacts/contracts/interfaces/0.8.x/ISharedRandomizerV0.sol/ISharedRandomizerV0.json +207 -0
- package/artifacts/contracts/interfaces/0.8.x/IWETH.sol/IWETH.json +55 -0
- package/artifacts/contracts/libs/0.8.x/{BytecodeStorage.sol → BytecodeStorageV0.sol}/BytecodeStorage.json +3 -3
- package/artifacts/contracts/libs/0.8.x/BytecodeStorageV1.sol/BytecodeStorageReader.json +163 -0
- package/artifacts/contracts/libs/0.8.x/BytecodeStorageV1.sol/BytecodeStorageWriter.json +10 -0
- package/artifacts/contracts/libs/0.8.x/Bytes32Strings.sol/Bytes32Strings.json +2 -2
- package/artifacts/contracts/libs/0.8.x/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +2 -2
- package/artifacts/contracts/libs/0.8.x/SSTORE2.sol/SSTORE2.json +10 -0
- package/artifacts/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol/DelegationRegistry.json +2 -2
- package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeMock.sol/GnosisSafeMock.json +2 -2
- package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeProxyFactoryMock.sol/GnosisSafeProxyFactoryMock.json +2 -2
- package/artifacts/contracts/libs/integration-refs/gnosis-safe/MultiSendMock.sol/MultiSendMock.json +2 -2
- package/artifacts/contracts/libs/integration-refs/weth9/weth9.sol/WETH9_.json +295 -0
- package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
- package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +692 -0
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpV4.sol/MinterDAExpV4.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDALinV4.sol/MinterDALinV4.json +2 -2
- 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/IGenArt721CoreContractV3WithRandomizer.json +104 -124
- package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSEAV0.sol/MinterSEAV0.json +1289 -0
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV4.sol/MinterSetPriceV4.json +2 -2
- package/artifacts/contracts/mock/{BytecodeTextCR_DMock.sol/BytecodeTextCR_DMock.json → BytecodeV0TextCR_DMock.sol/BytecodeV0TextCR_DMock.json} +4 -4
- package/artifacts/contracts/mock/BytecodeV1LibCallsMock.sol/BytecodeV1LibCallsMock.json +135 -0
- package/artifacts/contracts/mock/BytecodeV1TextCR_DMock.sol/BytecodeV1TextCR_DMock.json +301 -0
- package/artifacts/contracts/mock/DeadReceiverBidderMock.sol/DeadReceiverBidderMock.json +33 -0
- package/artifacts/contracts/mock/DeadReceiverMock.sol/DeadReceiverMock.json +2 -2
- package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +114 -0
- package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +2 -2
- package/artifacts/contracts/mock/GasLimitReceiverBidderMock.sol/GasLimitReceiverBidderMock.json +46 -0
- package/artifacts/contracts/mock/GasLimitReceiverMock.sol/GasLimitReceiverMock.json +28 -0
- package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +22 -4
- package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +2 -2
- package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +440 -0
- package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +39 -0
- 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/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +51 -0
- package/artifacts/contracts/mock/SSTORE2Mock.sol/SSTORE2Mock.json +118 -0
- package/artifacts/contracts/{BasicRandomizer.sol → randomizer/deprecated/BasicRandomizer.sol}/BasicRandomizer.json +3 -3
- package/artifacts/contracts/randomizer/deprecated/BasicRandomizerBase_v0_0_0.sol/RandomizerBase.json +10 -0
- package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +229 -0
- package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +102 -0
- package/artifacts/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol/PseudorandomAtomic.json +30 -0
- package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +231 -0
- package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +2 -2
- package/contracts/AdminACLV0.sol +1 -1
- package/contracts/AdminACLV1.sol +1 -1
- package/contracts/DependencyRegistryV0.sol +89 -141
- package/contracts/GenArt721CoreV3.sol +160 -204
- package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol +1 -1
- package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol +1 -1
- package/contracts/engine/{GenArt721CoreV2_ENGINE_FLEX.sol → V2/GenArt721CoreV2_ENGINE_FLEX.sol} +2 -2
- package/contracts/engine/{GenArt721CoreV2_PBAB.sol → V2/GenArt721CoreV2_PBAB.sol} +2 -2
- package/contracts/engine/{GenArt721CoreV2_PRTNR.sol → V2/GenArt721CoreV2_PRTNR.sol} +3 -3
- package/contracts/engine/{GenArt721MinterBurner_PBAB.sol → V2/GenArt721MinterBurner_PBAB.sol} +2 -2
- package/contracts/engine/{GenArt721MinterDAExp_PBAB.sol → V2/GenArt721MinterDAExp_PBAB.sol} +2 -2
- package/contracts/engine/{GenArt721Minter_PBAB.sol → V2/GenArt721Minter_PBAB.sol} +2 -2
- package/contracts/{GenArt721CoreV3_Engine.sol → engine/V3/GenArt721CoreV3_Engine.sol} +163 -216
- package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +2283 -0
- package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +2293 -0
- package/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol +281 -0
- package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +2354 -0
- package/contracts/engine/V3/forks/PROHIBITION/interfaces/IAdminACLV0_PROHIBITION.sol +123 -0
- package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +29 -0
- package/contracts/engine-registry/CoreRegistryV1.sol +254 -0
- package/contracts/engine-registry/EngineRegistryV0.sol +1 -1
- package/contracts/explorations/GenArt721CoreV3_Explorations.sol +164 -190
- package/contracts/interfaces/0.8.x/IBytecodeStorageReader.sol +62 -0
- package/contracts/interfaces/0.8.x/ICoreRegistryV1.sol +27 -0
- package/contracts/interfaces/0.8.x/IDelegationRegistry.sol +1 -1
- package/contracts/interfaces/0.8.x/IDependencyRegistryCompatibleV0.sol +1 -1
- package/contracts/interfaces/0.8.x/IDependencyRegistryV0.sol +1 -1
- package/contracts/interfaces/0.8.x/IEngineRegistryV0.sol +1 -1
- package/contracts/interfaces/0.8.x/IFilteredMinterSEAV0.sol +164 -0
- package/contracts/interfaces/0.8.x/IGenArt721CoreContractExposesHashSeed.sol +11 -0
- package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol +42 -0
- package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol +0 -8
- package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol +132 -0
- package/contracts/interfaces/0.8.x/IMinterFilterV1.sol +158 -0
- package/contracts/interfaces/0.8.x/IPseudorandomAtomic.sol +16 -0
- package/contracts/interfaces/0.8.x/IRandomizerPolyptychV0.sol +1 -1
- package/contracts/interfaces/0.8.x/IRandomizerV2.sol +2 -5
- package/contracts/interfaces/0.8.x/IRandomizer_V3CoreBase.sol +10 -0
- package/contracts/interfaces/0.8.x/ISharedRandomizerV0.sol +105 -0
- package/contracts/interfaces/0.8.x/IWETH.sol +11 -0
- package/contracts/libs/0.8.x/BytecodeStorageV1.sol +399 -0
- package/contracts/libs/0.8.x/SSTORE2.sol +109 -0
- package/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol +1 -1
- package/contracts/libs/integration-refs/weth9/weth9.sol +765 -0
- package/contracts/minter-suite/MinterFilter/MinterFilterV1.sol +36 -48
- package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +756 -0
- package/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol +27 -35
- package/contracts/minter-suite/Minters/MinterDAExpV4.sol +17 -22
- package/contracts/minter-suite/Minters/MinterDALinV4.sol +16 -18
- package/contracts/minter-suite/Minters/MinterHolderV4.sol +20 -20
- package/contracts/minter-suite/Minters/MinterMerkleV5.sol +14 -16
- package/contracts/minter-suite/Minters/MinterPolyptychV0.sol +37 -36
- package/contracts/minter-suite/Minters/MinterSEAV0.sol +1273 -0
- package/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol +12 -12
- package/contracts/minter-suite/Minters/MinterSetPriceV4.sol +10 -11
- package/contracts/mock/{BytecodeTextCR_DMock.sol → BytecodeV0TextCR_DMock.sol} +5 -5
- package/contracts/mock/BytecodeV1LibCallsMock.sol +114 -0
- package/contracts/mock/BytecodeV1TextCR_DMock.sol +233 -0
- package/contracts/mock/DeadReceiverBidderMock.sol +23 -0
- package/contracts/mock/DeadReceiverMock.sol +1 -1
- package/contracts/mock/DummySharedMinter.sol +75 -0
- package/contracts/mock/GasLimitReceiverBidderMock.sol +23 -0
- package/contracts/mock/GasLimitReceiverMock.sol +19 -0
- package/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol +14 -27
- package/contracts/mock/MockAdminACLV0.sol +1 -1
- package/contracts/mock/MockAdminACLV0_PROHIBITION.sol +207 -0
- package/contracts/mock/OriginRegisterMock.sol +27 -0
- package/contracts/mock/RandomizerV2_NoAssignMock.sol +3 -12
- package/contracts/mock/ReentrancySEAMock.sol +36 -0
- package/contracts/mock/SSTORE2Mock.sol +93 -0
- package/contracts/{BasicRandomizer.sol → randomizer/deprecated/BasicRandomizer.sol} +1 -1
- package/contracts/randomizer/deprecated/BasicRandomizerBase_v0_0_0.sol +23 -0
- package/contracts/{BasicPolyptychRandomizerV0.sol → randomizer/deprecated/PolyptychRandomizerV0.sol} +20 -29
- package/contracts/{BasicRandomizerV2.sol → randomizer/deprecated/RandomizerV2.sol} +6 -14
- package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +30 -0
- package/contracts/randomizer/shared/SharedRandomizerV0.sol +245 -0
- package/package.json +36 -30
- package/.env.example +0 -10
- package/artifacts/contracts/BasicPolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +0 -229
- package/artifacts/contracts/BasicRandomizerV2.sol/BasicRandomizerV2.json +0 -102
- package/artifacts/contracts/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +0 -1942
- package/artifacts/contracts/engine-registry/future/EngineRegistryV1.sol/EngineRegistryV1.json +0 -109
- package/contracts/engine-registry/future/EngineRegistryV1.sol +0 -86
- /package/contracts/libs/0.8.x/{BytecodeStorage.sol → BytecodeStorageV0.sol} +0 -0
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
-
pragma solidity 0.8.
|
|
2
|
+
pragma solidity 0.8.19;
|
|
3
3
|
|
|
4
4
|
// Created By: Art Blocks Inc.
|
|
5
5
|
|
|
6
|
-
import "
|
|
7
|
-
import "
|
|
8
|
-
import "
|
|
9
|
-
import "
|
|
10
|
-
import "
|
|
11
|
-
import "
|
|
6
|
+
import "../../interfaces/0.8.x/IRandomizer_V3CoreBase.sol";
|
|
7
|
+
import "../../interfaces/0.8.x/IAdminACLV0.sol";
|
|
8
|
+
import "../../interfaces/0.8.x/IEngineRegistryV0.sol";
|
|
9
|
+
import "../../interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol";
|
|
10
|
+
import "../../interfaces/0.8.x/IGenArt721CoreContractExposesHashSeed.sol";
|
|
11
|
+
import "../../interfaces/0.8.x/IDependencyRegistryCompatibleV0.sol";
|
|
12
|
+
import "../../interfaces/0.8.x/IManifold.sol";
|
|
12
13
|
|
|
13
14
|
import "@openzeppelin-4.7/contracts/utils/Strings.sol";
|
|
14
15
|
import "@openzeppelin-4.7/contracts/access/Ownable.sol";
|
|
15
|
-
import "
|
|
16
|
-
import "
|
|
17
|
-
import "
|
|
16
|
+
import "../../libs/0.8.x/ERC721_PackedHashSeed.sol";
|
|
17
|
+
import "../../libs/0.8.x/BytecodeStorageV1.sol";
|
|
18
|
+
import "../../libs/0.8.x/Bytes32Strings.sol";
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* @title Art Blocks Engine ERC-721 core contract, V3.
|
|
@@ -96,10 +97,10 @@ contract GenArt721CoreV3_Engine is
|
|
|
96
97
|
Ownable,
|
|
97
98
|
IDependencyRegistryCompatibleV0,
|
|
98
99
|
IManifold,
|
|
99
|
-
IGenArt721CoreContractV3_Engine
|
|
100
|
+
IGenArt721CoreContractV3_Engine,
|
|
101
|
+
IGenArt721CoreContractExposesHashSeed
|
|
100
102
|
{
|
|
101
|
-
using
|
|
102
|
-
using BytecodeStorage for address;
|
|
103
|
+
using BytecodeStorageWriter for string;
|
|
103
104
|
using Bytes32Strings for bytes32;
|
|
104
105
|
using Strings for uint256;
|
|
105
106
|
using Strings for address;
|
|
@@ -158,7 +159,7 @@ contract GenArt721CoreV3_Engine is
|
|
|
158
159
|
address public artblocksDependencyRegistryAddress;
|
|
159
160
|
|
|
160
161
|
/// current randomizer contract
|
|
161
|
-
|
|
162
|
+
IRandomizer_V3CoreBase public randomizerContract;
|
|
162
163
|
|
|
163
164
|
/// append-only array of all randomizer contract addresses ever used by
|
|
164
165
|
/// this contract
|
|
@@ -258,7 +259,7 @@ contract GenArt721CoreV3_Engine is
|
|
|
258
259
|
bool public immutable autoApproveArtistSplitProposals;
|
|
259
260
|
|
|
260
261
|
/// version & type of this core contract
|
|
261
|
-
bytes32 constant CORE_VERSION = "v3.1.
|
|
262
|
+
bytes32 constant CORE_VERSION = "v3.1.2";
|
|
262
263
|
|
|
263
264
|
function coreVersion() external pure returns (string memory) {
|
|
264
265
|
return CORE_VERSION.toString();
|
|
@@ -273,59 +274,54 @@ contract GenArt721CoreV3_Engine is
|
|
|
273
274
|
/// default base URI to initialize all new project projectBaseURI values to
|
|
274
275
|
string public defaultBaseURI;
|
|
275
276
|
|
|
276
|
-
|
|
277
|
+
function _onlyNonZeroAddress(address _address) internal pure {
|
|
277
278
|
require(_address != address(0), "Must input non-zero address");
|
|
278
|
-
_;
|
|
279
279
|
}
|
|
280
280
|
|
|
281
|
-
|
|
281
|
+
function _onlyNonEmptyString(string memory _string) internal pure {
|
|
282
282
|
require(bytes(_string).length != 0, "Must input non-empty string");
|
|
283
|
-
_;
|
|
284
283
|
}
|
|
285
284
|
|
|
286
|
-
|
|
285
|
+
function _onlyValidTokenId(uint256 _tokenId) internal view {
|
|
287
286
|
require(_exists(_tokenId), "Token ID does not exist");
|
|
288
|
-
_;
|
|
289
287
|
}
|
|
290
288
|
|
|
291
|
-
|
|
289
|
+
function _onlyValidProjectId(uint256 _projectId) internal view {
|
|
292
290
|
require(
|
|
293
291
|
(_projectId >= startingProjectId) && (_projectId < _nextProjectId),
|
|
294
292
|
"Project ID does not exist"
|
|
295
293
|
);
|
|
296
|
-
_;
|
|
297
294
|
}
|
|
298
295
|
|
|
299
|
-
|
|
296
|
+
function _onlyUnlocked(uint256 _projectId) internal view {
|
|
300
297
|
// Note: calling `_projectUnlocked` enforces that the `_projectId`
|
|
301
298
|
// passed in is valid.`
|
|
302
299
|
require(_projectUnlocked(_projectId), "Only if unlocked");
|
|
303
|
-
_;
|
|
304
300
|
}
|
|
305
301
|
|
|
306
|
-
|
|
302
|
+
function _onlyAdminACL(bytes4 _selector) internal {
|
|
307
303
|
require(
|
|
308
304
|
adminACLAllowed(msg.sender, address(this), _selector),
|
|
309
305
|
"Only Admin ACL allowed"
|
|
310
306
|
);
|
|
311
|
-
_;
|
|
312
307
|
}
|
|
313
308
|
|
|
314
|
-
|
|
309
|
+
function _onlyArtist(uint256 _projectId) internal view {
|
|
315
310
|
require(
|
|
316
311
|
msg.sender == projectIdToFinancials[_projectId].artistAddress,
|
|
317
312
|
"Only artist"
|
|
318
313
|
);
|
|
319
|
-
_;
|
|
320
314
|
}
|
|
321
315
|
|
|
322
|
-
|
|
316
|
+
function _onlyArtistOrAdminACL(
|
|
317
|
+
uint256 _projectId,
|
|
318
|
+
bytes4 _selector
|
|
319
|
+
) internal {
|
|
323
320
|
require(
|
|
324
321
|
msg.sender == projectIdToFinancials[_projectId].artistAddress ||
|
|
325
322
|
adminACLAllowed(msg.sender, address(this), _selector),
|
|
326
323
|
"Only artist or Admin ACL allowed"
|
|
327
324
|
);
|
|
328
|
-
_;
|
|
329
325
|
}
|
|
330
326
|
|
|
331
327
|
/**
|
|
@@ -334,10 +330,10 @@ contract GenArt721CoreV3_Engine is
|
|
|
334
330
|
* contract to continue to function if the owner decides to renounce
|
|
335
331
|
* ownership.
|
|
336
332
|
*/
|
|
337
|
-
|
|
333
|
+
function _onlyAdminACLOrRenouncedArtist(
|
|
338
334
|
uint256 _projectId,
|
|
339
335
|
bytes4 _selector
|
|
340
|
-
) {
|
|
336
|
+
) internal {
|
|
341
337
|
require(
|
|
342
338
|
adminACLAllowed(msg.sender, address(this), _selector) ||
|
|
343
339
|
(owner() == address(0) &&
|
|
@@ -345,7 +341,6 @@ contract GenArt721CoreV3_Engine is
|
|
|
345
341
|
projectIdToFinancials[_projectId].artistAddress),
|
|
346
342
|
"Only Admin ACL allowed, or artist if owner has renounced"
|
|
347
343
|
);
|
|
348
|
-
_;
|
|
349
344
|
}
|
|
350
345
|
|
|
351
346
|
/**
|
|
@@ -373,13 +368,11 @@ contract GenArt721CoreV3_Engine is
|
|
|
373
368
|
uint248 _startingProjectId,
|
|
374
369
|
bool _autoApproveArtistSplitProposals,
|
|
375
370
|
address _engineRegistryContract
|
|
376
|
-
)
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
onlyNonZeroAddress(_adminACLContract)
|
|
382
|
-
{
|
|
371
|
+
) ERC721_PackedHashSeed(_tokenName, _tokenSymbol) {
|
|
372
|
+
_onlyNonZeroAddress(_renderProviderAddress);
|
|
373
|
+
_onlyNonZeroAddress(_platformProviderAddress);
|
|
374
|
+
_onlyNonZeroAddress(_randomizerContract);
|
|
375
|
+
_onlyNonZeroAddress(_adminACLContract);
|
|
383
376
|
// setup immutable `autoApproveArtistSplitProposals` config
|
|
384
377
|
autoApproveArtistSplitProposals = _autoApproveArtistSplitProposals;
|
|
385
378
|
// record contracts starting project ID
|
|
@@ -501,10 +494,9 @@ contract GenArt721CoreV3_Engine is
|
|
|
501
494
|
* for indexing purposes, it must be emitted by the randomizer. This is to
|
|
502
495
|
* minimize gas when minting.
|
|
503
496
|
*/
|
|
504
|
-
function setTokenHash_8PT(
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
) external onlyValidTokenId(_tokenId) {
|
|
497
|
+
function setTokenHash_8PT(uint256 _tokenId, bytes32 _hashSeed) external {
|
|
498
|
+
_onlyValidTokenId(_tokenId);
|
|
499
|
+
|
|
508
500
|
OwnerAndHashSeed storage ownerAndHashSeed = _ownersAndHashSeeds[
|
|
509
501
|
_tokenId
|
|
510
502
|
];
|
|
@@ -554,11 +546,9 @@ contract GenArt721CoreV3_Engine is
|
|
|
554
546
|
*/
|
|
555
547
|
function updateArtblocksDependencyRegistryAddress(
|
|
556
548
|
address _artblocksDependencyRegistryAddress
|
|
557
|
-
)
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
onlyNonZeroAddress(_artblocksDependencyRegistryAddress)
|
|
561
|
-
{
|
|
549
|
+
) external {
|
|
550
|
+
_onlyAdminACL(this.updateArtblocksDependencyRegistryAddress.selector);
|
|
551
|
+
_onlyNonZeroAddress(_artblocksDependencyRegistryAddress);
|
|
562
552
|
artblocksDependencyRegistryAddress = _artblocksDependencyRegistryAddress;
|
|
563
553
|
emit PlatformUpdated(FIELD_ARTBLOCKS_DEPENDENCY_REGISTRY_ADDRESS);
|
|
564
554
|
}
|
|
@@ -580,14 +570,12 @@ contract GenArt721CoreV3_Engine is
|
|
|
580
570
|
address payable _renderProviderSecondarySalesAddress,
|
|
581
571
|
address payable _platformProviderPrimarySalesAddress,
|
|
582
572
|
address payable _platformProviderSecondarySalesAddress
|
|
583
|
-
)
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
onlyNonZeroAddress(_platformProviderSecondarySalesAddress)
|
|
590
|
-
{
|
|
573
|
+
) external {
|
|
574
|
+
_onlyAdminACL(this.updateProviderSalesAddresses.selector);
|
|
575
|
+
_onlyNonZeroAddress(_renderProviderPrimarySalesAddress);
|
|
576
|
+
_onlyNonZeroAddress(_renderProviderSecondarySalesAddress);
|
|
577
|
+
_onlyNonZeroAddress(_platformProviderPrimarySalesAddress);
|
|
578
|
+
_onlyNonZeroAddress(_platformProviderSecondarySalesAddress);
|
|
591
579
|
_updateProviderSalesAddresses(
|
|
592
580
|
_renderProviderPrimarySalesAddress,
|
|
593
581
|
_renderProviderSecondarySalesAddress,
|
|
@@ -606,10 +594,9 @@ contract GenArt721CoreV3_Engine is
|
|
|
606
594
|
function updateProviderPrimarySalesPercentages(
|
|
607
595
|
uint256 renderProviderPrimarySalesPercentage_,
|
|
608
596
|
uint256 platformProviderPrimarySalesPercentage_
|
|
609
|
-
)
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
{
|
|
597
|
+
) external {
|
|
598
|
+
_onlyAdminACL(this.updateProviderPrimarySalesPercentages.selector);
|
|
599
|
+
|
|
613
600
|
// Validate that the sum of the proposed %s, does not exceed 100%.
|
|
614
601
|
require(
|
|
615
602
|
(renderProviderPrimarySalesPercentage_ +
|
|
@@ -643,13 +630,14 @@ contract GenArt721CoreV3_Engine is
|
|
|
643
630
|
function updateProviderSecondarySalesBPS(
|
|
644
631
|
uint256 _renderProviderSecondarySalesBPS,
|
|
645
632
|
uint256 _platformProviderSecondarySalesBPS
|
|
646
|
-
) external
|
|
633
|
+
) external {
|
|
634
|
+
_onlyAdminACL(this.updateProviderSecondarySalesBPS.selector);
|
|
647
635
|
// Validate that the sum of the proposed provider BPS, does not exceed 10_000 BPS.
|
|
648
636
|
require(
|
|
649
637
|
(_renderProviderSecondarySalesBPS +
|
|
650
638
|
_platformProviderSecondarySalesBPS) <=
|
|
651
639
|
MAX_PROVIDER_SECONDARY_SALES_BPS,
|
|
652
|
-
"
|
|
640
|
+
"Over max sum of BPS"
|
|
653
641
|
);
|
|
654
642
|
renderProviderSecondarySalesBPS = _renderProviderSecondarySalesBPS;
|
|
655
643
|
platformProviderSecondarySalesBPS = _platformProviderSecondarySalesBPS;
|
|
@@ -660,13 +648,9 @@ contract GenArt721CoreV3_Engine is
|
|
|
660
648
|
* @notice Updates minter to `_address`.
|
|
661
649
|
* @param _address Address of new minter.
|
|
662
650
|
*/
|
|
663
|
-
function updateMinterContract(
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
external
|
|
667
|
-
onlyAdminACL(this.updateMinterContract.selector)
|
|
668
|
-
onlyNonZeroAddress(_address)
|
|
669
|
-
{
|
|
651
|
+
function updateMinterContract(address _address) external {
|
|
652
|
+
_onlyAdminACL(this.updateMinterContract.selector);
|
|
653
|
+
_onlyNonZeroAddress(_address);
|
|
670
654
|
minterContract = _address;
|
|
671
655
|
emit MinterUpdated(_address);
|
|
672
656
|
}
|
|
@@ -675,13 +659,9 @@ contract GenArt721CoreV3_Engine is
|
|
|
675
659
|
* @notice Updates randomizer to `_randomizerAddress`.
|
|
676
660
|
* @param _randomizerAddress Address of new randomizer.
|
|
677
661
|
*/
|
|
678
|
-
function updateRandomizerAddress(
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
external
|
|
682
|
-
onlyAdminACL(this.updateRandomizerAddress.selector)
|
|
683
|
-
onlyNonZeroAddress(_randomizerAddress)
|
|
684
|
-
{
|
|
662
|
+
function updateRandomizerAddress(address _randomizerAddress) external {
|
|
663
|
+
_onlyAdminACL(this.updateRandomizerAddress.selector);
|
|
664
|
+
_onlyNonZeroAddress(_randomizerAddress);
|
|
685
665
|
_updateRandomizerAddress(_randomizerAddress);
|
|
686
666
|
}
|
|
687
667
|
|
|
@@ -689,13 +669,9 @@ contract GenArt721CoreV3_Engine is
|
|
|
689
669
|
* @notice Toggles project `_projectId` as active/inactive.
|
|
690
670
|
* @param _projectId Project ID to be toggled.
|
|
691
671
|
*/
|
|
692
|
-
function toggleProjectIsActive(
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
external
|
|
696
|
-
onlyAdminACL(this.toggleProjectIsActive.selector)
|
|
697
|
-
onlyValidProjectId(_projectId)
|
|
698
|
-
{
|
|
672
|
+
function toggleProjectIsActive(uint256 _projectId) external {
|
|
673
|
+
_onlyAdminACL(this.toggleProjectIsActive.selector);
|
|
674
|
+
_onlyValidProjectId(_projectId);
|
|
699
675
|
projects[_projectId].active = !projects[_projectId].active;
|
|
700
676
|
emit ProjectUpdated(_projectId, FIELD_PROJECT_ACTIVE);
|
|
701
677
|
}
|
|
@@ -738,12 +714,10 @@ contract GenArt721CoreV3_Engine is
|
|
|
738
714
|
uint256 _additionalPayeePrimarySalesPercentage,
|
|
739
715
|
address payable _additionalPayeeSecondarySales,
|
|
740
716
|
uint256 _additionalPayeeSecondarySalesPercentage
|
|
741
|
-
)
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
onlyNonZeroAddress(_artistAddress)
|
|
746
|
-
{
|
|
717
|
+
) external {
|
|
718
|
+
_onlyValidProjectId(_projectId);
|
|
719
|
+
_onlyArtist(_projectId);
|
|
720
|
+
_onlyNonZeroAddress(_artistAddress);
|
|
747
721
|
ProjectFinance storage projectFinance = projectIdToFinancials[
|
|
748
722
|
_projectId
|
|
749
723
|
];
|
|
@@ -861,15 +835,13 @@ contract GenArt721CoreV3_Engine is
|
|
|
861
835
|
uint256 _additionalPayeePrimarySalesPercentage,
|
|
862
836
|
address payable _additionalPayeeSecondarySales,
|
|
863
837
|
uint256 _additionalPayeeSecondarySalesPercentage
|
|
864
|
-
)
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
onlyAdminACLOrRenouncedArtist(
|
|
838
|
+
) external {
|
|
839
|
+
_onlyValidProjectId(_projectId);
|
|
840
|
+
_onlyAdminACLOrRenouncedArtist(
|
|
868
841
|
_projectId,
|
|
869
842
|
this.adminAcceptArtistAddressesAndSplits.selector
|
|
870
|
-
)
|
|
871
|
-
|
|
872
|
-
{
|
|
843
|
+
);
|
|
844
|
+
_onlyNonZeroAddress(_artistAddress);
|
|
873
845
|
// checks
|
|
874
846
|
require(
|
|
875
847
|
proposedArtistAddressesAndSplitsHash[_projectId] ==
|
|
@@ -915,15 +887,13 @@ contract GenArt721CoreV3_Engine is
|
|
|
915
887
|
function updateProjectArtistAddress(
|
|
916
888
|
uint256 _projectId,
|
|
917
889
|
address payable _artistAddress
|
|
918
|
-
)
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
onlyAdminACLOrRenouncedArtist(
|
|
890
|
+
) external {
|
|
891
|
+
_onlyValidProjectId(_projectId);
|
|
892
|
+
_onlyAdminACLOrRenouncedArtist(
|
|
922
893
|
_projectId,
|
|
923
894
|
this.updateProjectArtistAddress.selector
|
|
924
|
-
)
|
|
925
|
-
|
|
926
|
-
{
|
|
895
|
+
);
|
|
896
|
+
_onlyNonZeroAddress(_artistAddress);
|
|
927
897
|
projectIdToFinancials[_projectId].artistAddress = _artistAddress;
|
|
928
898
|
emit ProjectUpdated(_projectId, FIELD_PROJECT_ARTIST_ADDRESS);
|
|
929
899
|
}
|
|
@@ -932,9 +902,8 @@ contract GenArt721CoreV3_Engine is
|
|
|
932
902
|
* @notice Toggles paused state of project `_projectId`.
|
|
933
903
|
* @param _projectId Project ID to be toggled.
|
|
934
904
|
*/
|
|
935
|
-
function toggleProjectIsPaused(
|
|
936
|
-
|
|
937
|
-
) external onlyArtist(_projectId) {
|
|
905
|
+
function toggleProjectIsPaused(uint256 _projectId) external {
|
|
906
|
+
_onlyArtist(_projectId);
|
|
938
907
|
projects[_projectId].paused = !projects[_projectId].paused;
|
|
939
908
|
emit ProjectUpdated(_projectId, FIELD_PROJECT_PAUSED);
|
|
940
909
|
}
|
|
@@ -948,12 +917,10 @@ contract GenArt721CoreV3_Engine is
|
|
|
948
917
|
function addProject(
|
|
949
918
|
string memory _projectName,
|
|
950
919
|
address payable _artistAddress
|
|
951
|
-
)
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
onlyNonZeroAddress(_artistAddress)
|
|
956
|
-
{
|
|
920
|
+
) external {
|
|
921
|
+
_onlyAdminACL(this.addProject.selector);
|
|
922
|
+
_onlyNonEmptyString(_projectName);
|
|
923
|
+
_onlyNonZeroAddress(_artistAddress);
|
|
957
924
|
require(!newProjectsForbidden, "New projects forbidden");
|
|
958
925
|
uint256 projectId = _nextProjectId;
|
|
959
926
|
projectIdToFinancials[projectId].artistAddress = _artistAddress;
|
|
@@ -969,10 +936,8 @@ contract GenArt721CoreV3_Engine is
|
|
|
969
936
|
/**
|
|
970
937
|
* @notice Forever forbids new projects from being added to this contract.
|
|
971
938
|
*/
|
|
972
|
-
function forbidNewProjects()
|
|
973
|
-
|
|
974
|
-
onlyAdminACL(this.forbidNewProjects.selector)
|
|
975
|
-
{
|
|
939
|
+
function forbidNewProjects() external {
|
|
940
|
+
_onlyAdminACL(this.forbidNewProjects.selector);
|
|
976
941
|
require(!newProjectsForbidden, "Already forbidden");
|
|
977
942
|
_forbidNewProjects();
|
|
978
943
|
}
|
|
@@ -985,12 +950,10 @@ contract GenArt721CoreV3_Engine is
|
|
|
985
950
|
function updateProjectName(
|
|
986
951
|
uint256 _projectId,
|
|
987
952
|
string memory _projectName
|
|
988
|
-
)
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
onlyNonEmptyString(_projectName)
|
|
993
|
-
{
|
|
953
|
+
) external {
|
|
954
|
+
_onlyUnlocked(_projectId);
|
|
955
|
+
_onlyArtistOrAdminACL(_projectId, this.updateProjectName.selector);
|
|
956
|
+
_onlyNonEmptyString(_projectName);
|
|
994
957
|
projects[_projectId].name = _projectName;
|
|
995
958
|
emit ProjectUpdated(_projectId, FIELD_PROJECT_NAME);
|
|
996
959
|
}
|
|
@@ -1004,12 +967,13 @@ contract GenArt721CoreV3_Engine is
|
|
|
1004
967
|
function updateProjectArtistName(
|
|
1005
968
|
uint256 _projectId,
|
|
1006
969
|
string memory _projectArtistName
|
|
1007
|
-
)
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
970
|
+
) external {
|
|
971
|
+
_onlyUnlocked(_projectId);
|
|
972
|
+
_onlyArtistOrAdminACL(
|
|
973
|
+
_projectId,
|
|
974
|
+
this.updateProjectArtistName.selector
|
|
975
|
+
);
|
|
976
|
+
_onlyNonEmptyString(_projectArtistName);
|
|
1013
977
|
projects[_projectId].artist = _projectArtistName;
|
|
1014
978
|
emit ProjectUpdated(_projectId, FIELD_PROJECT_ARTIST_NAME);
|
|
1015
979
|
}
|
|
@@ -1028,10 +992,11 @@ contract GenArt721CoreV3_Engine is
|
|
|
1028
992
|
function updateProjectSecondaryMarketRoyaltyPercentage(
|
|
1029
993
|
uint256 _projectId,
|
|
1030
994
|
uint256 _secondMarketRoyalty
|
|
1031
|
-
) external
|
|
995
|
+
) external {
|
|
996
|
+
_onlyArtist(_projectId);
|
|
1032
997
|
require(
|
|
1033
998
|
_secondMarketRoyalty <= ARTIST_MAX_SECONDARY_ROYALTY_PERCENTAGE,
|
|
1034
|
-
"
|
|
999
|
+
"Over max percent"
|
|
1035
1000
|
);
|
|
1036
1001
|
projectIdToFinancials[_projectId]
|
|
1037
1002
|
.secondaryMarketRoyaltyPercentage = uint8(_secondMarketRoyalty);
|
|
@@ -1076,7 +1041,8 @@ contract GenArt721CoreV3_Engine is
|
|
|
1076
1041
|
function updateProjectWebsite(
|
|
1077
1042
|
uint256 _projectId,
|
|
1078
1043
|
string memory _projectWebsite
|
|
1079
|
-
) external
|
|
1044
|
+
) external {
|
|
1045
|
+
_onlyArtist(_projectId);
|
|
1080
1046
|
projects[_projectId].website = _projectWebsite;
|
|
1081
1047
|
emit ProjectUpdated(_projectId, FIELD_PROJECT_WEBSITE);
|
|
1082
1048
|
}
|
|
@@ -1089,12 +1055,10 @@ contract GenArt721CoreV3_Engine is
|
|
|
1089
1055
|
function updateProjectLicense(
|
|
1090
1056
|
uint256 _projectId,
|
|
1091
1057
|
string memory _projectLicense
|
|
1092
|
-
)
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
onlyNonEmptyString(_projectLicense)
|
|
1097
|
-
{
|
|
1058
|
+
) external {
|
|
1059
|
+
_onlyUnlocked(_projectId);
|
|
1060
|
+
_onlyArtistOrAdminACL(_projectId, this.updateProjectLicense.selector);
|
|
1061
|
+
_onlyNonEmptyString(_projectLicense);
|
|
1098
1062
|
projects[_projectId].license = _projectLicense;
|
|
1099
1063
|
emit ProjectUpdated(_projectId, FIELD_PROJECT_LICENSE);
|
|
1100
1064
|
}
|
|
@@ -1111,18 +1075,16 @@ contract GenArt721CoreV3_Engine is
|
|
|
1111
1075
|
function updateProjectMaxInvocations(
|
|
1112
1076
|
uint256 _projectId,
|
|
1113
1077
|
uint24 _maxInvocations
|
|
1114
|
-
) external
|
|
1078
|
+
) external {
|
|
1079
|
+
_onlyArtist(_projectId);
|
|
1115
1080
|
// CHECKS
|
|
1116
1081
|
Project storage project = projects[_projectId];
|
|
1117
1082
|
uint256 _invocations = project.invocations;
|
|
1118
1083
|
require(
|
|
1119
1084
|
(_maxInvocations < project.maxInvocations),
|
|
1120
|
-
"maxInvocations
|
|
1121
|
-
);
|
|
1122
|
-
require(
|
|
1123
|
-
_maxInvocations >= _invocations,
|
|
1124
|
-
"Only max invocations gte current invocations"
|
|
1085
|
+
"Only maxInvocations decrease"
|
|
1125
1086
|
);
|
|
1087
|
+
require(_maxInvocations >= _invocations, "Only gte invocations");
|
|
1126
1088
|
// EFFECTS
|
|
1127
1089
|
project.maxInvocations = _maxInvocations;
|
|
1128
1090
|
emit ProjectUpdated(_projectId, FIELD_PROJECT_MAX_INVOCATIONS);
|
|
@@ -1137,17 +1099,15 @@ contract GenArt721CoreV3_Engine is
|
|
|
1137
1099
|
* @notice Adds a script to project `_projectId`.
|
|
1138
1100
|
* @param _projectId Project to be updated.
|
|
1139
1101
|
* @param _script Script to be added. Required to be a non-empty string,
|
|
1140
|
-
*
|
|
1102
|
+
* but no further validation is performed.
|
|
1141
1103
|
*/
|
|
1142
1104
|
function addProjectScript(
|
|
1143
1105
|
uint256 _projectId,
|
|
1144
1106
|
string memory _script
|
|
1145
|
-
)
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
onlyNonEmptyString(_script)
|
|
1150
|
-
{
|
|
1107
|
+
) external {
|
|
1108
|
+
_onlyUnlocked(_projectId);
|
|
1109
|
+
_onlyArtistOrAdminACL(_projectId, this.addProjectScript.selector);
|
|
1110
|
+
_onlyNonEmptyString(_script);
|
|
1151
1111
|
Project storage project = projects[_projectId];
|
|
1152
1112
|
// store script in contract bytecode
|
|
1153
1113
|
project.scriptBytecodeAddresses[project.scriptCount] = _script
|
|
@@ -1167,26 +1127,14 @@ contract GenArt721CoreV3_Engine is
|
|
|
1167
1127
|
uint256 _projectId,
|
|
1168
1128
|
uint256 _scriptId,
|
|
1169
1129
|
string memory _script
|
|
1170
|
-
)
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
onlyNonEmptyString(_script)
|
|
1175
|
-
{
|
|
1130
|
+
) external {
|
|
1131
|
+
_onlyUnlocked(_projectId);
|
|
1132
|
+
_onlyArtistOrAdminACL(_projectId, this.updateProjectScript.selector);
|
|
1133
|
+
_onlyNonEmptyString(_script);
|
|
1176
1134
|
Project storage project = projects[_projectId];
|
|
1177
1135
|
require(_scriptId < project.scriptCount, "scriptId out of range");
|
|
1178
|
-
// purge old contract bytecode contract from the blockchain state
|
|
1179
|
-
// note: Although this does reduce usage of Ethereum state, it does not
|
|
1180
|
-
// reduce the gas costs of removal transactions. We believe this is the
|
|
1181
|
-
// best behavior at the time of writing, and do not expect this to
|
|
1182
|
-
// result in any breaking changes in the future. All current proposals
|
|
1183
|
-
// to change the self-destruct opcode are backwards compatible, but may
|
|
1184
|
-
// result in not removing the bytecode from the blockchain state. This
|
|
1185
|
-
// implementation is compatible with that architecture, as it does not
|
|
1186
|
-
// rely on the bytecode being removed from the blockchain state.
|
|
1187
|
-
project.scriptBytecodeAddresses[_scriptId].purgeBytecode();
|
|
1188
1136
|
// store script in contract bytecode, replacing reference address from
|
|
1189
|
-
// the
|
|
1137
|
+
// the old storage contract with the newly created one
|
|
1190
1138
|
project.scriptBytecodeAddresses[_scriptId] = _script.writeToBytecode();
|
|
1191
1139
|
emit ProjectUpdated(_projectId, FIELD_PROJECT_SCRIPT);
|
|
1192
1140
|
}
|
|
@@ -1195,28 +1143,15 @@ contract GenArt721CoreV3_Engine is
|
|
|
1195
1143
|
* @notice Removes last script from project `_projectId`.
|
|
1196
1144
|
* @param _projectId Project to be updated.
|
|
1197
1145
|
*/
|
|
1198
|
-
function removeProjectLastScript(
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
{
|
|
1146
|
+
function removeProjectLastScript(uint256 _projectId) external {
|
|
1147
|
+
_onlyUnlocked(_projectId);
|
|
1148
|
+
_onlyArtistOrAdminACL(
|
|
1149
|
+
_projectId,
|
|
1150
|
+
this.removeProjectLastScript.selector
|
|
1151
|
+
);
|
|
1205
1152
|
Project storage project = projects[_projectId];
|
|
1206
|
-
require(project.scriptCount > 0, "
|
|
1207
|
-
//
|
|
1208
|
-
// note: Although this does reduce usage of Ethereum state, it does not
|
|
1209
|
-
// reduce the gas costs of removal transactions. We believe this is the
|
|
1210
|
-
// best behavior at the time of writing, and do not expect this to
|
|
1211
|
-
// result in any breaking changes in the future. All current proposals
|
|
1212
|
-
// to change the self-destruct opcode are backwards compatible, but may
|
|
1213
|
-
// result in not removing the bytecode from the blockchain state. This
|
|
1214
|
-
// implementation is compatible with that architecture, as it does not
|
|
1215
|
-
// rely on the bytecode being removed from the blockchain state.
|
|
1216
|
-
project
|
|
1217
|
-
.scriptBytecodeAddresses[project.scriptCount - 1]
|
|
1218
|
-
.purgeBytecode();
|
|
1219
|
-
// delete reference to contract address that no longer exists
|
|
1153
|
+
require(project.scriptCount > 0, "No scripts to remove");
|
|
1154
|
+
// delete reference to old storage contract address
|
|
1220
1155
|
delete project.scriptBytecodeAddresses[project.scriptCount - 1];
|
|
1221
1156
|
unchecked {
|
|
1222
1157
|
project.scriptCount = project.scriptCount - 1;
|
|
@@ -1233,11 +1168,12 @@ contract GenArt721CoreV3_Engine is
|
|
|
1233
1168
|
function updateProjectScriptType(
|
|
1234
1169
|
uint256 _projectId,
|
|
1235
1170
|
bytes32 _scriptTypeAndVersion
|
|
1236
|
-
)
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1171
|
+
) external {
|
|
1172
|
+
_onlyUnlocked(_projectId);
|
|
1173
|
+
_onlyArtistOrAdminACL(
|
|
1174
|
+
_projectId,
|
|
1175
|
+
this.updateProjectScriptType.selector
|
|
1176
|
+
);
|
|
1241
1177
|
Project storage project = projects[_projectId];
|
|
1242
1178
|
// require exactly one @ symbol in _scriptTypeAndVersion
|
|
1243
1179
|
require(
|
|
@@ -1261,12 +1197,13 @@ contract GenArt721CoreV3_Engine is
|
|
|
1261
1197
|
function updateProjectAspectRatio(
|
|
1262
1198
|
uint256 _projectId,
|
|
1263
1199
|
string memory _aspectRatio
|
|
1264
|
-
)
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1200
|
+
) external {
|
|
1201
|
+
_onlyUnlocked(_projectId);
|
|
1202
|
+
_onlyArtistOrAdminACL(
|
|
1203
|
+
_projectId,
|
|
1204
|
+
this.updateProjectAspectRatio.selector
|
|
1205
|
+
);
|
|
1206
|
+
_onlyNonEmptyString(_aspectRatio);
|
|
1270
1207
|
// Perform more detailed input validation for aspect ratio.
|
|
1271
1208
|
bytes memory aspectRatioBytes = bytes(_aspectRatio);
|
|
1272
1209
|
uint256 bytesLength = aspectRatioBytes.length;
|
|
@@ -1309,7 +1246,9 @@ contract GenArt721CoreV3_Engine is
|
|
|
1309
1246
|
function updateProjectBaseURI(
|
|
1310
1247
|
uint256 _projectId,
|
|
1311
1248
|
string memory _newBaseURI
|
|
1312
|
-
) external
|
|
1249
|
+
) external {
|
|
1250
|
+
_onlyArtist(_projectId);
|
|
1251
|
+
_onlyNonEmptyString(_newBaseURI);
|
|
1313
1252
|
projects[_projectId].projectBaseURI = _newBaseURI;
|
|
1314
1253
|
emit ProjectUpdated(_projectId, FIELD_PROJECT_BASE_URI);
|
|
1315
1254
|
}
|
|
@@ -1320,13 +1259,9 @@ contract GenArt721CoreV3_Engine is
|
|
|
1320
1259
|
* projects. Token URIs are determined by their project's `projectBaseURI`.
|
|
1321
1260
|
* @param _defaultBaseURI New default base URI.
|
|
1322
1261
|
*/
|
|
1323
|
-
function updateDefaultBaseURI(
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
external
|
|
1327
|
-
onlyAdminACL(this.updateDefaultBaseURI.selector)
|
|
1328
|
-
onlyNonEmptyString(_defaultBaseURI)
|
|
1329
|
-
{
|
|
1262
|
+
function updateDefaultBaseURI(string memory _defaultBaseURI) external {
|
|
1263
|
+
_onlyAdminACL(this.updateDefaultBaseURI.selector);
|
|
1264
|
+
_onlyNonEmptyString(_defaultBaseURI);
|
|
1330
1265
|
_updateDefaultBaseURI(_defaultBaseURI);
|
|
1331
1266
|
}
|
|
1332
1267
|
|
|
@@ -1603,6 +1538,7 @@ contract GenArt721CoreV3_Engine is
|
|
|
1603
1538
|
)
|
|
1604
1539
|
external
|
|
1605
1540
|
view
|
|
1541
|
+
override(IGenArt721CoreContractV3_Base, IDependencyRegistryCompatibleV0)
|
|
1606
1542
|
returns (
|
|
1607
1543
|
string memory scriptTypeAndVersion,
|
|
1608
1544
|
string memory aspectRatio,
|
|
@@ -1640,7 +1576,7 @@ contract GenArt721CoreV3_Engine is
|
|
|
1640
1576
|
if (_index >= project.scriptCount) {
|
|
1641
1577
|
return "";
|
|
1642
1578
|
}
|
|
1643
|
-
return project.scriptBytecodeAddresses[_index]
|
|
1579
|
+
return _readFromBytecode(project.scriptBytecodeAddresses[_index]);
|
|
1644
1580
|
}
|
|
1645
1581
|
|
|
1646
1582
|
/**
|
|
@@ -1709,9 +1645,9 @@ contract GenArt721CoreV3_Engine is
|
|
|
1709
1645
|
)
|
|
1710
1646
|
external
|
|
1711
1647
|
view
|
|
1712
|
-
onlyValidTokenId(_tokenId)
|
|
1713
1648
|
returns (address payable[] memory recipients, uint256[] memory bps)
|
|
1714
1649
|
{
|
|
1650
|
+
_onlyValidTokenId(_tokenId);
|
|
1715
1651
|
// initialize arrays with maximum potential length
|
|
1716
1652
|
recipients = new address payable[](4);
|
|
1717
1653
|
bps = new uint256[](4);
|
|
@@ -1923,7 +1859,8 @@ contract GenArt721CoreV3_Engine is
|
|
|
1923
1859
|
*/
|
|
1924
1860
|
function tokenURI(
|
|
1925
1861
|
uint256 _tokenId
|
|
1926
|
-
) public view override
|
|
1862
|
+
) public view override returns (string memory) {
|
|
1863
|
+
_onlyValidTokenId(_tokenId);
|
|
1927
1864
|
string memory _projectBaseURI = projects[tokenIdToProjectId(_tokenId)]
|
|
1928
1865
|
.projectBaseURI;
|
|
1929
1866
|
return string.concat(_projectBaseURI, _tokenId.toString());
|
|
@@ -2009,7 +1946,7 @@ contract GenArt721CoreV3_Engine is
|
|
|
2009
1946
|
* perform input validation where applicable.
|
|
2010
1947
|
*/
|
|
2011
1948
|
function _updateRandomizerAddress(address _randomizerAddress) internal {
|
|
2012
|
-
randomizerContract =
|
|
1949
|
+
randomizerContract = IRandomizer_V3CoreBase(_randomizerAddress);
|
|
2013
1950
|
// populate historical randomizer array
|
|
2014
1951
|
_historicalRandomizerAddresses.push(_randomizerAddress);
|
|
2015
1952
|
emit PlatformUpdated(FIELD_RANDOMIZER_ADDRESS);
|
|
@@ -2047,9 +1984,9 @@ contract GenArt721CoreV3_Engine is
|
|
|
2047
1984
|
* @return bool true if project is unlocked, false otherwise.
|
|
2048
1985
|
* @dev This also enforces that the `_projectId` passed in is valid.
|
|
2049
1986
|
*/
|
|
2050
|
-
function _projectUnlocked(
|
|
2051
|
-
|
|
2052
|
-
|
|
1987
|
+
function _projectUnlocked(uint256 _projectId) internal view returns (bool) {
|
|
1988
|
+
_onlyValidProjectId(_projectId);
|
|
1989
|
+
|
|
2053
1990
|
uint256 projectCompletedTimestamp = projects[_projectId]
|
|
2054
1991
|
.completedTimestamp;
|
|
2055
1992
|
bool projectOpen = projectCompletedTimestamp == 0;
|
|
@@ -2058,4 +1995,14 @@ contract GenArt721CoreV3_Engine is
|
|
|
2058
1995
|
(block.timestamp - projectCompletedTimestamp <
|
|
2059
1996
|
FOUR_WEEKS_IN_SECONDS);
|
|
2060
1997
|
}
|
|
1998
|
+
|
|
1999
|
+
/**
|
|
2000
|
+
* Helper for calling `BytecodeStorageReader` external library reader method,
|
|
2001
|
+
* added for bytecode size reduction purposes.
|
|
2002
|
+
*/
|
|
2003
|
+
function _readFromBytecode(
|
|
2004
|
+
address _address
|
|
2005
|
+
) internal view returns (string memory) {
|
|
2006
|
+
return BytecodeStorageReader.readFromBytecode(_address);
|
|
2007
|
+
}
|
|
2061
2008
|
}
|