@artblocks/contracts 1.0.4 → 1.2.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 +75 -7
- 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 +336 -131
- package/artifacts/contracts/archive/GenArt721CoreV3.sol/GenArt721CoreV3.json +2047 -0
- package/artifacts/contracts/archive/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +2021 -0
- package/artifacts/contracts/{minter-suite → archive/minter-suite}/Minters/MinterBase_v0_1_1.sol/MinterBase.json +1 -1
- 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/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExp}/MinterDAExpV4.sol/MinterDAExpV4.json +3 -3
- 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 +1109 -0
- 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/{minter-suite/Minters → archive/minter-suite/Minters/MinterDALin}/MinterDALinV4.sol/MinterDALinV4.json +3 -3
- 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/{minter-suite/Minters → archive/minter-suite/Minters/MinterHolder}/MinterHolderV4.sol/MinterHolderV4.json +3 -3
- 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/{minter-suite/Minters → archive/minter-suite/Minters/MinterMerkle}/MinterMerkleV5.sol/MinterMerkleV5.json +3 -3
- package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +31 -63
- package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol/MinterPolyptychV0.json +3 -3
- package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSEA}/MinterSEAV0.sol/MinterSEAV0.json +3 -3
- 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/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPrice}/MinterSetPriceV4.sol/MinterSetPriceV4.json +3 -3
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol/MinterSetPriceERC20V0.json +65 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol/MinterSetPriceERC20V1.json +65 -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 +807 -0
- package/artifacts/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol/GenArt721MinterBurner_PBAB.json +65 -2
- package/artifacts/contracts/engine/V2/GenArt721Minter_PBAB.sol/GenArt721Minter_PBAB.json +65 -2
- package/artifacts/contracts/engine/V3/EngineFactoryV0.sol/EngineFactoryV0.json +606 -0
- package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +565 -209
- package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +785 -227
- package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +40 -15
- 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 +40 -15
- package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +36 -68
- package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +12 -12
- package/artifacts/contracts/interfaces/v0.8.x/IAdminACLV0_Extended.sol/IAdminACLV0_Extended.json +140 -0
- package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol/IBytecodeStorageReaderV2.json +130 -0
- package/artifacts/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol/ICoreRegistryV1.json +6 -6
- package/artifacts/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +71 -39
- package/artifacts/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol/IEngineFactoryV0.json +283 -0
- package/artifacts/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV0.sol/IFilteredMinterDAExpSettlementV0.json +12 -12
- package/artifacts/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV1.sol/IFilteredMinterDAExpSettlementV1.json +12 -12
- package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +30 -62
- package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +30 -62
- package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +170 -104
- package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +170 -104
- package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.json +1028 -0
- package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol/IGenArt721CoreContractV3_Engine_PreV3p2.json +741 -0
- package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_ProjectFinance.sol/IGenArt721CoreContractV3_ProjectFinance.json +87 -0
- package/artifacts/contracts/interfaces/v0.8.x/IGenArt721Minter_PBAB.sol/IGenArt721Minter_PBAB.json +279 -0
- package/artifacts/contracts/interfaces/v0.8.x/IMinterFilterV1.sol/IMinterFilterV1.json +22 -22
- package/artifacts/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol/IPseudorandomAtomic.json +1 -1
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol/ISharedMinterDAExpSettlementV0.json +26 -101
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol/ISharedMinterDAExpV0.json +1 -57
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol/ISharedMinterDALinV0.json +1 -57
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol/ISharedMinterDAV0.json +2 -21
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol/ISharedMinterHolderERC20V0.json +158 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol/ISharedMinterHolderV0.json +15 -90
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol/ISharedMinterMerkleV0.json +10 -36
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterRAMV0.sol/ISharedMinterRAMV0.json +62 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterRequired.sol/ISharedMinterRequired.json +37 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol/ISharedMinterSEAV0.json +4 -236
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol/ISharedMinterSimplePurchaseV0.json +5 -5
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterV0.sol/ISharedMinterV0.json +7 -423
- package/artifacts/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol/ISharedRandomizerV0.json +17 -17
- package/artifacts/contracts/interfaces/v0.8.x/ISplitAtomicFactoryV0.sol/ISplitAtomicFactoryV0.json +170 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISplitAtomicV0.sol/ISplitAtomicV0.json +126 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISplitProviderV0.sol/ISplitProviderV0.json +98 -0
- package/artifacts/contracts/interfaces/v0.8.x/integration-refs/splits-0x-v2/ISplitFactoryV2.sol/ISplitFactoryV2.json +123 -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 +2 -2
- package/artifacts/contracts/libs/v0.8.x/ABHelpers.sol/ABHelpers.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/BitMap.sol/BitMaps256.json +10 -0
- package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV0.sol/BytecodeStorage.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageReader.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageWriter.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageReader.json +214 -0
- package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageWriter.json +10 -0
- package/artifacts/contracts/libs/v0.8.x/Bytes32Strings.sol/Bytes32Strings.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol/DependencyRegistryStorageLib.json +10 -0
- package/artifacts/contracts/libs/v0.8.x/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/ERC721_PackedHashSeedV1.sol/ERC721_PackedHashSeedV1.json +444 -0
- package/artifacts/contracts/libs/v0.8.x/PackedBools.sol/PackedBools.json +10 -0
- package/artifacts/contracts/libs/v0.8.x/SSTORE2.sol/SSTORE2.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/V3FlexLib.sol/V3FlexLib.json +208 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol/DAExpLib.json +60 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/DALib.sol/DALib.json +30 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +60 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol/GenericMinterEventsLib.json +346 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +29 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +30 -3
- 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 +398 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +254 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +48 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +41 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +35 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +79 -3
- package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
- package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +41 -41
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +66 -632
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +67 -594
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +33 -524
- package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +66 -632
- package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +33 -524
- package/artifacts/contracts/minter-suite/Minters/MinterRAMV0.sol/MinterRAMV0.json +1374 -0
- package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +56 -722
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +58 -454
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +61 -552
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +55 -497
- package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +110 -571
- package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +69 -560
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +28 -444
- package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol/MinterSetPriceV5_SingleCore.json +417 -0
- package/artifacts/contracts/mock/BytecodeV2LibCallsMock.sol/BytecodeV2LibCallsMock.json +154 -0
- package/artifacts/contracts/mock/BytecodeV2TextCR_DMock.sol/BytecodeV2TextCR_DMock.json +428 -0
- package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
- package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +2 -2
- package/artifacts/contracts/mock/ForceSendMock.sol/ForceSendMock.json +24 -0
- package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +4 -9
- package/artifacts/contracts/mock/Mock0xSplitsV2PullFactory.sol/Mock0xSplitsV2PullFactory.json +149 -0
- package/artifacts/contracts/mock/Mock0xSplitsV2Splitter.sol/Mock0xSplitsV2Splitter.json +99 -0
- package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +20 -2
- package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +20 -2
- package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +2 -2
- package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancyGenArt721MinterMock.sol/ReentrancyGenArt721MinterMock.json +100 -0
- package/artifacts/contracts/mock/ReentrancyHolderMock.sol/ReentrancyHolderMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancyHolderMockShared.sol/ReentrancyHolderMockShared.json +136 -0
- package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancyMerkleMockShared.sol/ReentrancyMerkleMockShared.json +105 -0
- package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancyMockShared.sol/ReentrancyMockShared.json +100 -0
- package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancySEAMockShared.sol/ReentrancySEAAutoBidderMockShared.json +69 -0
- package/artifacts/contracts/mock/ReentrancySplitterMocks.sol/ReentrancySplitterDrainETHMock.json +54 -0
- package/artifacts/contracts/mock/ReentrancySplitterMocks.sol/ReentrancySplitterSendETHMock.json +54 -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/primitive/PseudorandomAtomicBasic.sol/PseudorandomAtomic.json +2 -2
- package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +19 -19
- package/artifacts/contracts/split/SplitAtomicFactoryV0.sol/SplitAtomicFactoryV0.json +203 -0
- package/artifacts/contracts/split/SplitAtomicV0.sol/SplitAtomicV0.json +168 -0
- package/artifacts/contracts/split/split-provider/SplitProviderV0.sol/SplitProviderV0.json +141 -0
- package/contracts/AdminACLV0.sol +6 -2
- package/contracts/AdminACLV1.sol +2 -2
- package/contracts/DependencyRegistryV0.sol +737 -390
- package/contracts/{GenArt721CoreV3.sol → archive/GenArt721CoreV3.sol} +56 -20
- package/contracts/{explorations → archive}/GenArt721CoreV3_Explorations.sol +49 -13
- package/contracts/{minter-suite → archive/minter-suite}/Minters/MinterBase_v0_1_1.sol +4 -4
- package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExp}/MinterDAExpV4.sol +4 -4
- package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +4 -4
- package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol +5 -5
- package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExpSettlement}/MinterDAExpSettlementV2.sol +9 -62
- package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDALin}/MinterDALinV4.sol +4 -4
- package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterHolder}/MinterHolderV4.sol +5 -5
- package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterMerkle}/MinterMerkleV5.sol +5 -5
- package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol +7 -7
- package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSEA}/MinterSEAV0.sol +13 -13
- package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPrice}/MinterSetPriceV4.sol +4 -4
- package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol +82 -10
- package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol +82 -10
- package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPriceERC20}/MinterSetPriceERC20V4.sol +88 -21
- package/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol +81 -22
- package/contracts/engine/V2/GenArt721Minter_PBAB.sol +80 -22
- package/contracts/engine/V3/EngineFactoryV0.sol +419 -0
- package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +893 -493
- package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +1053 -655
- package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +7 -13
- package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +5 -11
- package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +2 -2
- package/contracts/engine-registry/CoreRegistryV1.sol +58 -65
- package/contracts/interfaces/v0.8.x/IAdminACLV0_Extended.sol +20 -0
- package/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol +23 -0
- package/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol +6 -8
- package/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol +48 -43
- package/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol +124 -0
- package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV0.sol +1 -3
- package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV1.sol +1 -3
- package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpV1.sol +1 -3
- package/contracts/interfaces/v0.8.x/IFilteredMinterDALinV1.sol +1 -3
- package/contracts/interfaces/v0.8.x/IFilteredMinterHolderV2.sol +1 -3
- package/contracts/interfaces/v0.8.x/IFilteredMinterMerkleV2.sol +1 -3
- package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol +115 -11
- package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol +84 -8
- package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol +26 -8
- package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol +141 -0
- package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol +78 -0
- package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_ProjectFinance.sol +47 -0
- package/contracts/interfaces/v0.8.x/IGenArt721Minter_PBAB.sol +91 -0
- package/contracts/interfaces/v0.8.x/IMinterFilterV1.sol +25 -25
- package/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol +1 -3
- package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +30 -20
- package/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol +1 -14
- package/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol +1 -15
- package/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol +2 -8
- package/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol +47 -0
- package/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol +15 -43
- package/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol +10 -20
- package/contracts/interfaces/v0.8.x/ISharedMinterRAMV0.sol +23 -0
- package/contracts/interfaces/v0.8.x/ISharedMinterRequired.sol +20 -0
- package/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol +1 -67
- package/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol +5 -5
- package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +18 -160
- package/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol +37 -37
- package/contracts/interfaces/v0.8.x/ISplitAtomicFactoryV0.sol +81 -0
- package/contracts/interfaces/v0.8.x/ISplitAtomicV0.sol +72 -0
- package/contracts/interfaces/v0.8.x/ISplitProviderV0.sol +49 -0
- package/contracts/interfaces/v0.8.x/integration-refs/splits-0x-v2/ISplitFactoryV2.sol +62 -0
- package/contracts/libs/v0.8.x/ABHelpers.sol +31 -17
- package/contracts/libs/v0.8.x/AuthLib.sol +101 -102
- package/contracts/libs/v0.8.x/BitMap.sol +112 -0
- package/contracts/libs/v0.8.x/BytecodeStorageV2.sol +593 -0
- package/contracts/libs/v0.8.x/Bytes32Strings.sol +5 -5
- package/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol +90 -0
- package/contracts/libs/v0.8.x/ERC721_PackedHashSeedV1.sol +591 -0
- package/contracts/libs/v0.8.x/PackedBools.sol +42 -0
- package/contracts/libs/v0.8.x/V3FlexLib.sol +591 -0
- package/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol +162 -39
- package/contracts/libs/v0.8.x/minter-libs/DALib.sol +26 -0
- package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +139 -37
- package/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol +171 -0
- package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +299 -158
- package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +268 -55
- package/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol +138 -58
- package/contracts/libs/v0.8.x/minter-libs/RAMLib.sol +2927 -0
- package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +796 -123
- package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +131 -13
- package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +607 -224
- package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +494 -330
- package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +217 -78
- package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +358 -309
- package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +391 -491
- package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +396 -632
- package/contracts/minter-suite/Minters/MinterDAExpV5.sol +212 -273
- package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +393 -488
- package/contracts/minter-suite/Minters/MinterDALinV5.sol +220 -277
- package/contracts/minter-suite/Minters/MinterRAMV0.sol +1205 -0
- package/contracts/minter-suite/Minters/MinterSEAV1.sol +329 -677
- package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +287 -303
- package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +355 -446
- package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +328 -416
- package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +552 -622
- package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +429 -553
- package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +180 -227
- package/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol +446 -0
- package/contracts/mock/BytecodeV2LibCallsMock.sol +128 -0
- package/contracts/mock/BytecodeV2TextCR_DMock.sol +316 -0
- package/contracts/mock/ForceSendMock.sol +22 -0
- package/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol +3 -10
- package/contracts/mock/Mock0xSplitsV2PullFactory.sol +75 -0
- package/contracts/mock/Mock0xSplitsV2Splitter.sol +47 -0
- package/contracts/mock/MockAdminACLV0.sol +21 -0
- package/contracts/mock/MockAdminACLV0_PROHIBITION.sol +21 -0
- package/contracts/mock/ReentrancyGenArt721MinterMock.sol +47 -0
- package/contracts/mock/ReentrancyHolderMockShared.sol +59 -0
- package/contracts/mock/ReentrancyMerkleMockShared.sol +58 -0
- package/contracts/mock/ReentrancyMockShared.sol +48 -0
- package/contracts/mock/ReentrancySEAMockShared.sol +40 -0
- package/contracts/mock/ReentrancySplitterMocks.sol +67 -0
- package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +1 -1
- package/contracts/randomizer/shared/SharedRandomizerV0.sol +79 -71
- package/contracts/split/SplitAtomicFactoryV0.sol +121 -0
- package/contracts/split/SplitAtomicV0.sol +265 -0
- package/contracts/split/split-provider/SplitProviderV0.sol +201 -0
- package/package.json +79 -45
- package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +0 -1965
- package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +0 -1939
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +0 -1127
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +0 -768
- package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +0 -208
- package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol/GenArt721RoyaltyOverride_PBAB.json +0 -301
- package/contracts/royalty-registry/GenArt721RoyaltyOverride.sol +0 -168
- package/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol +0 -221
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
// Created By: Art Blocks Inc.
|
|
3
|
+
|
|
4
|
+
import "../interfaces/v0.8.x/ISharedMinterMerkleV0.sol";
|
|
5
|
+
|
|
6
|
+
pragma solidity ^0.8.0;
|
|
7
|
+
|
|
8
|
+
contract ReentrancyMerkleMockShared {
|
|
9
|
+
uint256 public currentQtyToPurchase;
|
|
10
|
+
uint256 public currentProjectId;
|
|
11
|
+
address public currentCoreContract;
|
|
12
|
+
uint256 public currentPriceToPay;
|
|
13
|
+
bytes32[3] currentProof;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
@notice This function can be called to induce controlled reentrency attacks
|
|
17
|
+
on the shared AB minter filter suite.
|
|
18
|
+
Note that _priceToPay should be > project price per token to induce refund,
|
|
19
|
+
making reentrency possible via fallback function.
|
|
20
|
+
*/
|
|
21
|
+
function attack(
|
|
22
|
+
uint256 _qtyToPurchase,
|
|
23
|
+
address _minterContractAddress,
|
|
24
|
+
uint256 _projectId,
|
|
25
|
+
address _coreContract,
|
|
26
|
+
uint256 _priceToPay,
|
|
27
|
+
bytes32[] memory _proof
|
|
28
|
+
) external payable {
|
|
29
|
+
// update state variables so that receive() knows what to do
|
|
30
|
+
currentQtyToPurchase = _qtyToPurchase;
|
|
31
|
+
currentProjectId = _projectId;
|
|
32
|
+
currentCoreContract = _coreContract;
|
|
33
|
+
currentPriceToPay = _priceToPay;
|
|
34
|
+
currentProof[0] = _proof[0];
|
|
35
|
+
currentProof[1] = _proof[1];
|
|
36
|
+
currentProof[2] = _proof[2];
|
|
37
|
+
ISharedMinterMerkleV0(_minterContractAddress).purchase{
|
|
38
|
+
value: _priceToPay
|
|
39
|
+
}(_projectId, _coreContract, _proof);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// receiver is called when minter sends refunded Ether to this contract.
|
|
43
|
+
receive() external payable {
|
|
44
|
+
// decrement num to be purchased
|
|
45
|
+
currentQtyToPurchase--;
|
|
46
|
+
if (currentQtyToPurchase > 0) {
|
|
47
|
+
// rebuild _proof
|
|
48
|
+
bytes32[] memory _proof = new bytes32[](3);
|
|
49
|
+
_proof[0] = currentProof[0];
|
|
50
|
+
_proof[1] = currentProof[1];
|
|
51
|
+
_proof[2] = currentProof[2];
|
|
52
|
+
// purchase again!
|
|
53
|
+
ISharedMinterMerkleV0(msg.sender).purchase{
|
|
54
|
+
value: currentPriceToPay
|
|
55
|
+
}(currentProjectId, currentCoreContract, _proof);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
// Created By: Art Blocks Inc.
|
|
3
|
+
|
|
4
|
+
import "../interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol";
|
|
5
|
+
|
|
6
|
+
pragma solidity ^0.8.0;
|
|
7
|
+
|
|
8
|
+
contract ReentrancyMockShared {
|
|
9
|
+
uint256 public currentQtyToPurchase;
|
|
10
|
+
uint256 public currentProjectId;
|
|
11
|
+
address public currentCoreContract;
|
|
12
|
+
uint256 public currentPriceToPay;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
@notice This function can be called to induce controlled reentrency attacks
|
|
16
|
+
on the shared AB minter filter suite.
|
|
17
|
+
Note that _priceToPay should be > project price per token to induce refund,
|
|
18
|
+
making reentrency possible via fallback function.
|
|
19
|
+
*/
|
|
20
|
+
function attack(
|
|
21
|
+
uint256 _qtyToPurchase,
|
|
22
|
+
address _minterContractAddress,
|
|
23
|
+
uint256 _projectId,
|
|
24
|
+
address _coreContract,
|
|
25
|
+
uint256 _priceToPay
|
|
26
|
+
) external payable {
|
|
27
|
+
// update state variables so that receive() knows what to do
|
|
28
|
+
currentQtyToPurchase = _qtyToPurchase;
|
|
29
|
+
currentProjectId = _projectId;
|
|
30
|
+
currentCoreContract = _coreContract;
|
|
31
|
+
currentPriceToPay = _priceToPay;
|
|
32
|
+
ISharedMinterSimplePurchaseV0(_minterContractAddress).purchase{
|
|
33
|
+
value: _priceToPay
|
|
34
|
+
}(_projectId, _coreContract);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// receiver is called when minter sends refunded Ether to this contract.
|
|
38
|
+
receive() external payable {
|
|
39
|
+
// decrement num to be purchased
|
|
40
|
+
currentQtyToPurchase--;
|
|
41
|
+
if (currentQtyToPurchase > 0) {
|
|
42
|
+
// purchase again!
|
|
43
|
+
ISharedMinterSimplePurchaseV0(msg.sender).purchase{
|
|
44
|
+
value: currentPriceToPay
|
|
45
|
+
}(currentProjectId, currentCoreContract);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
// Created By: Art Blocks Inc.
|
|
3
|
+
|
|
4
|
+
import "../interfaces/v0.8.x/ISharedMinterSEAV0.sol";
|
|
5
|
+
|
|
6
|
+
pragma solidity ^0.8.0;
|
|
7
|
+
|
|
8
|
+
contract ReentrancySEAAutoBidderMockShared {
|
|
9
|
+
uint256 public targetTokenId;
|
|
10
|
+
address public targetCoreContract;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
@notice This function can be called to induce controlled reentrency attacks
|
|
14
|
+
on AB minter filter suite.
|
|
15
|
+
Note that _priceToPay should be > project price per token to induce refund,
|
|
16
|
+
making reentrency possible via fallback function.
|
|
17
|
+
*/
|
|
18
|
+
function attack(
|
|
19
|
+
uint256 _targetTokenId,
|
|
20
|
+
address _targetCoreContract,
|
|
21
|
+
address _minterContractAddress,
|
|
22
|
+
uint256 _initialBidValue
|
|
23
|
+
) external payable {
|
|
24
|
+
targetTokenId = _targetTokenId;
|
|
25
|
+
targetCoreContract = _targetCoreContract;
|
|
26
|
+
ISharedMinterSEAV0(_minterContractAddress).createBid{
|
|
27
|
+
value: _initialBidValue
|
|
28
|
+
}(_targetTokenId, _targetCoreContract);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// receiver is called when minter sends refunded Ether to this contract, when outbid
|
|
32
|
+
receive() external payable {
|
|
33
|
+
// auto-rebid
|
|
34
|
+
uint256 newBidValue = (msg.value * 110) / 100;
|
|
35
|
+
ISharedMinterSEAV0(msg.sender).createBid{value: newBidValue}(
|
|
36
|
+
targetTokenId,
|
|
37
|
+
targetCoreContract
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
// Created By: Art Blocks Inc.
|
|
3
|
+
|
|
4
|
+
import "../interfaces/v0.8.x/ISplitAtomicV0.sol";
|
|
5
|
+
|
|
6
|
+
pragma solidity ^0.8.0;
|
|
7
|
+
|
|
8
|
+
contract ReentrancySplitterSendETHMock {
|
|
9
|
+
address public currentSplitterAddress;
|
|
10
|
+
bool public haveReentered;
|
|
11
|
+
|
|
12
|
+
receive() external payable {
|
|
13
|
+
// only re-enter once to prevent infinite loop
|
|
14
|
+
if (haveReentered) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
// update state
|
|
18
|
+
haveReentered = true;
|
|
19
|
+
// re-enter via sending ETH to splitter's receive function
|
|
20
|
+
(bool success, ) = currentSplitterAddress.call{value: msg.value}("");
|
|
21
|
+
require(success, "attack failed");
|
|
22
|
+
// reset state
|
|
23
|
+
haveReentered = false;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
@notice This function can be called to induce controlled reentrency attacks
|
|
28
|
+
on AB minter filter suite.
|
|
29
|
+
Note that _priceToPay should be > project price per token to induce refund,
|
|
30
|
+
making reentrency possible via fallback function.
|
|
31
|
+
*/
|
|
32
|
+
function attack(address splitterAddress) external payable {
|
|
33
|
+
currentSplitterAddress = splitterAddress;
|
|
34
|
+
(bool success, ) = splitterAddress.call{value: msg.value}("");
|
|
35
|
+
require(success, "attack failed");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
contract ReentrancySplitterDrainETHMock {
|
|
40
|
+
address public currentSplitterAddress;
|
|
41
|
+
bool public haveReentered;
|
|
42
|
+
|
|
43
|
+
receive() external payable {
|
|
44
|
+
// only re-enter once to prevent infinite loop
|
|
45
|
+
if (haveReentered) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// update state
|
|
49
|
+
haveReentered = true;
|
|
50
|
+
// re-enter via calling splitter's drainETH function
|
|
51
|
+
ISplitAtomicV0(currentSplitterAddress).drainETH();
|
|
52
|
+
// reset state
|
|
53
|
+
haveReentered = false;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
@notice This function can be called to induce controlled reentrency attacks
|
|
58
|
+
on AB minter filter suite.
|
|
59
|
+
Note that _priceToPay should be > project price per token to induce refund,
|
|
60
|
+
making reentrency possible via fallback function.
|
|
61
|
+
*/
|
|
62
|
+
function attack(address splitterAddress) external payable {
|
|
63
|
+
currentSplitterAddress = splitterAddress;
|
|
64
|
+
(bool success, ) = splitterAddress.call{value: msg.value}("");
|
|
65
|
+
require(success, "attack failed");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -10,7 +10,7 @@ import "../../interfaces/v0.8.x/IPseudorandomAtomic.sol";
|
|
|
10
10
|
* @author Art Blocks Inc.
|
|
11
11
|
* @notice This contract atomically returns a pseudorandom value.
|
|
12
12
|
*/
|
|
13
|
-
contract PseudorandomAtomic {
|
|
13
|
+
contract PseudorandomAtomic is IPseudorandomAtomic {
|
|
14
14
|
// base class that returns
|
|
15
15
|
function getPseudorandomAtomic(
|
|
16
16
|
bytes32 _entropy
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
2
|
// Creatd By: Art Blocks Inc.
|
|
3
3
|
|
|
4
|
+
// @dev fixed to specific solidity version for clarity and for more clear
|
|
5
|
+
// source code verification purposes.
|
|
4
6
|
pragma solidity 0.8.19;
|
|
5
7
|
|
|
6
8
|
import "../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
|
|
@@ -59,26 +61,26 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
|
|
|
59
61
|
// @dev this mapping is only used when the project is configured as using
|
|
60
62
|
// a hash seed setter contract. It is not populated when the project is
|
|
61
63
|
// using pseudorandomAtomicContract.
|
|
62
|
-
mapping(address => mapping(uint256 => bytes12))
|
|
64
|
+
mapping(address coreContract => mapping(uint256 tokenId => bytes12 preAssignedHashSeed))
|
|
63
65
|
private _preAssignedHashSeeds;
|
|
64
66
|
|
|
65
67
|
// mapping of core contract => project ID => usesHashSeedSetter Contract
|
|
66
|
-
mapping(address => mapping(uint256 => bool))
|
|
68
|
+
mapping(address coreContract => mapping(uint256 projectId => bool usesHashSeedSetter))
|
|
67
69
|
private _projectUsesHashSeedSetter;
|
|
68
70
|
|
|
69
71
|
// mapping of core contract => projectId => hash seed setter contract
|
|
70
|
-
mapping(address => mapping(uint256 => address))
|
|
72
|
+
mapping(address coreContract => mapping(uint256 projectId => address hashSeedSetterContract))
|
|
71
73
|
private _hashSeedSetterContracts;
|
|
72
74
|
|
|
73
75
|
// modifier to restrict access to only Artist allowed calls
|
|
74
76
|
function _onlyArtist(
|
|
75
|
-
address
|
|
76
|
-
uint256
|
|
77
|
+
address coreContract,
|
|
78
|
+
uint256 projectId
|
|
77
79
|
) internal view {
|
|
78
80
|
require(
|
|
79
81
|
msg.sender ==
|
|
80
|
-
IGenArt721CoreContractV3_Base(
|
|
81
|
-
.projectIdToArtistAddress(
|
|
82
|
+
IGenArt721CoreContractV3_Base(coreContract)
|
|
83
|
+
.projectIdToArtistAddress(projectId),
|
|
82
84
|
"Only Artist"
|
|
83
85
|
);
|
|
84
86
|
}
|
|
@@ -86,32 +88,32 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
|
|
|
86
88
|
/**
|
|
87
89
|
* Modifier to restrict access to only calls by the hash seed setter
|
|
88
90
|
* contract of a given project.
|
|
89
|
-
* @param
|
|
90
|
-
* @param
|
|
91
|
+
* @param coreContract core contract address associated with the project
|
|
92
|
+
* @param projectId project ID being set
|
|
91
93
|
*/
|
|
92
94
|
function _onlyHashSeedSetterContract(
|
|
93
|
-
address
|
|
94
|
-
uint256
|
|
95
|
+
address coreContract,
|
|
96
|
+
uint256 projectId
|
|
95
97
|
) internal view {
|
|
96
98
|
require(
|
|
97
|
-
msg.sender == _hashSeedSetterContracts[
|
|
99
|
+
msg.sender == _hashSeedSetterContracts[coreContract][projectId],
|
|
98
100
|
"Only Hash Seed Setter Contract"
|
|
99
101
|
);
|
|
100
102
|
}
|
|
101
103
|
|
|
102
104
|
/**
|
|
103
105
|
*
|
|
104
|
-
* @param
|
|
106
|
+
* @param pseudorandomAtomicContract_ Address of the pseudorandom atomic
|
|
105
107
|
* contract to use for atomically generating random values. This contract
|
|
106
108
|
* does not have an owner, and therefore the pseudorandom atomic contract
|
|
107
109
|
* address cannot be changed after deployment.
|
|
108
110
|
*/
|
|
109
|
-
constructor(address
|
|
111
|
+
constructor(address pseudorandomAtomicContract_) {
|
|
110
112
|
pseudorandomAtomicContract = IPseudorandomAtomic(
|
|
111
|
-
|
|
113
|
+
pseudorandomAtomicContract_
|
|
112
114
|
);
|
|
113
115
|
emit PseudorandomAtomicContractUpdated({
|
|
114
|
-
pseudorandomAtomicContract:
|
|
116
|
+
pseudorandomAtomicContract: pseudorandomAtomicContract_
|
|
115
117
|
});
|
|
116
118
|
}
|
|
117
119
|
|
|
@@ -119,18 +121,18 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
|
|
|
119
121
|
* @inheritdoc ISharedRandomizerV0
|
|
120
122
|
*/
|
|
121
123
|
function setHashSeedSetterContract(
|
|
122
|
-
address
|
|
123
|
-
uint256
|
|
124
|
-
address
|
|
124
|
+
address coreContract,
|
|
125
|
+
uint256 projectId,
|
|
126
|
+
address hashSeedSetterContract
|
|
125
127
|
) external {
|
|
126
|
-
_onlyArtist(
|
|
127
|
-
_hashSeedSetterContracts[
|
|
128
|
-
|
|
129
|
-
] =
|
|
128
|
+
_onlyArtist({projectId: projectId, coreContract: coreContract});
|
|
129
|
+
_hashSeedSetterContracts[coreContract][
|
|
130
|
+
projectId
|
|
131
|
+
] = hashSeedSetterContract;
|
|
130
132
|
emit HashSeedSetterForProjectUpdated({
|
|
131
|
-
coreContract:
|
|
132
|
-
projectId:
|
|
133
|
-
hashSeedSetterContract:
|
|
133
|
+
coreContract: coreContract,
|
|
134
|
+
projectId: projectId,
|
|
135
|
+
hashSeedSetterContract: hashSeedSetterContract
|
|
134
136
|
});
|
|
135
137
|
}
|
|
136
138
|
|
|
@@ -138,18 +140,18 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
|
|
|
138
140
|
* @inheritdoc ISharedRandomizerV0
|
|
139
141
|
*/
|
|
140
142
|
function toggleProjectUseAssignedHashSeed(
|
|
141
|
-
address
|
|
142
|
-
uint256
|
|
143
|
+
address coreContract,
|
|
144
|
+
uint256 projectId
|
|
143
145
|
) external {
|
|
144
|
-
_onlyArtist(
|
|
145
|
-
_projectUsesHashSeedSetter[
|
|
146
|
-
|
|
147
|
-
] = !_projectUsesHashSeedSetter[
|
|
146
|
+
_onlyArtist({projectId: projectId, coreContract: coreContract});
|
|
147
|
+
_projectUsesHashSeedSetter[coreContract][
|
|
148
|
+
projectId
|
|
149
|
+
] = !_projectUsesHashSeedSetter[coreContract][projectId];
|
|
148
150
|
emit ProjectUsingHashSeedSetterUpdated({
|
|
149
|
-
coreContract:
|
|
150
|
-
projectId:
|
|
151
|
-
usingHashSeedSetter: _projectUsesHashSeedSetter[
|
|
152
|
-
|
|
151
|
+
coreContract: coreContract,
|
|
152
|
+
projectId: projectId,
|
|
153
|
+
usingHashSeedSetter: _projectUsesHashSeedSetter[coreContract][
|
|
154
|
+
projectId
|
|
153
155
|
]
|
|
154
156
|
});
|
|
155
157
|
}
|
|
@@ -158,13 +160,16 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
|
|
|
158
160
|
* @inheritdoc ISharedRandomizerV0
|
|
159
161
|
*/
|
|
160
162
|
function preSetHashSeed(
|
|
161
|
-
address
|
|
162
|
-
uint256
|
|
163
|
-
bytes12
|
|
163
|
+
address coreContract,
|
|
164
|
+
uint256 tokenId,
|
|
165
|
+
bytes12 hashSeed
|
|
164
166
|
) external {
|
|
165
|
-
uint256 projectId = _tokenIdToProjectId(
|
|
166
|
-
_onlyHashSeedSetterContract(
|
|
167
|
-
|
|
167
|
+
uint256 projectId = _tokenIdToProjectId(tokenId);
|
|
168
|
+
_onlyHashSeedSetterContract({
|
|
169
|
+
projectId: projectId,
|
|
170
|
+
coreContract: coreContract
|
|
171
|
+
});
|
|
172
|
+
_preAssignedHashSeeds[coreContract][tokenId] = hashSeed;
|
|
168
173
|
// @dev event indicating token hash seed assigned is not required for
|
|
169
174
|
// subgraph indexing because token hash seeds are still assigned
|
|
170
175
|
// atomically in `assignTokenHash` function. If token hash seeds were
|
|
@@ -175,7 +180,7 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
|
|
|
175
180
|
/**
|
|
176
181
|
* @inheritdoc IRandomizer_V3CoreBase
|
|
177
182
|
*/
|
|
178
|
-
function assignTokenHash(uint256
|
|
183
|
+
function assignTokenHash(uint256 tokenId) external {
|
|
179
184
|
// @dev This function is not specifically gated to any specific caller,
|
|
180
185
|
// but will only call back to the calling contract, `msg.sender`, to
|
|
181
186
|
// set the specified token's hash seed.
|
|
@@ -183,78 +188,81 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
|
|
|
183
188
|
// the token hash seed on a different core contract.
|
|
184
189
|
// @dev variables are named to improve readability
|
|
185
190
|
address coreContract = msg.sender;
|
|
186
|
-
uint256 projectId = _tokenIdToProjectId(
|
|
191
|
+
uint256 projectId = _tokenIdToProjectId(tokenId);
|
|
187
192
|
bytes32 hashSeed;
|
|
188
193
|
if (_projectUsesHashSeedSetter[coreContract][projectId]) {
|
|
189
|
-
hashSeed = _preAssignedHashSeeds[coreContract][
|
|
194
|
+
hashSeed = _preAssignedHashSeeds[coreContract][tokenId];
|
|
190
195
|
} else {
|
|
191
|
-
hashSeed = _getPseudorandomAtomic(
|
|
196
|
+
hashSeed = _getPseudorandomAtomic({
|
|
197
|
+
coreContract: coreContract,
|
|
198
|
+
tokenId: tokenId
|
|
199
|
+
});
|
|
192
200
|
}
|
|
193
201
|
// verify that the hash seed is non-zero
|
|
194
202
|
require(hashSeed != 0, "Only non-zero hash seed");
|
|
195
203
|
// assign the token hash seed on the core contract
|
|
196
|
-
IGenArt721CoreContractV3_Base(coreContract).setTokenHash_8PT(
|
|
197
|
-
_tokenId,
|
|
198
|
-
hashSeed
|
|
199
|
-
);
|
|
204
|
+
IGenArt721CoreContractV3_Base(coreContract).setTokenHash_8PT({
|
|
205
|
+
_tokenId: tokenId,
|
|
206
|
+
_hash: hashSeed
|
|
207
|
+
});
|
|
200
208
|
}
|
|
201
209
|
|
|
202
210
|
/**
|
|
203
211
|
* @inheritdoc ISharedRandomizerV0
|
|
204
212
|
*/
|
|
205
213
|
function projectUsesHashSeedSetter(
|
|
206
|
-
address
|
|
207
|
-
uint256
|
|
208
|
-
) external view returns (bool
|
|
209
|
-
return _projectUsesHashSeedSetter[
|
|
214
|
+
address coreContract,
|
|
215
|
+
uint256 projectId
|
|
216
|
+
) external view returns (bool usingHashSeedSetter) {
|
|
217
|
+
return _projectUsesHashSeedSetter[coreContract][projectId];
|
|
210
218
|
}
|
|
211
219
|
|
|
212
220
|
/**
|
|
213
221
|
* @inheritdoc ISharedRandomizerV0
|
|
214
222
|
*/
|
|
215
223
|
function hashSeedSetterContracts(
|
|
216
|
-
address
|
|
217
|
-
uint256
|
|
224
|
+
address coreContract,
|
|
225
|
+
uint256 projectId
|
|
218
226
|
) external view returns (address _hashSeedSetterContract) {
|
|
219
|
-
return _hashSeedSetterContracts[
|
|
227
|
+
return _hashSeedSetterContracts[coreContract][projectId];
|
|
220
228
|
}
|
|
221
229
|
|
|
222
230
|
/**
|
|
223
231
|
* @inheritdoc ISharedRandomizerV0
|
|
224
232
|
*/
|
|
225
233
|
function preAssignedHashSeed(
|
|
226
|
-
address
|
|
227
|
-
uint256
|
|
234
|
+
address coreContract,
|
|
235
|
+
uint256 tokenId
|
|
228
236
|
) external view returns (bytes12 _hashSeed) {
|
|
229
|
-
return _preAssignedHashSeeds[
|
|
237
|
+
return _preAssignedHashSeeds[coreContract][tokenId];
|
|
230
238
|
}
|
|
231
239
|
|
|
232
240
|
/**
|
|
233
241
|
* @notice Internal function to atomically obtain a pseudorandom number
|
|
234
242
|
* from the configured pseudorandom contract.
|
|
235
|
-
* @param
|
|
243
|
+
* @param coreContract - The core contract that is requesting an atomic
|
|
236
244
|
* pseudorandom number.
|
|
237
|
-
* @param
|
|
245
|
+
* @param tokenId - The token ID on `coreContract` that is associated
|
|
238
246
|
* with the pseudorandom number request.
|
|
239
247
|
*/
|
|
240
248
|
function _getPseudorandomAtomic(
|
|
241
|
-
address
|
|
242
|
-
uint256
|
|
243
|
-
) internal
|
|
249
|
+
address coreContract,
|
|
250
|
+
uint256 tokenId
|
|
251
|
+
) internal returns (bytes32) {
|
|
244
252
|
return
|
|
245
253
|
pseudorandomAtomicContract.getPseudorandomAtomic(
|
|
246
|
-
keccak256(abi.encodePacked(
|
|
254
|
+
keccak256(abi.encodePacked(coreContract, tokenId))
|
|
247
255
|
);
|
|
248
256
|
}
|
|
249
257
|
|
|
250
258
|
/**
|
|
251
|
-
* @notice Gets the project ID for a given `
|
|
252
|
-
* @param
|
|
253
|
-
* @return projectId Project ID for given `
|
|
259
|
+
* @notice Gets the project ID for a given `tokenId`.
|
|
260
|
+
* @param tokenId Token ID to be queried.
|
|
261
|
+
* @return projectId Project ID for given `tokenId`.
|
|
254
262
|
*/
|
|
255
263
|
function _tokenIdToProjectId(
|
|
256
|
-
uint256
|
|
264
|
+
uint256 tokenId
|
|
257
265
|
) internal pure returns (uint256 projectId) {
|
|
258
|
-
return
|
|
266
|
+
return tokenId / ONE_MILLION;
|
|
259
267
|
}
|
|
260
268
|
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
// Created By: Art Blocks Inc.
|
|
3
|
+
|
|
4
|
+
// @dev fixed to specific solidity version for clarity and for more clear
|
|
5
|
+
// source code verification purposes.
|
|
6
|
+
pragma solidity 0.8.22;
|
|
7
|
+
|
|
8
|
+
import {ISplitAtomicV0, Split} from "../interfaces/v0.8.x/ISplitAtomicV0.sol";
|
|
9
|
+
import {ISplitAtomicFactoryV0} from "../interfaces/v0.8.x/ISplitAtomicFactoryV0.sol";
|
|
10
|
+
|
|
11
|
+
import {Clones} from "@openzeppelin-5.0/contracts/proxy/Clones.sol";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @title SplitAtomicFactoryV0
|
|
15
|
+
* @author Art Blocks Inc.
|
|
16
|
+
* @notice Factory contract for creating new split atomic contracts.
|
|
17
|
+
* @dev This contract is deployed once, and then used to create new split
|
|
18
|
+
* atomic contracts. The contract may be abandoned once it is no longer needed.
|
|
19
|
+
* Once abandoned, the contract can no longer be used to create new split
|
|
20
|
+
* atomic contracts.
|
|
21
|
+
* The contract is initialized with a required split address and basis points.
|
|
22
|
+
* All splits must include the required split address and basis points.
|
|
23
|
+
* The contract is initialized with an implementation contract, which is cloned
|
|
24
|
+
* when creating new split atomic contracts.
|
|
25
|
+
*/
|
|
26
|
+
contract SplitAtomicFactoryV0 is ISplitAtomicFactoryV0 {
|
|
27
|
+
// public type
|
|
28
|
+
bytes32 public constant type_ = "SplitAtomicFactoryV0";
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The implementation contract that is cloned when creating new split
|
|
32
|
+
* atomic contracts.
|
|
33
|
+
*/
|
|
34
|
+
address public immutable splitAtomicImplementation;
|
|
35
|
+
|
|
36
|
+
// required split address and basis points
|
|
37
|
+
// @dev make immutable to avoid SLOAD on every createSplit call
|
|
38
|
+
address public immutable requiredSplitAddress;
|
|
39
|
+
uint16 public immutable requiredSplitBasisPoints;
|
|
40
|
+
|
|
41
|
+
// deployer of the contract is the only one who may abandon the contract
|
|
42
|
+
address public immutable deployer;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Indicates whether the contract is abandoned.
|
|
46
|
+
* Once abandoned, the contract can no longer be used to create new split
|
|
47
|
+
* atomic contracts.
|
|
48
|
+
*/
|
|
49
|
+
bool public isAbandoned; // default false
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @notice validates and assigns immutable configuration variables
|
|
53
|
+
* @param splitAtomicImplementation_ address of the split atomic
|
|
54
|
+
* implementation contract
|
|
55
|
+
* @param requiredSplitAddress_ address that must be included in all splits
|
|
56
|
+
* @param requiredSplitBasisPoints_ basis points that must be included in
|
|
57
|
+
* all splits, for the required split address. Must be <= 10_000.
|
|
58
|
+
*/
|
|
59
|
+
constructor(
|
|
60
|
+
address splitAtomicImplementation_,
|
|
61
|
+
address requiredSplitAddress_,
|
|
62
|
+
uint16 requiredSplitBasisPoints_
|
|
63
|
+
) {
|
|
64
|
+
// input validation
|
|
65
|
+
require(
|
|
66
|
+
requiredSplitBasisPoints_ <= 10_000,
|
|
67
|
+
"only reqd split BPS <= 10_000"
|
|
68
|
+
);
|
|
69
|
+
splitAtomicImplementation = splitAtomicImplementation_;
|
|
70
|
+
requiredSplitAddress = requiredSplitAddress_;
|
|
71
|
+
requiredSplitBasisPoints = requiredSplitBasisPoints_;
|
|
72
|
+
deployer = msg.sender;
|
|
73
|
+
// emit event
|
|
74
|
+
emit Deployed({
|
|
75
|
+
implementation: splitAtomicImplementation_,
|
|
76
|
+
type_: type_,
|
|
77
|
+
requiredSplitAddress: requiredSplitAddress_,
|
|
78
|
+
requiredSplitBasisPoints: requiredSplitBasisPoints_
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @notice Creates a new split atomic contract with the provided `splits`.
|
|
84
|
+
* @param splits Splits to configure the contract with. Must add up to
|
|
85
|
+
* 10_000 BPS, and the first split must be the required split; reverts
|
|
86
|
+
* otherwise.
|
|
87
|
+
* @return splitAtomic The address of the newly created split atomic
|
|
88
|
+
* contract. The address is also emitted in the `SplitAtomicCreated` event.
|
|
89
|
+
*/
|
|
90
|
+
function createSplit(
|
|
91
|
+
Split[] calldata splits
|
|
92
|
+
) external returns (address splitAtomic) {
|
|
93
|
+
require(!isAbandoned, "factory is abandoned");
|
|
94
|
+
// validate first split is initial split
|
|
95
|
+
require(
|
|
96
|
+
splits[0].recipient == requiredSplitAddress &&
|
|
97
|
+
splits[0].basisPoints == requiredSplitBasisPoints,
|
|
98
|
+
"splits[0] must be required split"
|
|
99
|
+
);
|
|
100
|
+
// Create the EIP 1167 split atomic contract
|
|
101
|
+
splitAtomic = Clones.clone({implementation: splitAtomicImplementation});
|
|
102
|
+
// initialize the new split atomic contract
|
|
103
|
+
ISplitAtomicV0(splitAtomic).initialize(splits);
|
|
104
|
+
// emit event
|
|
105
|
+
emit SplitAtomicCreated(splitAtomic);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* @notice Abandons the contract, preventing it from being used to create
|
|
110
|
+
* new split atomic contracts.
|
|
111
|
+
* Only callable by the deployer, and only once; reverts otherwise.
|
|
112
|
+
*/
|
|
113
|
+
function abandon() external {
|
|
114
|
+
require(!isAbandoned, "factory is abandoned");
|
|
115
|
+
require(msg.sender == deployer, "only deployer may abandon");
|
|
116
|
+
// set isAbandoned to true
|
|
117
|
+
isAbandoned = true;
|
|
118
|
+
// emit event
|
|
119
|
+
emit Abandoned();
|
|
120
|
+
}
|
|
121
|
+
}
|