@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.
Files changed (289) hide show
  1. package/README.md +75 -7
  2. package/artifacts/contracts/AdminACLV0.sol/AdminACLV0.json +2 -2
  3. package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
  4. package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +336 -131
  5. package/artifacts/contracts/archive/GenArt721CoreV3.sol/GenArt721CoreV3.json +2047 -0
  6. package/artifacts/contracts/archive/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +2021 -0
  7. package/artifacts/contracts/{minter-suite → archive/minter-suite}/Minters/MinterBase_v0_1_1.sol/MinterBase.json +1 -1
  8. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
  9. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
  10. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExp}/MinterDAExpV4.sol/MinterDAExpV4.json +3 -3
  11. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  12. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  13. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +1109 -0
  14. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
  15. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
  16. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDALin}/MinterDALinV4.sol/MinterDALinV4.json +3 -3
  17. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
  18. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
  19. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
  20. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterHolder}/MinterHolderV4.sol/MinterHolderV4.json +3 -3
  21. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
  22. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
  23. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
  24. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
  25. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterMerkle}/MinterMerkleV5.sol/MinterMerkleV5.json +3 -3
  26. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +31 -63
  27. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol/MinterPolyptychV0.json +3 -3
  28. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSEA}/MinterSEAV0.sol/MinterSEAV0.json +3 -3
  29. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  30. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  31. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPrice}/MinterSetPriceV4.sol/MinterSetPriceV4.json +3 -3
  32. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol/MinterSetPriceERC20V0.json +65 -2
  33. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol/MinterSetPriceERC20V1.json +65 -2
  34. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  35. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  36. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +807 -0
  37. package/artifacts/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol/GenArt721MinterBurner_PBAB.json +65 -2
  38. package/artifacts/contracts/engine/V2/GenArt721Minter_PBAB.sol/GenArt721Minter_PBAB.json +65 -2
  39. package/artifacts/contracts/engine/V3/EngineFactoryV0.sol/EngineFactoryV0.json +606 -0
  40. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +565 -209
  41. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +785 -227
  42. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +40 -15
  43. package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +2 -2
  44. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +40 -15
  45. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +36 -68
  46. package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +12 -12
  47. package/artifacts/contracts/interfaces/v0.8.x/IAdminACLV0_Extended.sol/IAdminACLV0_Extended.json +140 -0
  48. package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol/IBytecodeStorageReaderV2.json +130 -0
  49. package/artifacts/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol/ICoreRegistryV1.json +6 -6
  50. package/artifacts/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +71 -39
  51. package/artifacts/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol/IEngineFactoryV0.json +283 -0
  52. package/artifacts/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV0.sol/IFilteredMinterDAExpSettlementV0.json +12 -12
  53. package/artifacts/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV1.sol/IFilteredMinterDAExpSettlementV1.json +12 -12
  54. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +30 -62
  55. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +30 -62
  56. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +170 -104
  57. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +170 -104
  58. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.json +1028 -0
  59. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol/IGenArt721CoreContractV3_Engine_PreV3p2.json +741 -0
  60. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_ProjectFinance.sol/IGenArt721CoreContractV3_ProjectFinance.json +87 -0
  61. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721Minter_PBAB.sol/IGenArt721Minter_PBAB.json +279 -0
  62. package/artifacts/contracts/interfaces/v0.8.x/IMinterFilterV1.sol/IMinterFilterV1.json +22 -22
  63. package/artifacts/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol/IPseudorandomAtomic.json +1 -1
  64. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol/ISharedMinterDAExpSettlementV0.json +26 -101
  65. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol/ISharedMinterDAExpV0.json +1 -57
  66. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol/ISharedMinterDALinV0.json +1 -57
  67. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol/ISharedMinterDAV0.json +2 -21
  68. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol/ISharedMinterHolderERC20V0.json +158 -0
  69. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol/ISharedMinterHolderV0.json +15 -90
  70. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol/ISharedMinterMerkleV0.json +10 -36
  71. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterRAMV0.sol/ISharedMinterRAMV0.json +62 -0
  72. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterRequired.sol/ISharedMinterRequired.json +37 -0
  73. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol/ISharedMinterSEAV0.json +4 -236
  74. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol/ISharedMinterSimplePurchaseV0.json +5 -5
  75. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterV0.sol/ISharedMinterV0.json +7 -423
  76. package/artifacts/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol/ISharedRandomizerV0.json +17 -17
  77. package/artifacts/contracts/interfaces/v0.8.x/ISplitAtomicFactoryV0.sol/ISplitAtomicFactoryV0.json +170 -0
  78. package/artifacts/contracts/interfaces/v0.8.x/ISplitAtomicV0.sol/ISplitAtomicV0.json +126 -0
  79. package/artifacts/contracts/interfaces/v0.8.x/ISplitProviderV0.sol/ISplitProviderV0.json +98 -0
  80. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/splits-0x-v2/ISplitFactoryV2.sol/ISplitFactoryV2.json +123 -0
  81. package/artifacts/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol/DelegationRegistry.json +2 -2
  82. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeMock.sol/GnosisSafeMock.json +2 -2
  83. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeProxyFactoryMock.sol/GnosisSafeProxyFactoryMock.json +2 -2
  84. package/artifacts/contracts/libs/integration-refs/gnosis-safe/MultiSendMock.sol/MultiSendMock.json +2 -2
  85. package/artifacts/contracts/libs/integration-refs/weth9/weth9.sol/WETH9_.json +2 -2
  86. package/artifacts/contracts/libs/v0.8.x/ABHelpers.sol/ABHelpers.json +2 -2
  87. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +2 -2
  88. package/artifacts/contracts/libs/v0.8.x/BitMap.sol/BitMaps256.json +10 -0
  89. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV0.sol/BytecodeStorage.json +2 -2
  90. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageReader.json +2 -2
  91. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageWriter.json +2 -2
  92. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageReader.json +214 -0
  93. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageWriter.json +10 -0
  94. package/artifacts/contracts/libs/v0.8.x/Bytes32Strings.sol/Bytes32Strings.json +2 -2
  95. package/artifacts/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol/DependencyRegistryStorageLib.json +10 -0
  96. package/artifacts/contracts/libs/v0.8.x/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +2 -2
  97. package/artifacts/contracts/libs/v0.8.x/ERC721_PackedHashSeedV1.sol/ERC721_PackedHashSeedV1.json +444 -0
  98. package/artifacts/contracts/libs/v0.8.x/PackedBools.sol/PackedBools.json +10 -0
  99. package/artifacts/contracts/libs/v0.8.x/SSTORE2.sol/SSTORE2.json +2 -2
  100. package/artifacts/contracts/libs/v0.8.x/V3FlexLib.sol/V3FlexLib.json +208 -0
  101. package/artifacts/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol/DAExpLib.json +60 -3
  102. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALib.sol/DALib.json +30 -0
  103. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +60 -3
  104. package/artifacts/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol/GenericMinterEventsLib.json +346 -0
  105. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +29 -3
  106. package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +30 -3
  107. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +2 -2
  108. package/artifacts/contracts/libs/v0.8.x/minter-libs/RAMLib.sol/RAMLib.json +398 -0
  109. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +254 -3
  110. package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +48 -3
  111. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +41 -3
  112. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +35 -3
  113. package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +79 -3
  114. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  115. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +41 -41
  116. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +66 -632
  117. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +67 -594
  118. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +33 -524
  119. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +66 -632
  120. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +33 -524
  121. package/artifacts/contracts/minter-suite/Minters/MinterRAMV0.sol/MinterRAMV0.json +1374 -0
  122. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +56 -722
  123. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +58 -454
  124. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +61 -552
  125. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +55 -497
  126. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +110 -571
  127. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +69 -560
  128. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +28 -444
  129. package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol/MinterSetPriceV5_SingleCore.json +417 -0
  130. package/artifacts/contracts/mock/BytecodeV2LibCallsMock.sol/BytecodeV2LibCallsMock.json +154 -0
  131. package/artifacts/contracts/mock/BytecodeV2TextCR_DMock.sol/BytecodeV2TextCR_DMock.json +428 -0
  132. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
  133. package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +2 -2
  134. package/artifacts/contracts/mock/ForceSendMock.sol/ForceSendMock.json +24 -0
  135. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +4 -9
  136. package/artifacts/contracts/mock/Mock0xSplitsV2PullFactory.sol/Mock0xSplitsV2PullFactory.json +149 -0
  137. package/artifacts/contracts/mock/Mock0xSplitsV2Splitter.sol/Mock0xSplitsV2Splitter.json +99 -0
  138. package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +20 -2
  139. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +20 -2
  140. package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +2 -2
  141. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  142. package/artifacts/contracts/mock/ReentrancyGenArt721MinterMock.sol/ReentrancyGenArt721MinterMock.json +100 -0
  143. package/artifacts/contracts/mock/ReentrancyHolderMock.sol/ReentrancyHolderMock.json +2 -2
  144. package/artifacts/contracts/mock/ReentrancyHolderMockShared.sol/ReentrancyHolderMockShared.json +136 -0
  145. package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
  146. package/artifacts/contracts/mock/ReentrancyMerkleMockShared.sol/ReentrancyMerkleMockShared.json +105 -0
  147. package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
  148. package/artifacts/contracts/mock/ReentrancyMockShared.sol/ReentrancyMockShared.json +100 -0
  149. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +2 -2
  150. package/artifacts/contracts/mock/ReentrancySEAMockShared.sol/ReentrancySEAAutoBidderMockShared.json +69 -0
  151. package/artifacts/contracts/mock/ReentrancySplitterMocks.sol/ReentrancySplitterDrainETHMock.json +54 -0
  152. package/artifacts/contracts/mock/ReentrancySplitterMocks.sol/ReentrancySplitterSendETHMock.json +54 -0
  153. package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +2 -2
  154. package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +2 -2
  155. package/artifacts/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol/PseudorandomAtomic.json +2 -2
  156. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +19 -19
  157. package/artifacts/contracts/split/SplitAtomicFactoryV0.sol/SplitAtomicFactoryV0.json +203 -0
  158. package/artifacts/contracts/split/SplitAtomicV0.sol/SplitAtomicV0.json +168 -0
  159. package/artifacts/contracts/split/split-provider/SplitProviderV0.sol/SplitProviderV0.json +141 -0
  160. package/contracts/AdminACLV0.sol +6 -2
  161. package/contracts/AdminACLV1.sol +2 -2
  162. package/contracts/DependencyRegistryV0.sol +737 -390
  163. package/contracts/{GenArt721CoreV3.sol → archive/GenArt721CoreV3.sol} +56 -20
  164. package/contracts/{explorations → archive}/GenArt721CoreV3_Explorations.sol +49 -13
  165. package/contracts/{minter-suite → archive/minter-suite}/Minters/MinterBase_v0_1_1.sol +4 -4
  166. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExp}/MinterDAExpV4.sol +4 -4
  167. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +4 -4
  168. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol +5 -5
  169. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExpSettlement}/MinterDAExpSettlementV2.sol +9 -62
  170. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDALin}/MinterDALinV4.sol +4 -4
  171. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterHolder}/MinterHolderV4.sol +5 -5
  172. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterMerkle}/MinterMerkleV5.sol +5 -5
  173. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol +7 -7
  174. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSEA}/MinterSEAV0.sol +13 -13
  175. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPrice}/MinterSetPriceV4.sol +4 -4
  176. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol +82 -10
  177. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol +82 -10
  178. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPriceERC20}/MinterSetPriceERC20V4.sol +88 -21
  179. package/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol +81 -22
  180. package/contracts/engine/V2/GenArt721Minter_PBAB.sol +80 -22
  181. package/contracts/engine/V3/EngineFactoryV0.sol +419 -0
  182. package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +893 -493
  183. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +1053 -655
  184. package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +7 -13
  185. package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +5 -11
  186. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +2 -2
  187. package/contracts/engine-registry/CoreRegistryV1.sol +58 -65
  188. package/contracts/interfaces/v0.8.x/IAdminACLV0_Extended.sol +20 -0
  189. package/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol +23 -0
  190. package/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol +6 -8
  191. package/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol +48 -43
  192. package/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol +124 -0
  193. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV0.sol +1 -3
  194. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV1.sol +1 -3
  195. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpV1.sol +1 -3
  196. package/contracts/interfaces/v0.8.x/IFilteredMinterDALinV1.sol +1 -3
  197. package/contracts/interfaces/v0.8.x/IFilteredMinterHolderV2.sol +1 -3
  198. package/contracts/interfaces/v0.8.x/IFilteredMinterMerkleV2.sol +1 -3
  199. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol +115 -11
  200. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol +84 -8
  201. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol +26 -8
  202. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol +141 -0
  203. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol +78 -0
  204. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_ProjectFinance.sol +47 -0
  205. package/contracts/interfaces/v0.8.x/IGenArt721Minter_PBAB.sol +91 -0
  206. package/contracts/interfaces/v0.8.x/IMinterFilterV1.sol +25 -25
  207. package/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol +1 -3
  208. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +30 -20
  209. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol +1 -14
  210. package/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol +1 -15
  211. package/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol +2 -8
  212. package/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol +47 -0
  213. package/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol +15 -43
  214. package/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol +10 -20
  215. package/contracts/interfaces/v0.8.x/ISharedMinterRAMV0.sol +23 -0
  216. package/contracts/interfaces/v0.8.x/ISharedMinterRequired.sol +20 -0
  217. package/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol +1 -67
  218. package/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol +5 -5
  219. package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +18 -160
  220. package/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol +37 -37
  221. package/contracts/interfaces/v0.8.x/ISplitAtomicFactoryV0.sol +81 -0
  222. package/contracts/interfaces/v0.8.x/ISplitAtomicV0.sol +72 -0
  223. package/contracts/interfaces/v0.8.x/ISplitProviderV0.sol +49 -0
  224. package/contracts/interfaces/v0.8.x/integration-refs/splits-0x-v2/ISplitFactoryV2.sol +62 -0
  225. package/contracts/libs/v0.8.x/ABHelpers.sol +31 -17
  226. package/contracts/libs/v0.8.x/AuthLib.sol +101 -102
  227. package/contracts/libs/v0.8.x/BitMap.sol +112 -0
  228. package/contracts/libs/v0.8.x/BytecodeStorageV2.sol +593 -0
  229. package/contracts/libs/v0.8.x/Bytes32Strings.sol +5 -5
  230. package/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol +90 -0
  231. package/contracts/libs/v0.8.x/ERC721_PackedHashSeedV1.sol +591 -0
  232. package/contracts/libs/v0.8.x/PackedBools.sol +42 -0
  233. package/contracts/libs/v0.8.x/V3FlexLib.sol +591 -0
  234. package/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol +162 -39
  235. package/contracts/libs/v0.8.x/minter-libs/DALib.sol +26 -0
  236. package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +139 -37
  237. package/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol +171 -0
  238. package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +299 -158
  239. package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +268 -55
  240. package/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol +138 -58
  241. package/contracts/libs/v0.8.x/minter-libs/RAMLib.sol +2927 -0
  242. package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +796 -123
  243. package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +131 -13
  244. package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +607 -224
  245. package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +494 -330
  246. package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +217 -78
  247. package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +358 -309
  248. package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +391 -491
  249. package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +396 -632
  250. package/contracts/minter-suite/Minters/MinterDAExpV5.sol +212 -273
  251. package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +393 -488
  252. package/contracts/minter-suite/Minters/MinterDALinV5.sol +220 -277
  253. package/contracts/minter-suite/Minters/MinterRAMV0.sol +1205 -0
  254. package/contracts/minter-suite/Minters/MinterSEAV1.sol +329 -677
  255. package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +287 -303
  256. package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +355 -446
  257. package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +328 -416
  258. package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +552 -622
  259. package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +429 -553
  260. package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +180 -227
  261. package/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol +446 -0
  262. package/contracts/mock/BytecodeV2LibCallsMock.sol +128 -0
  263. package/contracts/mock/BytecodeV2TextCR_DMock.sol +316 -0
  264. package/contracts/mock/ForceSendMock.sol +22 -0
  265. package/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol +3 -10
  266. package/contracts/mock/Mock0xSplitsV2PullFactory.sol +75 -0
  267. package/contracts/mock/Mock0xSplitsV2Splitter.sol +47 -0
  268. package/contracts/mock/MockAdminACLV0.sol +21 -0
  269. package/contracts/mock/MockAdminACLV0_PROHIBITION.sol +21 -0
  270. package/contracts/mock/ReentrancyGenArt721MinterMock.sol +47 -0
  271. package/contracts/mock/ReentrancyHolderMockShared.sol +59 -0
  272. package/contracts/mock/ReentrancyMerkleMockShared.sol +58 -0
  273. package/contracts/mock/ReentrancyMockShared.sol +48 -0
  274. package/contracts/mock/ReentrancySEAMockShared.sol +40 -0
  275. package/contracts/mock/ReentrancySplitterMocks.sol +67 -0
  276. package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +1 -1
  277. package/contracts/randomizer/shared/SharedRandomizerV0.sol +79 -71
  278. package/contracts/split/SplitAtomicFactoryV0.sol +121 -0
  279. package/contracts/split/SplitAtomicV0.sol +265 -0
  280. package/contracts/split/split-provider/SplitProviderV0.sol +201 -0
  281. package/package.json +79 -45
  282. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +0 -1965
  283. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +0 -1939
  284. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +0 -1127
  285. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +0 -768
  286. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +0 -208
  287. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol/GenArt721RoyaltyOverride_PBAB.json +0 -301
  288. package/contracts/royalty-registry/GenArt721RoyaltyOverride.sol +0 -168
  289. package/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol +0 -221
@@ -1,11 +1,14 @@
1
1
  // SPDX-License-Identifier: LGPL-3.0-only
2
2
  // Created By: Art Blocks Inc.
3
3
 
4
- import "@openzeppelin-4.5/contracts/utils/structs/EnumerableSet.sol";
5
- import "@openzeppelin-4.7/contracts/token/ERC721/IERC721.sol";
6
-
7
4
  pragma solidity ^0.8.0;
8
5
 
6
+ import {IERC721} from "@openzeppelin-4.7/contracts/token/ERC721/IERC721.sol";
7
+
8
+ import {ABHelpers} from "../ABHelpers.sol";
9
+
10
+ import {EnumerableSet} from "@openzeppelin-4.5/contracts/utils/structs/EnumerableSet.sol";
11
+
9
12
  /**
10
13
  * @title Art Blocks Token Holder Library
11
14
  * @notice This library provides a collection of functions for managing and
@@ -19,98 +22,193 @@ pragma solidity ^0.8.0;
19
22
 
20
23
  library TokenHolderLib {
21
24
  using EnumerableSet for EnumerableSet.AddressSet;
22
- // Define one million to represent the base token ID for each project.
23
- uint256 constant ONE_MILLION = 1_000_000;
25
+ /**
26
+ * @notice Notifies of the contracts' current delegation registry address.
27
+ * @param delegationRegistry The address of the delegation registry
28
+ */
29
+ event DelegationRegistryUpdated(address delegationRegistry);
30
+ /**
31
+ * @notice Allow holders of NFTs at addresses `ownedNFTAddresses`, project
32
+ * IDs `ownedNFTProjectIds` to mint on project `projectId`.
33
+ * `ownedNFTAddresses` assumed to be aligned with `ownedNFTProjectIds`.
34
+ * e.g. Allows holders of project `ownedNFTProjectIds[0]` on token
35
+ * contract `ownedNFTAddresses[0]` to mint.
36
+ * @param projectId Project ID to allowlist holders for.
37
+ * @param coreContract Core contract address to allowlist holders for.
38
+ * @param ownedNFTAddresses NFT core addresses of projects to be
39
+ * allowlisted. Indexes align with `ownedNFTProjectIds`.
40
+ * @param ownedNFTProjectIds Project IDs on `ownedNFTAddresses` whose
41
+ * holders shall be allowlisted to mint project `projectId`. Indexes
42
+ * align with `ownedNFTAddresses`.
43
+ */
44
+ event AllowedHoldersOfProjects(
45
+ uint256 indexed projectId,
46
+ address indexed coreContract,
47
+ address[] ownedNFTAddresses,
48
+ uint256[] ownedNFTProjectIds
49
+ );
50
+ /**
51
+ * @notice Remove holders of NFTs at addresses `ownedNFTAddresses`,
52
+ * project IDs `ownedNFTProjectIds` to mint on project `projectId`.
53
+ * `ownedNFTAddresses` assumed to be aligned with `ownedNFTProjectIds`.
54
+ * e.g. Removes holders of project `ownedNFTProjectIds[0]` on token
55
+ * contract `ownedNFTAddresses[0]` from mint allowlist.
56
+ * @param projectId Project ID to remove holders for.
57
+ * @param coreContract Core contract address to remove holders for.
58
+ * @param ownedNFTAddresses NFT core addresses of projects to be removed
59
+ * from allowlist. Indexes align with `ownedNFTProjectIds`.
60
+ * @param ownedNFTProjectIds Project IDs on `ownedNFTAddresses` whose
61
+ * holders will be removed from allowlist to mint project `projectId`.
62
+ * Indexes align with `ownedNFTAddresses`.
63
+ */
64
+ event RemovedHoldersOfProjects(
65
+ uint256 indexed projectId,
66
+ address indexed coreContract,
67
+ address[] ownedNFTAddresses,
68
+ uint256[] ownedNFTProjectIds
69
+ );
70
+
71
+ // position of Token Holder Lib storage, using a diamond storage pattern
72
+ // for this library
73
+ bytes32 constant TOKEN_HOLDER_LIB_STORAGE_POSITION =
74
+ keccak256("tokenholderlib.storage");
24
75
 
25
76
  struct HolderProjectConfig {
26
77
  // projects whose holders are allowed to purchase a token on `projectId`
27
- // ownedNFTAddress => ownedNFTProjectIds => bool
28
- mapping(address => mapping(uint256 => bool)) allowedProjectHolders;
78
+ mapping(address ownedNFTAddress => mapping(uint256 ownedNFTProjectId => bool allowed)) allowedProjectHolders;
79
+ }
80
+
81
+ // Diamond storage pattern is used in this library
82
+ struct TokenHolderLibStorage {
83
+ mapping(address coreContract => mapping(uint256 projectId => HolderProjectConfig)) holderProjectConfigs;
29
84
  }
30
85
 
31
86
  /**
32
- * @dev Allows holders of specific project tokens.
33
- * @param holderProjectConfig A mapping of the allowed holders for a specific project.
34
- * @param _ownedNFTAddresses NFT core addresses of projects to be
35
- * allowlisted. Indexes must align with `_ownedNFTProjectIds`.
36
- * @param _ownedNFTProjectIds Project IDs on `_ownedNFTAddresses` whose
37
- * holders shall be allowlisted to mint project `_projectId`. Indexes must
38
- * align with `_ownedNFTAddresses`.
87
+ * @notice Allows holders of specific project tokens.
88
+ * @param projectId Project ID to allowlist holders for.
89
+ * @param coreContract Core contract address to allowlist holders for.
90
+ * @param ownedNFTAddresses NFT core addresses of projects to be
91
+ * allowlisted. Indexes must align with `ownedNFTProjectIds`.
92
+ * @param ownedNFTProjectIds Project IDs on `ownedNFTAddresses` whose
93
+ * holders shall be allowlisted to mint project `projectId`. Indexes must
94
+ * align with `ownedNFTAddresses`.
39
95
  */
40
96
  function allowHoldersOfProjects(
41
- HolderProjectConfig storage holderProjectConfig,
42
- address[] memory _ownedNFTAddresses,
43
- uint256[] memory _ownedNFTProjectIds
97
+ uint256 projectId,
98
+ address coreContract,
99
+ address[] calldata ownedNFTAddresses,
100
+ uint256[] calldata ownedNFTProjectIds
44
101
  ) internal {
45
102
  require(
46
- _ownedNFTAddresses.length == _ownedNFTProjectIds.length,
103
+ ownedNFTAddresses.length == ownedNFTProjectIds.length,
47
104
  "TokenHolderLib: arrays neq length"
48
105
  );
49
- for (uint256 i = 0; i < _ownedNFTAddresses.length; i++) {
50
- holderProjectConfig.allowedProjectHolders[_ownedNFTAddresses[i]][
51
- _ownedNFTProjectIds[i]
106
+ HolderProjectConfig
107
+ storage holderProjectConfig = getHolderProjectConfig({
108
+ projectId: projectId,
109
+ coreContract: coreContract
110
+ });
111
+ uint256 ownedNFTLoopLength = ownedNFTAddresses.length;
112
+ for (uint256 i; i < ownedNFTLoopLength; ) {
113
+ holderProjectConfig.allowedProjectHolders[ownedNFTAddresses[i]][
114
+ ownedNFTProjectIds[i]
52
115
  ] = true;
116
+ // gas-efficient loop increment
117
+ unchecked {
118
+ ++i;
119
+ }
53
120
  }
121
+ // emit approve event
122
+ emit AllowedHoldersOfProjects({
123
+ projectId: projectId,
124
+ coreContract: coreContract,
125
+ ownedNFTAddresses: ownedNFTAddresses,
126
+ ownedNFTProjectIds: ownedNFTProjectIds
127
+ });
54
128
  }
55
129
 
56
130
  /**
57
- * @dev Removes holders of specific project tokens.
58
- * @param holderProjectConfig A mapping of the allowed holders for a specific project.
59
- * @param _ownedNFTAddresses NFT core addresses of projects to be removed
60
- * from allowlist. Indexes must align with `_ownedNFTProjectIds`.
61
- * @param _ownedNFTProjectIds Project IDs on `_ownedNFTAddresses` whose
62
- * holders will be removed from allowlist to mint project `_projectId`.
63
- * Indexes must align with `_ownedNFTAddresses`.
131
+ * @notice Removes holders of specific project tokens.
132
+ * @param projectId Project ID to remove holders for.
133
+ * @param coreContract Core contract address to remove holders for.
134
+ * @param ownedNFTAddresses NFT core addresses of projects to be removed
135
+ * from allowlist. Indexes must align with `ownedNFTProjectIds`.
136
+ * @param ownedNFTProjectIds Project IDs on `ownedNFTAddresses` whose
137
+ * holders will be removed from allowlist to mint project `projectId`.
138
+ * Indexes must align with `ownedNFTAddresses`.
64
139
  */
65
140
  function removeHoldersOfProjects(
66
- HolderProjectConfig storage holderProjectConfig,
67
- address[] memory _ownedNFTAddresses,
68
- uint256[] memory _ownedNFTProjectIds
141
+ uint256 projectId,
142
+ address coreContract,
143
+ address[] calldata ownedNFTAddresses,
144
+ uint256[] calldata ownedNFTProjectIds
69
145
  ) internal {
70
146
  require(
71
- _ownedNFTAddresses.length == _ownedNFTProjectIds.length,
147
+ ownedNFTAddresses.length == ownedNFTProjectIds.length,
72
148
  "TokenHolderLib: arrays neq length"
73
149
  );
74
- for (uint256 i = 0; i < _ownedNFTAddresses.length; i++) {
75
- holderProjectConfig.allowedProjectHolders[_ownedNFTAddresses[i]][
76
- _ownedNFTProjectIds[i]
150
+ HolderProjectConfig
151
+ storage holderProjectConfig = getHolderProjectConfig({
152
+ projectId: projectId,
153
+ coreContract: coreContract
154
+ });
155
+ uint256 ownedNFTLoopLength = ownedNFTAddresses.length;
156
+ for (uint256 i; i < ownedNFTLoopLength; ) {
157
+ holderProjectConfig.allowedProjectHolders[ownedNFTAddresses[i]][
158
+ ownedNFTProjectIds[i]
77
159
  ] = false;
160
+ // gas-efficient loop increment
161
+ unchecked {
162
+ ++i;
163
+ }
78
164
  }
165
+ // emit removed event
166
+ emit RemovedHoldersOfProjects({
167
+ projectId: projectId,
168
+ coreContract: coreContract,
169
+ ownedNFTAddresses: ownedNFTAddresses,
170
+ ownedNFTProjectIds: ownedNFTProjectIds
171
+ });
79
172
  }
80
173
 
81
174
  /**
82
- * @dev Allows and removes holders of specific project tokens in one operation.
83
- * @param holderProjectConfig A mapping of the allowed holders for a specific project.
84
- * @param _ownedNFTAddressesAdd NFT core addresses of projects to be
85
- * allowlisted. Indexes must align with `_ownedNFTProjectIdsAdd`.
86
- * @param _ownedNFTProjectIdsAdd Project IDs on `_ownedNFTAddressesAdd`
87
- * whose holders shall be allowlisted to mint project `_projectId`. Indexes
88
- * must align with `_ownedNFTAddressesAdd`.
89
- * @param _ownedNFTAddressesRemove NFT core addresses of projects to be
175
+ * @notice Allows and removes holders of specific project tokens in one
176
+ * operation.
177
+ * @param projectId Project ID to modify holders for.
178
+ * @param coreContract Core contract address to modify holders for.
179
+ * @param ownedNFTAddressesAdd NFT core addresses of projects to be
180
+ * allowlisted. Indexes must align with `ownedNFTProjectIdsAdd`.
181
+ * @param ownedNFTProjectIdsAdd Project IDs on `ownedNFTAddressesAdd`
182
+ * whose holders shall be allowlisted to mint project `projectId`. Indexes
183
+ * must align with `ownedNFTAddressesAdd`.
184
+ * @param ownedNFTAddressesRemove NFT core addresses of projects to be
90
185
  * removed from allowlist. Indexes must align with
91
- * `_ownedNFTProjectIdsRemove`.
92
- * @param _ownedNFTProjectIdsRemove Project IDs on
93
- * `_ownedNFTAddressesRemove` whose holders will be removed from allowlist
94
- * to mint project `_projectId`. Indexes must align with
95
- * `_ownedNFTAddressesRemove`.
186
+ * `ownedNFTProjectIdsRemove`.
187
+ * @param ownedNFTProjectIdsRemove Project IDs on
188
+ * `ownedNFTAddressesRemove` whose holders will be removed from allowlist
189
+ * to mint project `projectId`. Indexes must align with
190
+ * `ownedNFTAddressesRemove`.
96
191
  */
97
192
  function allowAndRemoveHoldersOfProjects(
98
- HolderProjectConfig storage holderProjectConfig,
99
- address[] memory _ownedNFTAddressesAdd,
100
- uint256[] memory _ownedNFTProjectIdsAdd,
101
- address[] memory _ownedNFTAddressesRemove,
102
- uint256[] memory _ownedNFTProjectIdsRemove
193
+ uint256 projectId,
194
+ address coreContract,
195
+ address[] calldata ownedNFTAddressesAdd,
196
+ uint256[] calldata ownedNFTProjectIdsAdd,
197
+ address[] calldata ownedNFTAddressesRemove,
198
+ uint256[] calldata ownedNFTProjectIdsRemove
103
199
  ) internal {
104
- allowHoldersOfProjects(
105
- holderProjectConfig,
106
- _ownedNFTAddressesAdd,
107
- _ownedNFTProjectIdsAdd
108
- );
109
- removeHoldersOfProjects(
110
- holderProjectConfig,
111
- _ownedNFTAddressesRemove,
112
- _ownedNFTProjectIdsRemove
113
- );
200
+ allowHoldersOfProjects({
201
+ projectId: projectId,
202
+ coreContract: coreContract,
203
+ ownedNFTAddresses: ownedNFTAddressesAdd,
204
+ ownedNFTProjectIds: ownedNFTProjectIdsAdd
205
+ });
206
+ removeHoldersOfProjects({
207
+ projectId: projectId,
208
+ coreContract: coreContract,
209
+ ownedNFTAddresses: ownedNFTAddressesRemove,
210
+ ownedNFTProjectIds: ownedNFTProjectIdsRemove
211
+ });
114
212
  }
115
213
 
116
214
  /**
@@ -120,34 +218,75 @@ library TokenHolderLib {
120
218
  * contract. Plan is to only integrate with AB/PBAB NFTs on the minter, but
121
219
  * in case other NFTs are registered, better to check here. Also,
122
220
  * function is non-reentrant, so this is extra cautious.
221
+ * @param ownedNFTAddress ERC-721 NFT token address to be checked.
222
+ * @param ownedNFTTokenId ERC-721 NFT token ID to be checked.
223
+ * @param targetOwner Target owner address to check.
123
224
  */
124
225
  function validateNFTOwnership(
125
- address _ownedNFTAddress,
126
- uint256 _ownedNFTTokenId,
127
- address _targetOwner
226
+ address ownedNFTAddress,
227
+ uint256 ownedNFTTokenId,
228
+ address targetOwner
128
229
  ) internal view {
129
- address actualNFTOwner = IERC721(_ownedNFTAddress).ownerOf(
130
- _ownedNFTTokenId
230
+ address actualNFTOwner = IERC721(ownedNFTAddress).ownerOf(
231
+ ownedNFTTokenId
131
232
  );
132
- require(actualNFTOwner == _targetOwner, "Only owner of NFT");
233
+ require(actualNFTOwner == targetOwner, "Only owner of NFT");
133
234
  }
134
235
 
135
236
  /**
136
- * @dev Checks if a specific NFT is allowlisted.
137
- * @param holderProjectConfig A mapping of the allowed holders for a specific project.
138
- * @param _ownedNFTAddress ERC-721 NFT token address to be checked.
139
- * @param _ownedNFTTokenId ERC-721 NFT token ID to be checked.
237
+ * @notice Checks if a specific NFT is allowlisted.
238
+ * @param projectId Project ID to be checked.
239
+ * @param coreContract Core contract address to be checked.
240
+ * @param ownedNFTAddress ERC-721 NFT token address to be checked.
241
+ * @param ownedNFTTokenId ERC-721 NFT token ID to be checked.
140
242
  * @return bool true if the NFT is allowlisted; false otherwise.
141
243
  */
142
244
  function isAllowlistedNFT(
143
- HolderProjectConfig storage holderProjectConfig,
144
- address _ownedNFTAddress,
145
- uint256 _ownedNFTTokenId
245
+ uint256 projectId,
246
+ address coreContract,
247
+ address ownedNFTAddress,
248
+ uint256 ownedNFTTokenId
146
249
  ) internal view returns (bool) {
147
- uint256 ownedNFTProjectId = _ownedNFTTokenId / ONE_MILLION;
250
+ HolderProjectConfig
251
+ storage holderProjectConfig = getHolderProjectConfig({
252
+ projectId: projectId,
253
+ coreContract: coreContract
254
+ });
255
+ uint256 ownedNFTProjectId = ABHelpers.tokenIdToProjectId(
256
+ ownedNFTTokenId
257
+ );
148
258
  return
149
- holderProjectConfig.allowedProjectHolders[_ownedNFTAddress][
259
+ holderProjectConfig.allowedProjectHolders[ownedNFTAddress][
150
260
  ownedNFTProjectId
151
261
  ];
152
262
  }
263
+
264
+ /**
265
+ * @notice Loads the HolderProjectConfig for a given project and core
266
+ * contract.
267
+ * @param projectId Project Id to get config for
268
+ * @param coreContract Core contract address to get config for
269
+ */
270
+ function getHolderProjectConfig(
271
+ uint256 projectId,
272
+ address coreContract
273
+ ) internal view returns (HolderProjectConfig storage) {
274
+ return s().holderProjectConfigs[coreContract][projectId];
275
+ }
276
+
277
+ /**
278
+ * @notice Return the storage struct for reading and writing. This library
279
+ * uses a diamond storage pattern when managing storage.
280
+ * @return storageStruct The SetPriceLibStorage struct.
281
+ */
282
+ function s()
283
+ internal
284
+ pure
285
+ returns (TokenHolderLibStorage storage storageStruct)
286
+ {
287
+ bytes32 position = TOKEN_HOLDER_LIB_STORAGE_POSITION;
288
+ assembly ("memory-safe") {
289
+ storageStruct.slot := position
290
+ }
291
+ }
153
292
  }