@artblocks/contracts 1.1.0 → 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 +273 -155
- 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/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExpSettlement}/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +3 -3
- 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 +567 -206
- package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +787 -224
- package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +38 -8
- 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 +38 -8
- package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +36 -68
- 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/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +58 -45
- 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/IPseudorandomAtomic.sol/IPseudorandomAtomic.json +1 -1
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol/ISharedMinterDAExpSettlementV0.json +18 -0
- 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 +1 -1
- 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 +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/DALib.sol/DALib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol/GenericMinterEventsLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +2 -2
- 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 +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +2 -2
- package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
- package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterRAMV0.sol/MinterRAMV0.json +1374 -0
- package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +7 -7
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +2 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +2 -2
- 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 +2 -2
- 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/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 +2 -2
- package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancyMerkleMockShared.sol/ReentrancyMerkleMockShared.json +2 -2
- package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancyMockShared.sol/ReentrancyMockShared.json +2 -2
- package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancySEAMockShared.sol/ReentrancySEAAutoBidderMockShared.json +2 -2
- 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 +2 -2
- 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 +687 -408
- 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 +8 -8
- 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 +894 -488
- package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +1054 -650
- package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +3 -3
- package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +1 -1
- package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +2 -2
- 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/IDependencyRegistryV0.sol +47 -45
- 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/IPseudorandomAtomic.sol +1 -3
- package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +19 -0
- 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 -4
- package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +12 -6
- 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 +18 -4
- 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/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 +10 -12
- package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +4 -9
- package/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol +44 -44
- package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +64 -63
- package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +14 -10
- package/contracts/libs/v0.8.x/minter-libs/RAMLib.sol +2927 -0
- package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +60 -62
- package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +4 -8
- package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +92 -89
- package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +21 -15
- package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +5 -4
- package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +16 -10
- package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +2 -2
- package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +19 -15
- package/contracts/minter-suite/Minters/MinterDAExpV5.sol +2 -2
- package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +2 -2
- package/contracts/minter-suite/Minters/MinterDALinV5.sol +2 -2
- package/contracts/minter-suite/Minters/MinterRAMV0.sol +1205 -0
- package/contracts/minter-suite/Minters/MinterSEAV1.sol +21 -32
- package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +17 -8
- package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +2 -2
- package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +2 -2
- package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +23 -9
- package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +2 -2
- package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +2 -2
- 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/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/ReentrancySplitterMocks.sol +67 -0
- package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +1 -1
- package/contracts/randomizer/shared/SharedRandomizerV0.sol +1 -1
- 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 +62 -34
- 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/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/archive/readme.md +0 -16
- package/contracts/engine/README.md +0 -21
- package/contracts/royalty-registry/GenArt721RoyaltyOverride.sol +0 -168
- package/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol +0 -221
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
// Creatd By: Art Blocks Inc.
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
import {Split} from "./ISplitAtomicV0.sol";
|
|
7
|
+
|
|
8
|
+
interface ISplitAtomicFactoryV0 {
|
|
9
|
+
/**
|
|
10
|
+
* @notice This contract was deployed.
|
|
11
|
+
* @param implementation address with the implementation of the contract
|
|
12
|
+
* @param type_ type of this contract
|
|
13
|
+
* @param requiredSplitAddress address that must be included in all splits
|
|
14
|
+
* @param requiredSplitBasisPoints basis points that must be included in
|
|
15
|
+
* all splits
|
|
16
|
+
*/
|
|
17
|
+
event Deployed(
|
|
18
|
+
address indexed implementation,
|
|
19
|
+
bytes32 indexed type_,
|
|
20
|
+
address requiredSplitAddress,
|
|
21
|
+
uint16 requiredSplitBasisPoints
|
|
22
|
+
);
|
|
23
|
+
/**
|
|
24
|
+
* @notice New split atomic contract was created.
|
|
25
|
+
* @param splitAtomic address of the newly created split atomic contract
|
|
26
|
+
*/
|
|
27
|
+
event SplitAtomicCreated(address indexed splitAtomic);
|
|
28
|
+
/**
|
|
29
|
+
* @notice This contract was abandoned and no longer can be used to create
|
|
30
|
+
* new split atomic contracts.
|
|
31
|
+
*/
|
|
32
|
+
event Abandoned();
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @notice Initializes the contract with the provided `splits`.
|
|
36
|
+
* Only callable once.
|
|
37
|
+
* @param splits Splits to configure the contract with. Must add up to
|
|
38
|
+
* 10_000 BPS.
|
|
39
|
+
* @return splitAtomic The address of the newly created split atomic
|
|
40
|
+
* contract
|
|
41
|
+
*/
|
|
42
|
+
function createSplit(
|
|
43
|
+
Split[] calldata splits
|
|
44
|
+
) external returns (address splitAtomic);
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @notice The implementation contract that is cloned when creating new
|
|
48
|
+
* split atomic contracts.
|
|
49
|
+
*/
|
|
50
|
+
function splitAtomicImplementation() external view returns (address);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @notice The address that must be included in all splits.
|
|
54
|
+
*/
|
|
55
|
+
function requiredSplitAddress() external view returns (address);
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @notice The basis points that must be included in all splits, for the
|
|
59
|
+
* required split address.
|
|
60
|
+
*/
|
|
61
|
+
function requiredSplitBasisPoints() external view returns (uint16);
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @notice The deployer of the contract.
|
|
65
|
+
*/
|
|
66
|
+
function deployer() external view returns (address);
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @notice Indicates whether the contract is abandoned.
|
|
70
|
+
* Once abandoned, the contract can no longer be used to create new split
|
|
71
|
+
* atomic contracts.
|
|
72
|
+
* @return bool True if the contract is abandoned, false otherwise.
|
|
73
|
+
*/
|
|
74
|
+
function isAbandoned() external view returns (bool);
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @notice Indicates the type of the contract, e.g. `SplitAtomicFactoryV0`.
|
|
78
|
+
* @return type_ The type of the contract.
|
|
79
|
+
*/
|
|
80
|
+
function type_() external pure returns (bytes32);
|
|
81
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
// Creatd By: Art Blocks Inc.
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @notice Struct representing a split.
|
|
8
|
+
* @param recipient The address to send funds to.
|
|
9
|
+
* @param basisPoints The basis points to allocate to recipient (1-10_000).
|
|
10
|
+
*/
|
|
11
|
+
struct Split {
|
|
12
|
+
// address to send funds to
|
|
13
|
+
address payable recipient;
|
|
14
|
+
// basis points to allocate to recipient (1-10_000)
|
|
15
|
+
uint16 basisPoints;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface ISplitAtomicV0 {
|
|
19
|
+
/**
|
|
20
|
+
* @notice Indicates that the contract has been initialized.
|
|
21
|
+
* @param type_ The type of the contract.
|
|
22
|
+
*/
|
|
23
|
+
event Initialized(bytes32 type_);
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @notice Indicates that the contract's balance manually was drained of
|
|
27
|
+
* ETH.
|
|
28
|
+
*/
|
|
29
|
+
event DrainedETH();
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @notice Indicates that the contract's balance manually was drained of
|
|
33
|
+
* ERC20 token at address `ERC20TokenAddress`.
|
|
34
|
+
* @param ERC20TokenAddress The address of the ERC20 token that was
|
|
35
|
+
* drained.
|
|
36
|
+
*/
|
|
37
|
+
event DrainedERC20(address ERC20TokenAddress);
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @notice Initializes the contract with the provided `splits`.
|
|
41
|
+
* This function should be called atomically, immediately after deployment.
|
|
42
|
+
* Only callable once.
|
|
43
|
+
* @param splits Splits to configure the contract with. Must add up to
|
|
44
|
+
* 10_000 BPS.
|
|
45
|
+
*/
|
|
46
|
+
function initialize(Split[] calldata splits) external;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @notice Drains the contract's ETH balance to the configured `splits`.
|
|
50
|
+
* Reverts if not initialized.
|
|
51
|
+
*/
|
|
52
|
+
function drainETH() external;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @notice Drains the contract's balance of an input ERC20 token to the
|
|
56
|
+
* configured `splits`. Reverts if not initialized.
|
|
57
|
+
* @param ERC20TokenAddress The address of the ERC20 token to split.
|
|
58
|
+
*/
|
|
59
|
+
function drainERC20(address ERC20TokenAddress) external;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @notice Returns the configured `splits`.
|
|
63
|
+
* @return Split[] memory The configured `splits`.
|
|
64
|
+
*/
|
|
65
|
+
function getSplits() external view returns (Split[] memory);
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @notice Indicates the type of the contract, e.g. `SplitAtomicV0`.
|
|
69
|
+
* @return type_ The type of the contract.
|
|
70
|
+
*/
|
|
71
|
+
function type_() external pure returns (bytes32);
|
|
72
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
// Creatd By: Art Blocks Inc.
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
import {ISplitFactoryV2} from "./integration-refs/splits-0x-v2/ISplitFactoryV2.sol";
|
|
7
|
+
|
|
8
|
+
interface ISplitProviderV0 {
|
|
9
|
+
/**
|
|
10
|
+
* @notice SplitInputs struct defines the inputs for requested splitters.
|
|
11
|
+
* It is defined in a way easily communicated from the Art Blocks GenArt721V3 contract,
|
|
12
|
+
* to allow for easy integration and minimal additional bytecode in the GenArt721V3 contract.
|
|
13
|
+
*/
|
|
14
|
+
struct SplitInputs {
|
|
15
|
+
address platformProviderSecondarySalesAddress;
|
|
16
|
+
uint16 platformProviderSecondarySalesBPS;
|
|
17
|
+
address renderProviderSecondarySalesAddress;
|
|
18
|
+
uint16 renderProviderSecondarySalesBPS;
|
|
19
|
+
uint8 artistTotalRoyaltyPercentage;
|
|
20
|
+
address artist;
|
|
21
|
+
address additionalPayee;
|
|
22
|
+
uint8 additionalPayeePercentage;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @notice Emitted when a new splitter contract is created.
|
|
27
|
+
* @param splitter address of the splitter contract
|
|
28
|
+
*/
|
|
29
|
+
event SplitterCreated(address indexed splitter);
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @notice Gets or creates an immutable splitter contract at a deterministic address.
|
|
33
|
+
* Splits in the splitter contract are determined by the input split parameters,
|
|
34
|
+
* so we can safely create the splitter contract at a deterministic address (or use
|
|
35
|
+
* the existing splitter contract if it already exists at that address).
|
|
36
|
+
* @dev Uses the 0xSplits v2 implementation to create a splitter contract
|
|
37
|
+
* @param splitInputs The split input parameters.
|
|
38
|
+
* @return splitter The newly created splitter contract address.
|
|
39
|
+
*/
|
|
40
|
+
function getOrCreateSplitter(
|
|
41
|
+
SplitInputs calldata splitInputs
|
|
42
|
+
) external returns (address);
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @notice Indicates the type of the contract, e.g. `SplitProviderV0`.
|
|
46
|
+
* @return type_ The type of the contract.
|
|
47
|
+
*/
|
|
48
|
+
function type_() external pure returns (bytes32);
|
|
49
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
// Created By: Art Blocks Inc. to support the 0xSplits V2 integration
|
|
3
|
+
// Sourced from:
|
|
4
|
+
// - https://github.com/0xSplits/splits-contracts-monorepo/blob/main/packages/splits-v2/src/libraries/SplitV2.sol
|
|
5
|
+
// - https://github.com/0xSplits/splits-contracts-monorepo/blob/main/packages/splits-v2/src/splitters/SplitFactoryV2.sol
|
|
6
|
+
|
|
7
|
+
pragma solidity ^0.8.0;
|
|
8
|
+
|
|
9
|
+
interface ISplitFactoryV2 {
|
|
10
|
+
/* -------------------------------------------------------------------------- */
|
|
11
|
+
/* STRUCTS */
|
|
12
|
+
/* -------------------------------------------------------------------------- */
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @notice Split struct
|
|
16
|
+
* @dev This struct is used to store the split information.
|
|
17
|
+
* @dev There are no hard caps on the number of recipients/totalAllocation/allocation unit. Thus the chain and its
|
|
18
|
+
* gas limits will dictate these hard caps. Please double check if the split you are creating can be distributed on
|
|
19
|
+
* the chain.
|
|
20
|
+
* @param recipients The recipients of the split.
|
|
21
|
+
* @param allocations The allocations of the split.
|
|
22
|
+
* @param totalAllocation The total allocation of the split.
|
|
23
|
+
* @param distributionIncentive The incentive for distribution. Limits max incentive to 6.5%.
|
|
24
|
+
*/
|
|
25
|
+
struct Split {
|
|
26
|
+
address[] recipients;
|
|
27
|
+
uint256[] allocations;
|
|
28
|
+
uint256 totalAllocation;
|
|
29
|
+
uint16 distributionIncentive;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* -------------------------------------------------------------------------- */
|
|
33
|
+
/* FUNCTIONS */
|
|
34
|
+
/* -------------------------------------------------------------------------- */
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @notice Create a new split with params and owner.
|
|
38
|
+
* @param _splitParams Params to create split with.
|
|
39
|
+
* @param _owner Owner of created split.
|
|
40
|
+
* @param _creator Creator of created split.
|
|
41
|
+
* @param _salt Salt for create2.
|
|
42
|
+
* @return split Address of the created split.
|
|
43
|
+
*/
|
|
44
|
+
function createSplitDeterministic(
|
|
45
|
+
Split calldata _splitParams,
|
|
46
|
+
address _owner,
|
|
47
|
+
address _creator,
|
|
48
|
+
bytes32 _salt
|
|
49
|
+
) external returns (address split);
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @notice Predict the address of a new split and check if it is deployed.
|
|
53
|
+
* @param _splitParams Params to create split with.
|
|
54
|
+
* @param _owner Owner of created split.
|
|
55
|
+
* @param _salt Salt for create2.
|
|
56
|
+
*/
|
|
57
|
+
function isDeployed(
|
|
58
|
+
Split calldata _splitParams,
|
|
59
|
+
address _owner,
|
|
60
|
+
bytes32 _salt
|
|
61
|
+
) external view returns (address split, bool exists);
|
|
62
|
+
}
|
|
@@ -21,10 +21,8 @@ library ABHelpers {
|
|
|
21
21
|
uint256 tokenId
|
|
22
22
|
) internal pure returns (uint256) {
|
|
23
23
|
// int division properly rounds down
|
|
24
|
-
// @dev
|
|
25
|
-
|
|
26
|
-
return tokenId / ONE_MILLION;
|
|
27
|
-
}
|
|
24
|
+
// @dev no way to disable division by zero check in solidity v0.8.24, so not unchecked
|
|
25
|
+
return tokenId / ONE_MILLION;
|
|
28
26
|
}
|
|
29
27
|
|
|
30
28
|
/**
|
|
@@ -39,6 +37,22 @@ library ABHelpers {
|
|
|
39
37
|
return tokenId % ONE_MILLION;
|
|
40
38
|
}
|
|
41
39
|
|
|
40
|
+
/**
|
|
41
|
+
* @notice Function to convert token id to token invocation.
|
|
42
|
+
* @dev token invocation is the token number plus one, because token #0 is
|
|
43
|
+
* invocation 1.
|
|
44
|
+
* @param tokenId The id of the token.
|
|
45
|
+
*/
|
|
46
|
+
function tokenIdToTokenInvocation(
|
|
47
|
+
uint256 tokenId
|
|
48
|
+
) internal pure returns (uint256) {
|
|
49
|
+
unchecked {
|
|
50
|
+
// mod returns remainder, which is the token number
|
|
51
|
+
// @dev no way to disable mod zero check in solidity, unchecked to optimize gas for addition
|
|
52
|
+
return (tokenId % ONE_MILLION) + 1;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
42
56
|
/**
|
|
43
57
|
* @notice Function to convert project id and token number to token id.
|
|
44
58
|
* @param projectId The id of the project.
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
// Created By: Art Blocks Inc.
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @dev Library for using uint256 as a mapping to 256 bool values via a bit map.
|
|
8
|
+
* This is useful for storing a large number of bool values in a compact way.
|
|
9
|
+
* @dev This implementation is similar to OpenZeppelin's BitMaps library, but a
|
|
10
|
+
* single uint256 is used directly in memory instead of operating within a
|
|
11
|
+
* a mapping within a storage struct.
|
|
12
|
+
* This design limits the number of indices to 256, but is more gas efficient
|
|
13
|
+
* for use cases that fit within that limit. This is especially true for
|
|
14
|
+
* operations that require many reads/writes, since SLOAD/SSTORE can be managed
|
|
15
|
+
* outside of the library.
|
|
16
|
+
*/
|
|
17
|
+
library BitMaps256 {
|
|
18
|
+
/**
|
|
19
|
+
* @notice Checks if the bit at a specific index in the bit map is set.
|
|
20
|
+
* A bit is considered set if it is 1, and unset if it is 0.
|
|
21
|
+
* @param bitMap BitMap to check.
|
|
22
|
+
* @param index The index of the bit to check.
|
|
23
|
+
* @return Indicating if the bit at the specified index is set, false otherwise.
|
|
24
|
+
*/
|
|
25
|
+
function get(uint256 bitMap, uint8 index) internal pure returns (bool) {
|
|
26
|
+
uint256 mask = 1 << index;
|
|
27
|
+
return bitMap & mask != 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @notice Sets the bit at a specific index in the bit map to 1.
|
|
32
|
+
* This function creates a new bit map where the bit at the specified index is set,
|
|
33
|
+
* leaving other bits unchanged.
|
|
34
|
+
* @param bitMap The original BitMap.
|
|
35
|
+
* @param index The index of the bit to set.
|
|
36
|
+
* @return newBitMap The new bit map after setting the bit at the specified index.
|
|
37
|
+
*/
|
|
38
|
+
function set(
|
|
39
|
+
uint256 bitMap,
|
|
40
|
+
uint8 index
|
|
41
|
+
) internal pure returns (uint256 newBitMap) {
|
|
42
|
+
uint256 mask = 1 << index;
|
|
43
|
+
return bitMap | mask;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @notice Unsets the bit at a specific index in the bit map, setting it to 0.
|
|
48
|
+
* This function creates a new bit map where the bit at the specified index is unset,
|
|
49
|
+
* leaving other bits unchanged.
|
|
50
|
+
* @param bitMap The original BitMap.
|
|
51
|
+
* @param index The index of the bit to unset.
|
|
52
|
+
* @return newBitMap The new bit map after unsetting the bit at the specified index.
|
|
53
|
+
*/
|
|
54
|
+
function unset(
|
|
55
|
+
uint256 bitMap,
|
|
56
|
+
uint8 index
|
|
57
|
+
) internal pure returns (uint256 newBitMap) {
|
|
58
|
+
uint256 mask = 1 << index;
|
|
59
|
+
return bitMap & ~mask;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @notice Finds the index of the first bit that is set in the bit map
|
|
64
|
+
* starting from a given index.
|
|
65
|
+
* Returns (255, false) if no set bits were found.
|
|
66
|
+
* @param bitMap BitMap to search
|
|
67
|
+
* @param startIndex Index to start searching from, inclusive
|
|
68
|
+
* @return minIndex Index of first set bit, or 255 if no bits were found
|
|
69
|
+
* @return foundSetBit True if a set bit was found, false otherwise
|
|
70
|
+
*/
|
|
71
|
+
function minBitSet(
|
|
72
|
+
uint256 bitMap,
|
|
73
|
+
uint8 startIndex
|
|
74
|
+
) internal pure returns (uint256 minIndex, bool foundSetBit) {
|
|
75
|
+
// check if there's any set bit at or above startIndex
|
|
76
|
+
if ((bitMap >> startIndex) == 0) {
|
|
77
|
+
return (255, false);
|
|
78
|
+
}
|
|
79
|
+
minIndex = startIndex;
|
|
80
|
+
// @dev this is a linear search, optimized to start only if there's a set bit at or above startIndex
|
|
81
|
+
// worst case 255 iterations in memory
|
|
82
|
+
while (minIndex < 255 && !get(bitMap, uint8(minIndex))) {
|
|
83
|
+
minIndex++;
|
|
84
|
+
}
|
|
85
|
+
foundSetBit = get(bitMap, uint8(minIndex));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* @notice Finds the index of the highest bit that is set in the bit map
|
|
90
|
+
* starting from a given index and counting down.
|
|
91
|
+
* Returns (0, false) if no set bits were found.
|
|
92
|
+
* @param bitMap BitMap to search
|
|
93
|
+
* @param startIndex Index to start searching from, inclusive
|
|
94
|
+
* @return maxIndex Index of last set bit, or 0 if no bits were found
|
|
95
|
+
* @return foundSetBit True if a set bit was found, false otherwise
|
|
96
|
+
*/
|
|
97
|
+
function maxBitSet(
|
|
98
|
+
uint256 bitMap,
|
|
99
|
+
uint8 startIndex
|
|
100
|
+
) internal pure returns (uint256 maxIndex, bool foundSetBit) {
|
|
101
|
+
if ((bitMap << (255 - startIndex)) == 0) {
|
|
102
|
+
return (0, false);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
maxIndex = startIndex;
|
|
106
|
+
// @dev this is a linear search, worst case 255 iterations in memory
|
|
107
|
+
while (maxIndex > 0 && !get(bitMap, uint8(maxIndex))) {
|
|
108
|
+
maxIndex--;
|
|
109
|
+
}
|
|
110
|
+
foundSetBit = get(bitMap, uint8(maxIndex));
|
|
111
|
+
}
|
|
112
|
+
}
|