@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,10 +1,12 @@
1
1
  // SPDX-License-Identifier: LGPL-3.0-only
2
2
  // Created By: Art Blocks Inc.
3
3
 
4
- import "@openzeppelin-4.7/contracts/utils/cryptography/MerkleProof.sol";
5
-
6
4
  pragma solidity ^0.8.0;
7
5
 
6
+ import {GenericMinterEventsLib} from "./GenericMinterEventsLib.sol";
7
+
8
+ import {MerkleProof} from "@openzeppelin-4.7/contracts/utils/cryptography/MerkleProof.sol";
9
+
8
10
  /**
9
11
  * @title Art Blocks Merkle Library
10
12
  * @notice This library is designed to manage and verify merkle based gating for Art Blocks projects.
@@ -16,6 +18,27 @@ pragma solidity ^0.8.0;
16
18
  library MerkleLib {
17
19
  using MerkleProof for bytes32[];
18
20
 
21
+ /// Events specific to this library ///
22
+ /**
23
+ * @notice Notifies of the contract's default maximum mints allowed per
24
+ * user for a given project, on this minter. This value can be overridden
25
+ * by the artist of any project at any time.
26
+ * @param defaultMaxInvocationsPerAddress The default maximum mints allowed
27
+ */
28
+ event DefaultMaxInvocationsPerAddress(
29
+ uint256 defaultMaxInvocationsPerAddress
30
+ );
31
+ /**
32
+ * @notice Notifies of the contracts' current delegation registry address.
33
+ * @param delegationRegistry The address of the delegation registry
34
+ */
35
+ event DelegationRegistryUpdated(address delegationRegistry);
36
+
37
+ // position of Merkle Lib storage, using a diamond storage pattern for this
38
+ // library
39
+ bytes32 constant MERKLE_LIB_STORAGE_POSITION =
40
+ keccak256("merklelib.storage");
41
+
19
42
  /// @notice Default maximum invocations per address
20
43
  uint256 internal constant DEFAULT_MAX_INVOCATIONS_PER_ADDRESS = 1;
21
44
  bytes32 internal constant CONFIG_MERKLE_ROOT = "merkleRoot";
@@ -37,86 +60,215 @@ library MerkleLib {
37
60
  // The root of the Merkle tree for this project.
38
61
  bytes32 merkleRoot;
39
62
  // The number of current invocations for this project from a given user address.
40
- mapping(address => uint256) userMintInvocations;
63
+ mapping(address user => uint256 mintInvocations) userMintInvocations;
64
+ }
65
+
66
+ // Diamond storage pattern is used in this library
67
+ struct MerkleLibStorage {
68
+ mapping(address coreContract => mapping(uint256 projectId => MerkleProjectConfig)) merkleProjectConfigs;
41
69
  }
42
70
 
43
71
  /**
44
72
  * @notice Sets the maximum number of invocations per address for a project.
45
- * @param _projectConfig Merkle project config.
46
- * @param _maxInvocationsPerAddress The maximum number of invocations per address.
73
+ * @param projectId The ID of the project to set the maximum invocations for.
74
+ * @param coreContract The address of the core contract.
75
+ * @param maxInvocationsPerAddress The maximum number of invocations per address.
47
76
  */
48
77
  function setProjectInvocationsPerAddress(
49
- MerkleProjectConfig storage _projectConfig,
50
- uint24 _maxInvocationsPerAddress
78
+ uint256 projectId,
79
+ address coreContract,
80
+ uint24 maxInvocationsPerAddress
51
81
  ) internal {
52
- _projectConfig.useMaxInvocationsPerAddressOverride = true;
53
- _projectConfig
54
- .maxInvocationsPerAddressOverride = _maxInvocationsPerAddress;
82
+ MerkleProjectConfig
83
+ storage merkleProjectConfig = getMerkleProjectConfig({
84
+ projectId: projectId,
85
+ coreContract: coreContract
86
+ });
87
+ merkleProjectConfig.useMaxInvocationsPerAddressOverride = true;
88
+ merkleProjectConfig
89
+ .maxInvocationsPerAddressOverride = maxInvocationsPerAddress;
90
+ emit GenericMinterEventsLib.ConfigValueSet({
91
+ projectId: projectId,
92
+ coreContract: coreContract,
93
+ key: CONFIG_USE_MAX_INVOCATIONS_PER_ADDRESS_OVERRIDE,
94
+ value: true
95
+ });
96
+ emit GenericMinterEventsLib.ConfigValueSet({
97
+ projectId: projectId,
98
+ coreContract: coreContract,
99
+ key: CONFIG_MAX_INVOCATIONS_OVERRIDE,
100
+ value: uint256(maxInvocationsPerAddress)
101
+ });
55
102
  }
56
103
 
57
104
  /**
58
105
  * @notice Updates the Merkle root of a project.
59
- * @param _projectConfig Merkle project config.
60
- * @param _root The new Merkle root.
106
+ * @param projectId The ID of the project to update.
107
+ * @param coreContract The address of the core contract.
108
+ * @param root The new Merkle root.
61
109
  */
62
110
  function updateMerkleRoot(
63
- MerkleProjectConfig storage _projectConfig,
64
- bytes32 _root
111
+ uint256 projectId,
112
+ address coreContract,
113
+ bytes32 root
114
+ ) internal {
115
+ require(root != bytes32(0), "Root must be provided");
116
+ MerkleProjectConfig
117
+ storage merkleProjectConfig = getMerkleProjectConfig({
118
+ projectId: projectId,
119
+ coreContract: coreContract
120
+ });
121
+ merkleProjectConfig.merkleRoot = root;
122
+ emit GenericMinterEventsLib.ConfigValueSet({
123
+ projectId: projectId,
124
+ coreContract: coreContract,
125
+ key: CONFIG_MERKLE_ROOT,
126
+ value: root
127
+ });
128
+ }
129
+
130
+ /**
131
+ * @notice Checks that a given proof is valid for the vault address, and
132
+ * also checks that the vault address has not exceeded the maximum number
133
+ * of invocations per address for the project.
134
+ * @dev Reverts if the proof is invalid or if the vault address has
135
+ * exceeded the maximum number of invocations per address for the project.
136
+ * @param projectId project id to check
137
+ * @param coreContract core contract address to check
138
+ * @param proof Merkle proof to check
139
+ * @param vault address to check proof against
140
+ */
141
+ function preMintChecks(
142
+ uint256 projectId,
143
+ address coreContract,
144
+ bytes32[] calldata proof,
145
+ address vault
146
+ ) internal view {
147
+ MerkleProjectConfig
148
+ storage merkleProjectConfig = getMerkleProjectConfig({
149
+ projectId: projectId,
150
+ coreContract: coreContract
151
+ });
152
+ // require valid Merkle proof
153
+ require(
154
+ _verifyAddress({
155
+ proofRoot: merkleProjectConfig.merkleRoot,
156
+ proof: proof,
157
+ address_: vault
158
+ }),
159
+ "Invalid Merkle proof"
160
+ );
161
+
162
+ // limit mints per address by project
163
+ uint256 maxProjectInvocationsPerAddress = projectMaxInvocationsPerAddress(
164
+ merkleProjectConfig
165
+ );
166
+
167
+ // note that mint limits index off of the `vault` (when applicable)
168
+ require(
169
+ merkleProjectConfig.userMintInvocations[vault] <
170
+ maxProjectInvocationsPerAddress ||
171
+ maxProjectInvocationsPerAddress == 0,
172
+ "Max invocations reached"
173
+ );
174
+ }
175
+
176
+ /**
177
+ * @notice Updates the number of invocations for the `vault` address on the
178
+ * given project.
179
+ * @param projectId Project Id to mint on
180
+ * @param coreContract Core contract address to mint on
181
+ * @param vault Address being used to mint (the allowlisted address)
182
+ */
183
+ function mintEffects(
184
+ uint256 projectId,
185
+ address coreContract,
186
+ address vault
65
187
  ) internal {
66
- require(_root != bytes32(0), "Must provide root");
67
- _projectConfig.merkleRoot = _root;
188
+ MerkleProjectConfig
189
+ storage merkleProjectConfig = getMerkleProjectConfig({
190
+ projectId: projectId,
191
+ coreContract: coreContract
192
+ });
193
+ // increment mint invocations for vault address
194
+ unchecked {
195
+ // this will never overflow since user's invocations on a project
196
+ // are limited by the project's max invocations
197
+ merkleProjectConfig.userMintInvocations[vault]++;
198
+ }
68
199
  }
69
200
 
70
201
  /**
71
202
  * @notice Hashes an address.
72
- * @param _address The address to hash.
203
+ * @param address_ The address to hash.
73
204
  * @return The hash of the address.
74
205
  */
75
- function hashAddress(address _address) internal pure returns (bytes32) {
76
- return keccak256(abi.encodePacked(_address));
206
+ function hashAddress(address address_) internal pure returns (bytes32) {
207
+ return keccak256(abi.encodePacked(address_));
77
208
  }
78
209
 
79
210
  /**
80
211
  * @notice Processes a proof for an address.
81
- * @param _proof The proof to process.
82
- * @param _address The address to process the proof for.
212
+ * @param proof The proof to process.
213
+ * @param address_ The address to process the proof for.
83
214
  * @return The resulting hash from processing the proof.
84
215
  */
85
216
  function processProofForAddress(
86
- bytes32[] calldata _proof,
87
- address _address
217
+ bytes32[] calldata proof,
218
+ address address_
88
219
  ) internal pure returns (bytes32) {
89
- return _proof.processProofCalldata(hashAddress(_address));
220
+ return proof.processProofCalldata(hashAddress(address_));
90
221
  }
91
222
 
92
223
  /**
93
- * @notice Verifies an address against a proof.
94
- * @param _proofRoot The root of the proof to verify against.
95
- * @param _proof The proof to verify.
96
- * @param _address The address to verify.
97
- * @return True if the address is verified, false otherwise.
224
+ * @notice Returns the maximum number of invocations per address for a project.
225
+ * @param projectConfig The merkle project config to check.
226
+ * @return The maximum number of invocations per address.
98
227
  */
99
- function verifyAddress(
100
- bytes32 _proofRoot,
101
- bytes32[] calldata _proof,
102
- address _address
103
- ) internal pure returns (bool) {
104
- return _proof.verifyCalldata(_proofRoot, hashAddress(_address));
228
+ function projectMaxInvocationsPerAddress(
229
+ MerkleProjectConfig storage projectConfig
230
+ ) internal view returns (uint256) {
231
+ if (projectConfig.useMaxInvocationsPerAddressOverride) {
232
+ return uint256(projectConfig.maxInvocationsPerAddressOverride);
233
+ } else {
234
+ return DEFAULT_MAX_INVOCATIONS_PER_ADDRESS;
235
+ }
105
236
  }
106
237
 
107
238
  /**
108
239
  * @notice Returns the maximum number of invocations per address for a project.
109
- * @param _projectConfig The merkle project config to check.
240
+ * @param projectId Project Id to get config for
241
+ * @param coreContract Core contract address to get config for
110
242
  * @return The maximum number of invocations per address.
111
243
  */
112
244
  function projectMaxInvocationsPerAddress(
113
- MerkleProjectConfig storage _projectConfig
245
+ uint256 projectId,
246
+ address coreContract
114
247
  ) internal view returns (uint256) {
115
- if (_projectConfig.useMaxInvocationsPerAddressOverride) {
116
- return uint256(_projectConfig.maxInvocationsPerAddressOverride);
117
- } else {
118
- return DEFAULT_MAX_INVOCATIONS_PER_ADDRESS;
119
- }
248
+ MerkleProjectConfig storage projectConfig = getMerkleProjectConfig({
249
+ projectId: projectId,
250
+ coreContract: coreContract
251
+ });
252
+ return projectMaxInvocationsPerAddress(projectConfig);
253
+ }
254
+
255
+ /**
256
+ * @notice Returns the number of invocations for a given address on a given
257
+ * project.
258
+ * @param projectId Project Id to query
259
+ * @param coreContract Core contract address to query
260
+ * @param purchaser Address to query
261
+ */
262
+ function projectUserMintInvocations(
263
+ uint256 projectId,
264
+ address coreContract,
265
+ address purchaser
266
+ ) internal view returns (uint256) {
267
+ MerkleProjectConfig storage projectConfig = getMerkleProjectConfig({
268
+ projectId: projectId,
269
+ coreContract: coreContract
270
+ });
271
+ return projectConfig.userMintInvocations[purchaser];
120
272
  }
121
273
 
122
274
  /**
@@ -125,17 +277,27 @@ library MerkleLib {
125
277
  * addresses are only limited by the project's maximum invocations, and a
126
278
  * dummy value of zero is returned for `mintInvocationsRemaining`.
127
279
  * If `projectLimitsMintInvocationsPerAddress` is true, the quantity of
128
- * remaining mint invocations for address `_address` is returned as
280
+ * remaining mint invocations for address `address` is returned as
129
281
  * `mintInvocationsRemaining`.
130
282
  * Note that mint invocations per address can be changed at any time by the
131
283
  * artist of a project.
132
284
  * Also note that all mint invocations are limited by a project's maximum
133
285
  * invocations as defined on the core contract. This function may return
134
286
  * a value greater than the project's remaining invocations.
287
+ * @param projectId Project Id to get remaining invocations on
288
+ * @param coreContract Core contract address of project
289
+ * @param address_ Address to get remaining invocations for
290
+ * @return projectLimitsMintInvocationsPerAddress If true, the project
291
+ * limits mint invocations per address. If false, the project does not
292
+ * limit mint invocations per address.
293
+ * @return mintInvocationsRemaining The number of remaining mint invocations
294
+ * for address `address_`. If `projectLimitsMintInvocationsPerAddress` is
295
+ * false, this value is always dummy zero.
135
296
  */
136
297
  function projectRemainingInvocationsForAddress(
137
- MerkleProjectConfig storage _projectConfig,
138
- address _address
298
+ uint256 projectId,
299
+ address coreContract,
300
+ address address_
139
301
  )
140
302
  internal
141
303
  view
@@ -144,19 +306,17 @@ library MerkleLib {
144
306
  uint256 mintInvocationsRemaining
145
307
  )
146
308
  {
309
+ MerkleProjectConfig storage projectConfig = getMerkleProjectConfig({
310
+ projectId: projectId,
311
+ coreContract: coreContract
312
+ });
147
313
  uint256 maxInvocationsPerAddress = projectMaxInvocationsPerAddress(
148
- _projectConfig
314
+ projectConfig
149
315
  );
150
- if (maxInvocationsPerAddress == 0) {
151
- // project does not limit mint invocations per address, so leave
152
- // `projectLimitsMintInvocationsPerAddress` at solidity initial
153
- // value of false. Also leave `mintInvocationsRemaining` at
154
- // solidity initial value of zero, as indicated in this function's
155
- // documentation.
156
- } else {
316
+ if (maxInvocationsPerAddress != 0) {
157
317
  projectLimitsMintInvocationsPerAddress = true;
158
- uint256 userMintInvocations = _projectConfig.userMintInvocations[
159
- _address
318
+ uint256 userMintInvocations = projectConfig.userMintInvocations[
319
+ address_
160
320
  ];
161
321
  // if user has not reached max invocations per address, return
162
322
  // remaining invocations
@@ -171,5 +331,58 @@ library MerkleLib {
171
331
  // else user has reached their maximum invocations, so leave
172
332
  // `mintInvocationsRemaining` at solidity initial value of zero
173
333
  }
334
+ // else maxInvocationsPerAddress is zero, then the project does not
335
+ // limit mint invocations per address, so do nothing. Leave
336
+ // `projectLimitsMintInvocationsPerAddress` at solidity initial
337
+ // value of false. Also leave `mintInvocationsRemaining` at
338
+ // solidity initial value of zero, as indicated in this function's
339
+ // documentation.
340
+ }
341
+
342
+ /**
343
+ * Loads the MerkleProjectConfig for a given project and core contract.
344
+ * @param projectId Project Id to get config for
345
+ * @param coreContract Core contract address to get config for
346
+ */
347
+ function getMerkleProjectConfig(
348
+ uint256 projectId,
349
+ address coreContract
350
+ ) internal view returns (MerkleProjectConfig storage) {
351
+ return s().merkleProjectConfigs[coreContract][projectId];
352
+ }
353
+
354
+ /**
355
+ * @notice Return the storage struct for reading and writing. This library
356
+ * uses a diamond storage pattern when managing storage.
357
+ * @return storageStruct The MerkleLibStorage struct.
358
+ */
359
+ function s()
360
+ internal
361
+ pure
362
+ returns (MerkleLibStorage storage storageStruct)
363
+ {
364
+ bytes32 position = MERKLE_LIB_STORAGE_POSITION;
365
+ assembly ("memory-safe") {
366
+ storageStruct.slot := position
367
+ }
368
+ }
369
+
370
+ /**
371
+ * @notice Verifies an address against a proof.
372
+ * @param proofRoot The root of the proof to verify agaisnst.
373
+ * @param proof The proof to verify.
374
+ * @param address_ The address to verify.
375
+ * @return True if the address is verified, false otherwise.
376
+ */
377
+ function _verifyAddress(
378
+ bytes32 proofRoot,
379
+ bytes32[] calldata proof,
380
+ address address_
381
+ ) private pure returns (bool) {
382
+ return
383
+ proof.verifyCalldata({
384
+ root: proofRoot,
385
+ leaf: hashAddress(address_)
386
+ });
174
387
  }
175
388
  }