@artblocks/contracts 1.0.2 → 1.0.4

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 (387) hide show
  1. package/README.md +56 -21
  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 +141 -15
  5. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +42 -5
  6. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV0.sol/MinterDAExpV0.json +2 -2
  7. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV1.sol/MinterDAExpV1.json +2 -2
  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/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  11. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  12. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV0.sol/MinterDALinV0.json +2 -2
  13. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV1.sol/MinterDALinV1.json +2 -2
  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/archive/minter-suite/Minters/MinterHolder/MinterHolderV0.sol/MinterHolderV0.json +2 -2
  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/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV0.sol/MinterMerkleV0.json +2 -2
  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/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV0.sol/MinterSetPriceV0.json +2 -2
  26. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV1.sol/MinterSetPriceV1.json +2 -2
  27. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  28. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  29. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol/MinterSetPriceERC20V0.json +2 -2
  30. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol/MinterSetPriceERC20V1.json +2 -2
  31. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  32. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  33. package/artifacts/contracts/engine/{GenArt721CoreV2_ENGINE_FLEX.sol → V2/GenArt721CoreV2_ENGINE_FLEX.sol}/GenArt721CoreV2_ENGINE_FLEX.json +3 -3
  34. package/artifacts/contracts/engine/{GenArt721CoreV2_PBAB.sol → V2/GenArt721CoreV2_PBAB.sol}/GenArt721CoreV2_PBAB.json +3 -3
  35. package/artifacts/contracts/engine/{GenArt721CoreV2_PRTNR.sol → V2/GenArt721CoreV2_PRTNR.sol}/GenArt721CoreV2_PRTNR.json +3 -3
  36. package/artifacts/contracts/engine/{GenArt721MinterBurner_PBAB.sol → V2/GenArt721MinterBurner_PBAB.sol}/GenArt721MinterBurner_PBAB.json +3 -3
  37. package/artifacts/contracts/engine/{GenArt721MinterDAExp_PBAB.sol → V2/GenArt721MinterDAExp_PBAB.sol}/GenArt721MinterDAExp_PBAB.json +3 -3
  38. package/artifacts/contracts/engine/{GenArt721Minter_PBAB.sol → V2/GenArt721Minter_PBAB.sol}/GenArt721Minter_PBAB.json +3 -3
  39. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +1960 -0
  40. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +2247 -0
  41. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +2247 -0
  42. package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +401 -0
  43. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +2281 -0
  44. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IAdminACLV0_PROHIBITION.sol/IAdminACLV0_PROHIBITION.json +359 -0
  45. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +1094 -0
  46. package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +242 -0
  47. package/artifacts/contracts/engine-registry/EngineRegistryV0.sol/EngineRegistryV0.json +2 -2
  48. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +41 -4
  49. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IBonusContract.sol/IBonusContract.json +1 -1
  50. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreContractV1.sol/IGenArt721CoreContractV1.json +1 -1
  51. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreV2_PBAB.sol/IGenArt721CoreV2_PBAB.json +1 -1
  52. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IRandomizer.sol/IRandomizer.json +1 -1
  53. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IAdminACLV0.sol/IAdminACLV0.json +1 -1
  54. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IArtblocksRoyaltyOverride.sol/IArtblocksRoyaltyOverride.json +1 -1
  55. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IBonusContract.sol/IBonusContract.json +1 -1
  56. package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReader.sol/IBytecodeStorageReader.json +111 -0
  57. package/artifacts/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol/ICoreRegistryV1.json +172 -0
  58. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IDelegationRegistry.sol/IDelegationRegistry.json +1 -1
  59. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryCompatibleV0.sol/IDependencyRegistryCompatibleV0.json +1 -1
  60. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +3 -3
  61. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IEngineRegistryV0.sol/IEngineRegistryV0.json +1 -1
  62. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV0.sol/IFilteredMinterDAExpSettlementV0.json +1 -1
  63. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV1.sol/IFilteredMinterDAExpSettlementV1.json +1 -1
  64. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlement_Mixin.sol/IFilteredMinterDAExpSettlement_Mixin.json +1 -1
  65. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV0.sol/IFilteredMinterDAExpV0.json +1 -1
  66. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV1.sol/IFilteredMinterDAExpV1.json +1 -1
  67. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV0.sol/IFilteredMinterDALinV0.json +1 -1
  68. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV1.sol/IFilteredMinterDALinV1.json +1 -1
  69. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV0.sol/IFilteredMinterHolderV0.json +1 -1
  70. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV1.sol/IFilteredMinterHolderV1.json +1 -1
  71. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV2.sol/IFilteredMinterHolderV2.json +1 -1
  72. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV0.sol/IFilteredMinterMerkleV0.json +1 -1
  73. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV1.sol/IFilteredMinterMerkleV1.json +1 -1
  74. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV2.sol/IFilteredMinterMerkleV2.json +1 -1
  75. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterSEAV0.sol/IFilteredMinterSEAV0.json +56 -54
  76. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV0.sol/IFilteredMinterV0.json +1 -1
  77. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV1.sol/IFilteredMinterV1.json +1 -1
  78. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV2.sol/IFilteredMinterV2.json +1 -1
  79. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractExposesHashSeed.sol/IGenArt721CoreContractExposesHashSeed.json +30 -0
  80. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV1.sol/IGenArt721CoreContractV1.json +1 -1
  81. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +14 -1
  82. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol/IGenArt721CoreContractV3WithSharedRandomizer.json +24 -0
  83. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +14 -1
  84. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +8 -14
  85. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +8 -14
  86. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreV2_PBAB.sol/IGenArt721CoreV2_PBAB.json +1 -1
  87. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IManifold.sol/IManifold.json +1 -1
  88. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMinterBaseV0.sol/IMinterBaseV0.json +1 -1
  89. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV0.sol/IMinterFilterV0.json +1 -1
  90. package/artifacts/contracts/interfaces/v0.8.x/IMinterFilterV1.sol/IMinterFilterV1.json +514 -0
  91. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPICoreV0.sol/IMintingAPICoreV0.json +1 -1
  92. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPIMinterV0.sol/IMintingAPIMinterV0.json +1 -1
  93. package/artifacts/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol/IPseudorandomAtomic.json +30 -0
  94. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizer.sol/IRandomizer.json +1 -1
  95. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerPolyptychV0.sol/IRandomizerPolyptychV0.json +1 -1
  96. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerV2.sol/IRandomizerV2.json +1 -1
  97. package/artifacts/contracts/interfaces/v0.8.x/IRandomizer_V3CoreBase.sol/IRandomizer_V3CoreBase.json +24 -0
  98. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol/ISharedMinterDAExpSettlementV0.json +207 -0
  99. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol/ISharedMinterDAExpV0.json +93 -0
  100. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol/ISharedMinterDALinV0.json +93 -0
  101. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol/ISharedMinterDAV0.json +69 -0
  102. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol/ISharedMinterHolderV0.json +203 -0
  103. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol/ISharedMinterMerkleV0.json +123 -0
  104. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol/ISharedMinterSEAV0.json +261 -0
  105. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol/ISharedMinterSimplePurchaseV0.json +64 -0
  106. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterV0.sol/ISharedMinterV0.json +533 -0
  107. package/artifacts/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol/ISharedRandomizerV0.json +223 -0
  108. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IWETH.sol/IWETH.json +1 -1
  109. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Address.json +2 -2
  110. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Counters.json +2 -2
  111. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/CustomERC721Metadata.json +2 -2
  112. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/ERC721.json +2 -2
  113. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/ERC721Enumerable.json +2 -2
  114. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/GenArt721CoreV1.json +2 -2
  115. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/SafeMath.json +2 -2
  116. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Strings.json +2 -2
  117. package/artifacts/contracts/legacy/GenArt721LegacyMinter.sol/GenArt721LegacyMinter.json +2 -2
  118. package/artifacts/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol/DelegationRegistry.json +2 -2
  119. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeMock.sol/GnosisSafeMock.json +2 -2
  120. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeProxyFactoryMock.sol/GnosisSafeProxyFactoryMock.json +2 -2
  121. package/artifacts/contracts/libs/integration-refs/gnosis-safe/MultiSendMock.sol/MultiSendMock.json +2 -2
  122. package/artifacts/contracts/libs/integration-refs/weth9/weth9.sol/WETH9_.json +2 -2
  123. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/CustomERC721Metadata.sol/CustomERC721Metadata.json +3 -3
  124. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/IERC20.sol/IERC20.json +1 -1
  125. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/SafeMath.sol/SafeMath.json +3 -3
  126. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/Strings.sol/Strings.json +3 -3
  127. package/artifacts/contracts/libs/v0.8.x/ABHelpers.sol/ABHelpers.json +10 -0
  128. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +10 -0
  129. package/artifacts/contracts/libs/{0.8.x/BytecodeStorage.sol → v0.8.x/BytecodeStorageV0.sol}/BytecodeStorage.json +3 -3
  130. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageReader.json +163 -0
  131. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageWriter.json +10 -0
  132. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/Bytes32Strings.sol/Bytes32Strings.json +3 -3
  133. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +3 -3
  134. package/artifacts/contracts/libs/v0.8.x/SSTORE2.sol/SSTORE2.json +10 -0
  135. package/artifacts/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol/DAExpLib.json +10 -0
  136. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +10 -0
  137. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +10 -0
  138. package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +10 -0
  139. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +10 -0
  140. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +10 -0
  141. package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +10 -0
  142. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +10 -0
  143. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +10 -0
  144. package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +10 -0
  145. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV0.sol/MinterFilterV0.json +2 -2
  146. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  147. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +748 -0
  148. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +1228 -0
  149. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -2
  150. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +1146 -0
  151. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV4.sol/MinterDAExpV4.json +2 -2
  152. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +909 -0
  153. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +1228 -0
  154. package/artifacts/contracts/minter-suite/Minters/MinterDALinV4.sol/MinterDALinV4.json +2 -2
  155. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +909 -0
  156. package/artifacts/contracts/minter-suite/Minters/MinterHolderV4.sol/MinterHolderV4.json +2 -2
  157. package/artifacts/contracts/minter-suite/Minters/MinterMerkleV5.sol/MinterMerkleV5.json +2 -2
  158. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +10 -160
  159. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
  160. package/artifacts/contracts/minter-suite/Minters/MinterSEAV0.sol/MinterSEAV0.json +59 -80
  161. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +1325 -0
  162. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
  163. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +848 -0
  164. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +1091 -0
  165. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +1075 -0
  166. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +1243 -0
  167. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +1167 -0
  168. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV4.sol/MinterSetPriceV4.json +2 -2
  169. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +772 -0
  170. package/artifacts/contracts/mock/{BytecodeTextCR_DMock.sol/BytecodeTextCR_DMock.json → BytecodeV0TextCR_DMock.sol/BytecodeV0TextCR_DMock.json} +4 -4
  171. package/artifacts/contracts/mock/BytecodeV1LibCallsMock.sol/BytecodeV1LibCallsMock.json +135 -0
  172. package/artifacts/contracts/mock/BytecodeV1TextCR_DMock.sol/BytecodeV1TextCR_DMock.json +301 -0
  173. package/artifacts/contracts/mock/DeadReceiverBidderMock.sol/DeadReceiverBidderMock.json +25 -2
  174. package/artifacts/contracts/mock/DeadReceiverMock.sol/DeadReceiverMock.json +2 -2
  175. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +114 -0
  176. package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +28 -2
  177. package/artifacts/contracts/mock/GasLimitReceiverBidderMock.sol/GasLimitReceiverBidderMock.json +2 -2
  178. package/artifacts/contracts/mock/GasLimitReceiverMock.sol/GasLimitReceiverMock.json +2 -2
  179. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +22 -4
  180. package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +2 -2
  181. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +440 -0
  182. package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +39 -0
  183. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  184. package/artifacts/contracts/mock/ReentrancyHolderMock.sol/ReentrancyHolderMock.json +2 -2
  185. package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
  186. package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
  187. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +2 -2
  188. package/artifacts/contracts/mock/SSTORE2Mock.sol/SSTORE2Mock.json +118 -0
  189. package/artifacts/contracts/randomizer/{BasicRandomizer.sol → deprecated/BasicRandomizer.sol}/BasicRandomizer.json +3 -3
  190. package/artifacts/contracts/randomizer/{BasicRandomizerBase_v0_0_0.sol → deprecated/BasicRandomizerBase_v0_0_0.sol}/RandomizerBase.json +1 -1
  191. package/artifacts/contracts/randomizer/{PolyptychRandomizerV0.sol → deprecated/PolyptychRandomizerV0.sol}/BasicPolyptychRandomizerV0.json +3 -3
  192. package/artifacts/contracts/randomizer/{RandomizerV2.sol → deprecated/RandomizerV2.sol}/BasicRandomizerV2.json +3 -3
  193. package/artifacts/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol/PseudorandomAtomic.json +30 -0
  194. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +247 -0
  195. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +2 -2
  196. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol/GenArt721RoyaltyOverride_PBAB.json +2 -2
  197. package/contracts/AdminACLV0.sol +2 -2
  198. package/contracts/AdminACLV1.sol +2 -2
  199. package/contracts/DependencyRegistryV0.sol +219 -123
  200. package/contracts/GenArt721CoreV3.sol +60 -42
  201. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV0.sol +3 -3
  202. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV1.sol +3 -3
  203. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol +4 -4
  204. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol +4 -4
  205. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +4 -4
  206. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol +4 -4
  207. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV0.sol +3 -3
  208. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV1.sol +3 -3
  209. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol +4 -4
  210. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol +4 -4
  211. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV0.sol +3 -3
  212. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol +4 -4
  213. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol +5 -5
  214. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol +5 -5
  215. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV0.sol +3 -3
  216. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol +4 -4
  217. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol +5 -5
  218. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol +5 -5
  219. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol +5 -5
  220. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV0.sol +3 -3
  221. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV1.sol +3 -3
  222. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol +4 -4
  223. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol +4 -4
  224. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol +3 -3
  225. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol +3 -3
  226. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol +4 -4
  227. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol +4 -4
  228. package/contracts/engine/{GenArt721CoreV2_ENGINE_FLEX.sol → V2/GenArt721CoreV2_ENGINE_FLEX.sol} +2 -2
  229. package/contracts/engine/{GenArt721CoreV2_PBAB.sol → V2/GenArt721CoreV2_PBAB.sol} +2 -2
  230. package/contracts/engine/{GenArt721CoreV2_PRTNR.sol → V2/GenArt721CoreV2_PRTNR.sol} +3 -3
  231. package/contracts/engine/{GenArt721MinterBurner_PBAB.sol → V2/GenArt721MinterBurner_PBAB.sol} +2 -2
  232. package/contracts/engine/{GenArt721MinterDAExp_PBAB.sol → V2/GenArt721MinterDAExp_PBAB.sol} +2 -2
  233. package/contracts/engine/{GenArt721Minter_PBAB.sol → V2/GenArt721Minter_PBAB.sol} +2 -2
  234. package/contracts/{GenArt721CoreV3_Engine.sol → engine/V3/GenArt721CoreV3_Engine.sol} +48 -24
  235. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +2298 -0
  236. package/contracts/{GenArt721CoreV3_Engine_Flex.sol → engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol} +50 -31
  237. package/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol +281 -0
  238. package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +2359 -0
  239. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IAdminACLV0_PROHIBITION.sol +123 -0
  240. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +29 -0
  241. package/contracts/engine-registry/CoreRegistryV1.sol +254 -0
  242. package/contracts/engine-registry/EngineRegistryV0.sol +2 -2
  243. package/contracts/explorations/GenArt721CoreV3_Explorations.sol +58 -40
  244. package/contracts/interfaces/v0.8.x/IBytecodeStorageReader.sol +62 -0
  245. package/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol +27 -0
  246. package/contracts/interfaces/{0.8.x → v0.8.x}/IDelegationRegistry.sol +1 -1
  247. package/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryCompatibleV0.sol +1 -1
  248. package/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryV0.sol +3 -3
  249. package/contracts/interfaces/{0.8.x → v0.8.x}/IEngineRegistryV0.sol +1 -1
  250. package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterSEAV0.sol +34 -15
  251. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractExposesHashSeed.sol +11 -0
  252. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol +23 -0
  253. package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Base.sol +3 -0
  254. package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine.sol +0 -5
  255. package/contracts/interfaces/v0.8.x/IMinterFilterV1.sol +184 -0
  256. package/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol +16 -0
  257. package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerPolyptychV0.sol +1 -1
  258. package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerV2.sol +2 -5
  259. package/contracts/interfaces/v0.8.x/IRandomizer_V3CoreBase.sol +23 -0
  260. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +37 -0
  261. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol +25 -0
  262. package/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol +26 -0
  263. package/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol +19 -0
  264. package/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol +69 -0
  265. package/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol +44 -0
  266. package/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol +78 -0
  267. package/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol +28 -0
  268. package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +191 -0
  269. package/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol +123 -0
  270. package/contracts/legacy/GenArt721CoreV1.sol +2 -2
  271. package/contracts/legacy/GenArt721LegacyMinter.sol +5 -5
  272. package/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol +2 -2
  273. package/contracts/libs/integration-refs/weth9/weth9.sol +2 -0
  274. package/contracts/libs/v0.8.x/ABHelpers.sol +55 -0
  275. package/contracts/libs/v0.8.x/AuthLib.sol +197 -0
  276. package/contracts/libs/v0.8.x/BytecodeStorageV1.sol +399 -0
  277. package/contracts/libs/v0.8.x/SSTORE2.sol +109 -0
  278. package/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol +125 -0
  279. package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +109 -0
  280. package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +348 -0
  281. package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +175 -0
  282. package/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol +160 -0
  283. package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +320 -0
  284. package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +44 -0
  285. package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +390 -0
  286. package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +583 -0
  287. package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +153 -0
  288. package/contracts/minter-suite/MinterFilter/MinterFilterV0.sol +3 -3
  289. package/contracts/minter-suite/MinterFilter/MinterFilterV1.sol +6 -6
  290. package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +830 -0
  291. package/contracts/minter-suite/Minters/MinterBase_v0_1_1.sol +4 -4
  292. package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +966 -0
  293. package/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol +4 -4
  294. package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +1126 -0
  295. package/contracts/minter-suite/Minters/MinterDAExpV4.sol +4 -4
  296. package/contracts/minter-suite/Minters/MinterDAExpV5.sol +606 -0
  297. package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +952 -0
  298. package/contracts/minter-suite/Minters/MinterDALinV4.sol +4 -4
  299. package/contracts/minter-suite/Minters/MinterDALinV5.sol +591 -0
  300. package/contracts/minter-suite/Minters/MinterHolderV4.sol +5 -5
  301. package/contracts/minter-suite/Minters/MinterMerkleV5.sol +5 -5
  302. package/contracts/minter-suite/Minters/MinterPolyptychV0.sol +18 -17
  303. package/contracts/minter-suite/Minters/MinterSEAV0.sol +235 -186
  304. package/contracts/minter-suite/Minters/MinterSEAV1.sol +1190 -0
  305. package/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol +6 -6
  306. package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +570 -0
  307. package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +821 -0
  308. package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +802 -0
  309. package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +1096 -0
  310. package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +992 -0
  311. package/contracts/minter-suite/Minters/MinterSetPriceV4.sol +4 -4
  312. package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +461 -0
  313. package/contracts/mock/{BytecodeTextCR_DMock.sol → BytecodeV0TextCR_DMock.sol} +5 -5
  314. package/contracts/mock/BytecodeV1LibCallsMock.sol +114 -0
  315. package/contracts/mock/BytecodeV1TextCR_DMock.sol +233 -0
  316. package/contracts/mock/DeadReceiverBidderMock.sol +16 -1
  317. package/contracts/mock/DeadReceiverMock.sol +1 -1
  318. package/contracts/mock/DummySharedMinter.sol +75 -0
  319. package/contracts/mock/ERC20Mock.sol +16 -0
  320. package/contracts/mock/GasLimitReceiverBidderMock.sol +1 -1
  321. package/contracts/mock/GasLimitReceiverMock.sol +1 -1
  322. package/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol +22 -35
  323. package/contracts/mock/MockAdminACLV0.sol +2 -2
  324. package/contracts/mock/MockAdminACLV0_PROHIBITION.sol +207 -0
  325. package/contracts/mock/OriginRegisterMock.sol +27 -0
  326. package/contracts/mock/RandomizerV2_NoAssignMock.sol +2 -2
  327. package/contracts/mock/ReentrancyHolderMock.sol +1 -1
  328. package/contracts/mock/ReentrancyMerkleMock.sol +1 -1
  329. package/contracts/mock/ReentrancyMock.sol +1 -1
  330. package/contracts/mock/ReentrancySEAMock.sol +1 -1
  331. package/contracts/mock/SSTORE2Mock.sol +93 -0
  332. package/contracts/randomizer/{BasicRandomizer.sol → deprecated/BasicRandomizer.sol} +1 -1
  333. package/contracts/randomizer/{BasicRandomizerBase_v0_0_0.sol → deprecated/BasicRandomizerBase_v0_0_0.sol} +1 -1
  334. package/contracts/randomizer/{PolyptychRandomizerV0.sol → deprecated/PolyptychRandomizerV0.sol} +3 -3
  335. package/contracts/randomizer/{RandomizerV2.sol → deprecated/RandomizerV2.sol} +3 -3
  336. package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +30 -0
  337. package/contracts/randomizer/shared/SharedRandomizerV0.sol +260 -0
  338. package/contracts/royalty-registry/GenArt721RoyaltyOverride.sol +2 -2
  339. package/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol +2 -2
  340. package/package.json +51 -43
  341. package/.env.example +0 -17
  342. package/LICENSE +0 -165
  343. package/artifacts/contracts/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +0 -1942
  344. package/artifacts/contracts/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +0 -2229
  345. package/artifacts/contracts/engine-registry/future/EngineRegistryV1.sol/EngineRegistryV1.json +0 -109
  346. package/contracts/engine-registry/future/EngineRegistryV1.sol +0 -86
  347. /package/contracts/interfaces/{0.5.x → v0.5.x}/IBonusContract.sol +0 -0
  348. /package/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreContractV1.sol +0 -0
  349. /package/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreV2_PBAB.sol +0 -0
  350. /package/contracts/interfaces/{0.5.x → v0.5.x}/IRandomizer.sol +0 -0
  351. /package/contracts/interfaces/{0.8.x → v0.8.x}/IAdminACLV0.sol +0 -0
  352. /package/contracts/interfaces/{0.8.x → v0.8.x}/IArtblocksRoyaltyOverride.sol +0 -0
  353. /package/contracts/interfaces/{0.8.x → v0.8.x}/IBonusContract.sol +0 -0
  354. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV0.sol +0 -0
  355. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV1.sol +0 -0
  356. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlement_Mixin.sol +0 -0
  357. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV0.sol +0 -0
  358. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV1.sol +0 -0
  359. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV0.sol +0 -0
  360. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV1.sol +0 -0
  361. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV0.sol +0 -0
  362. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV1.sol +0 -0
  363. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV2.sol +0 -0
  364. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV0.sol +0 -0
  365. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV1.sol +0 -0
  366. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV2.sol +0 -0
  367. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV0.sol +0 -0
  368. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV1.sol +0 -0
  369. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV2.sol +0 -0
  370. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV1.sol +0 -0
  371. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3.sol +0 -0
  372. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine_Flex.sol +0 -0
  373. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreV2_PBAB.sol +0 -0
  374. /package/contracts/interfaces/{0.8.x → v0.8.x}/IManifold.sol +0 -0
  375. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterBaseV0.sol +0 -0
  376. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV0.sol +0 -0
  377. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPICoreV0.sol +0 -0
  378. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPIMinterV0.sol +0 -0
  379. /package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizer.sol +0 -0
  380. /package/contracts/interfaces/{0.8.x → v0.8.x}/IWETH.sol +0 -0
  381. /package/contracts/libs/{0.5.x → v0.5.x}/CustomERC721Metadata.sol +0 -0
  382. /package/contracts/libs/{0.5.x → v0.5.x}/IERC20.sol +0 -0
  383. /package/contracts/libs/{0.5.x → v0.5.x}/SafeMath.sol +0 -0
  384. /package/contracts/libs/{0.5.x → v0.5.x}/Strings.sol +0 -0
  385. /package/contracts/libs/{0.8.x/BytecodeStorage.sol → v0.8.x/BytecodeStorageV0.sol} +0 -0
  386. /package/contracts/libs/{0.8.x → v0.8.x}/Bytes32Strings.sol +0 -0
  387. /package/contracts/libs/{0.8.x → v0.8.x}/ERC721_PackedHashSeed.sol +0 -0
@@ -0,0 +1,348 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ import "../../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
5
+
6
+ import "@openzeppelin-4.7/contracts/utils/math/Math.sol";
7
+
8
+ pragma solidity ^0.8.0;
9
+
10
+ /**
11
+ * @title Art Blocks Max Invocations Library
12
+ * @notice This library manages the maximum invocation limits for Art Blocks
13
+ * projects. It provides functionality for synchronizing, manually limiting, and
14
+ * updating these limits, ensuring the integrity in relation to the core Art
15
+ * Blocks contract, and managing updates upon token minting.
16
+ * @dev Functions include `syncProjectMaxInvocationsToCore`,
17
+ * `manuallyLimitProjectMaxInvocations`, and `purchaseEffectsInvocations`.
18
+ * @author Art Blocks Inc.
19
+ */
20
+
21
+ library MaxInvocationsLib {
22
+ uint256 internal constant ONE_MILLION = 1_000_000;
23
+
24
+ /**
25
+ * @notice Data structure that holds max invocations project configuration.
26
+ */
27
+ struct MaxInvocationsProjectConfig {
28
+ bool maxHasBeenInvoked;
29
+ uint24 maxInvocations;
30
+ }
31
+
32
+ /**
33
+ * @notice Syncs project's max invocations to core contract value.
34
+ * @param _projectId The id of the project.
35
+ * @param _coreContract The address of the core contract.
36
+ * @param maxInvocationsProjectConfig Data structure that holds max invocations project configuration.
37
+ * @return uint256 the updated max invocations.
38
+ */
39
+ function syncProjectMaxInvocationsToCore(
40
+ uint256 _projectId,
41
+ address _coreContract,
42
+ MaxInvocationsProjectConfig storage maxInvocationsProjectConfig
43
+ ) internal returns (uint256) {
44
+ uint256 maxInvocations;
45
+ uint256 invocations;
46
+ (invocations, maxInvocations, , , , ) = IGenArt721CoreContractV3_Base(
47
+ _coreContract
48
+ ).projectStateData(_projectId);
49
+ // update storage with results
50
+ maxInvocationsProjectConfig.maxInvocations = uint24(maxInvocations);
51
+
52
+ // We need to ensure maxHasBeenInvoked is correctly set after manually syncing the
53
+ // local maxInvocations value with the core contract's maxInvocations value.
54
+ // This synced value of maxInvocations from the core contract will always be greater
55
+ // than or equal to the previous value of maxInvocations stored locally.
56
+ maxInvocationsProjectConfig.maxHasBeenInvoked =
57
+ invocations == maxInvocations;
58
+ return maxInvocations;
59
+ }
60
+
61
+ /**
62
+ * @notice Manually limits project's max invocations.
63
+ * @param _projectId The id of the project.
64
+ * @param _coreContract The address of the core contract.
65
+ * @param _maxInvocations The new max invocations limit.
66
+ * @param maxInvocationsProjectConfig Data structure that holds max invocations project configuration.
67
+ */
68
+ function manuallyLimitProjectMaxInvocations(
69
+ uint256 _projectId,
70
+ address _coreContract,
71
+ uint24 _maxInvocations,
72
+ MaxInvocationsProjectConfig storage maxInvocationsProjectConfig
73
+ ) internal {
74
+ // CHECKS
75
+ (
76
+ uint256 coreInvocations,
77
+ uint256 coreMaxInvocations
78
+ ) = coreContractInvocationData(_projectId, _coreContract);
79
+ require(
80
+ _maxInvocations <= coreMaxInvocations,
81
+ "Invalid max invocations"
82
+ );
83
+ require(_maxInvocations >= coreInvocations, "Invalid max invocations");
84
+
85
+ // EFFECTS
86
+ // update storage with results
87
+ maxInvocationsProjectConfig.maxInvocations = uint24(_maxInvocations);
88
+ // We need to ensure maxHasBeenInvoked is correctly set after manually setting the
89
+ // local maxInvocations value.
90
+ maxInvocationsProjectConfig.maxHasBeenInvoked =
91
+ coreInvocations == _maxInvocations;
92
+ }
93
+
94
+ /**
95
+ * @notice Validate effects on invocations after purchase. This ensures
96
+ * that the token invocation is less than or equal to the local max
97
+ * invocations, and also updates the local maxHasBeenInvoked value.
98
+ * @dev This function checks that the token invocation is less than or
99
+ * equal to the local max invocations, and also updates the local
100
+ * maxHasBeenInvoked value.
101
+ * @param _tokenId The id of the token.
102
+ * @param maxInvocationsProjectConfig Data structure that holds max
103
+ * invocations project configuration.
104
+ */
105
+ function validatePurchaseEffectsInvocations(
106
+ uint256 _tokenId,
107
+ MaxInvocationsProjectConfig storage maxInvocationsProjectConfig
108
+ ) internal {
109
+ // invocation is token number plus one, and will never overflow due to
110
+ // limit of 1e6 invocations per project. block scope for gas efficiency
111
+ // (i.e. avoid an unnecessary var initialization to 0).
112
+ unchecked {
113
+ uint256 tokenInvocation = (_tokenId % ONE_MILLION) + 1;
114
+ uint256 localMaxInvocations = maxInvocationsProjectConfig
115
+ .maxInvocations;
116
+ // handle the case where the token invocation == minter local max
117
+ // invocations occurred on a different minter, and we have a stale
118
+ // local maxHasBeenInvoked value returning a false negative.
119
+ // @dev this is a CHECK after EFFECTS, so security was considered
120
+ // in detail here.
121
+ require(
122
+ tokenInvocation <= localMaxInvocations,
123
+ "Max invocations reached"
124
+ );
125
+ // in typical case, update the local maxHasBeenInvoked value
126
+ // to true if the token invocation == minter local max invocations
127
+ // (enables gas efficient reverts after sellout)
128
+ if (tokenInvocation == localMaxInvocations) {
129
+ maxInvocationsProjectConfig.maxHasBeenInvoked = true;
130
+ }
131
+ }
132
+ }
133
+
134
+ /**
135
+ * Helper function to check if max invocations has not been initialized.
136
+ * Returns true if not initialized, false if initialized.
137
+ * @param _maxInvocationsProjectConfig Struct that holds max invocations
138
+ * project configuration.
139
+ * @return bool
140
+ * @dev We know a project's max invocations have never been initialized if
141
+ * both max invocations and maxHasBeenInvoked are still initial values.
142
+ * This is because if maxInvocations were ever set to zero,
143
+ * maxHasBeenInvoked would be set to true.
144
+ */
145
+ function maxInvocationsIsUnconfigured(
146
+ MaxInvocationsProjectConfig storage _maxInvocationsProjectConfig
147
+ ) internal view returns (bool) {
148
+ return
149
+ _maxInvocationsProjectConfig.maxInvocations == 0 &&
150
+ !_maxInvocationsProjectConfig.maxHasBeenInvoked;
151
+ }
152
+
153
+ /**
154
+ * Returns if invocations remain available for a given project.
155
+ * This function calls the core contract to get the most up-to-date
156
+ * invocation data (which may be useful to avoid reverts during mint).
157
+ * This function considers core contract max invocations, and minter local
158
+ * max invocations, and returns a response based on the most limiting
159
+ * max invocations value.
160
+ * @param _maxInvocationsProjectConfig Struct that holds minter-level max
161
+ * invocations
162
+ * @param _projectId The id of the project.
163
+ * @param _coreContract The address of the core contract.
164
+ */
165
+ function invocationsRemain(
166
+ MaxInvocationsProjectConfig storage _maxInvocationsProjectConfig,
167
+ uint256 _projectId,
168
+ address _coreContract
169
+ ) internal view returns (bool) {
170
+ // get up-to-data invocation data from core contract
171
+ (
172
+ uint256 coreInvocations,
173
+ uint256 coreMaxInvocations
174
+ ) = MaxInvocationsLib.coreContractInvocationData(
175
+ _projectId,
176
+ _coreContract
177
+ );
178
+ // load minter-local max invocations into memory
179
+ uint256 localMaxInvocations = _maxInvocationsProjectConfig
180
+ .maxInvocations;
181
+ // invocations remain available if the core contract has not reached
182
+ // the most limiting max invocations, either on minter or core contract
183
+ uint256 limitingMaxInvocations = Math.min(
184
+ coreMaxInvocations,
185
+ localMaxInvocations
186
+ );
187
+ return coreInvocations < limitingMaxInvocations;
188
+ }
189
+
190
+ /**
191
+ * Pulls core contract invocation data for a given project.
192
+ * @dev This function calls the core contract to get the invocation data
193
+ * @param _projectId The id of the project.
194
+ * @param _coreContract The address of the core contract.
195
+ * @return coreInvocations The number of invocations for the project.
196
+ * @return coreMaxInvocations The max invocations for the project, as
197
+ * defined on the core contract.
198
+ */
199
+ function coreContractInvocationData(
200
+ uint256 _projectId,
201
+ address _coreContract
202
+ )
203
+ internal
204
+ view
205
+ returns (uint256 coreInvocations, uint256 coreMaxInvocations)
206
+ {
207
+ (
208
+ coreInvocations,
209
+ coreMaxInvocations,
210
+ ,
211
+ ,
212
+ ,
213
+
214
+ ) = IGenArt721CoreContractV3_Base(_coreContract).projectStateData(
215
+ _projectId
216
+ );
217
+ }
218
+
219
+ /**
220
+ * Returns the max invocations for a given MaxInvocationsProjectConfig.
221
+ * @param _maxInvocationsProjectConfig MaxInvocationsProjectConfig struct
222
+ * to be queried.
223
+ */
224
+ function getMaxInvocations(
225
+ MaxInvocationsProjectConfig storage _maxInvocationsProjectConfig
226
+ ) internal view returns (uint256) {
227
+ return _maxInvocationsProjectConfig.maxInvocations;
228
+ }
229
+
230
+ /**
231
+ * Returns if max has been invoked for a given MaxInvocationsProjectConfig.
232
+ * @param _maxInvocationsProjectConfig MaxInvocationsProjectConfig struct
233
+ * to be queried.
234
+ */
235
+ function getMaxHasBeenInvoked(
236
+ MaxInvocationsProjectConfig storage _maxInvocationsProjectConfig
237
+ ) internal view returns (bool) {
238
+ return _maxInvocationsProjectConfig.maxHasBeenInvoked;
239
+ }
240
+
241
+ /**
242
+ * Get if a project has reached its max invocations.
243
+ * Function is labaled as "safe" because it checks the core contract's
244
+ * invocations and max invocations. If the local max invocations is greater
245
+ * than the core contract's max invocations, it will defer to the core
246
+ * contract's max invocations (since those are the limiting factor).
247
+ * @param _projectId The id of the project.
248
+ * @param _coreContract The address of the core contract.
249
+ * @param _maxInvocationsProjectConfig MaxInvocationsProjectConfig struct
250
+ */
251
+ function projectMaxHasBeenInvokedSafe(
252
+ uint256 _projectId,
253
+ address _coreContract,
254
+ MaxInvocationsProjectConfig storage _maxInvocationsProjectConfig
255
+ ) internal view returns (bool) {
256
+ // get max invocations from core contract
257
+ uint256 coreInvocations;
258
+ uint256 coreMaxInvocations;
259
+ (coreInvocations, coreMaxInvocations) = MaxInvocationsLib
260
+ .coreContractInvocationData(_projectId, _coreContract);
261
+ uint256 localMaxInvocations = _maxInvocationsProjectConfig
262
+ .maxInvocations;
263
+ // value is locally defined, and could be out of date.
264
+ // only possible illogical state is if local max invocations is
265
+ // greater than core contract's max invocations, in which case
266
+ // we should use the core contract's max invocations
267
+ if (localMaxInvocations > coreMaxInvocations) {
268
+ // local max invocations is stale and illogical, defer to core
269
+ // contract's max invocations since it is the limiting factor
270
+ return (coreMaxInvocations == coreInvocations);
271
+ }
272
+ // local max invocations is limiting, so check core invocations against
273
+ // local max invocations
274
+ return (coreInvocations >= localMaxInvocations);
275
+ }
276
+
277
+ /**
278
+ * @notice Refreshes max invocations to account for core contract max
279
+ * invocations state, without imposing any additional restrictions on the
280
+ * minter's max invocations state.
281
+ * If minter max invocations have never been populated, this function will
282
+ * populate them to equal the core contract's max invocations state (which
283
+ * is the least restrictive state).
284
+ * If minter max invocations have been populated, this function will ensure
285
+ * the minter's max invocations are not greater than the core contract's
286
+ * max invocations (which would be stale and illogical), and update the
287
+ * minter's max invocations and maxHasBeenInvoked state to be consistent
288
+ * with the core contract's max invocations.
289
+ * If the minter max invocations have been populated and are not greater
290
+ * than the core contract's max invocations, this function will do nothing,
291
+ * since that is a valid state in which the minter has been configured to
292
+ * be more restrictive than the core contract.
293
+ * @dev assumes core contract's max invocations may only be reduced, which
294
+ * is the case for all V3 core contracts
295
+ */
296
+ function refreshMaxInvocations(
297
+ uint256 _projectId,
298
+ address _coreContract,
299
+ MaxInvocationsProjectConfig storage _maxInvocationsProjectConfig
300
+ ) internal returns (bool maxInvocationsUpdated) {
301
+ if (maxInvocationsIsUnconfigured(_maxInvocationsProjectConfig)) {
302
+ // populate the minter max invocation state to equal the values on
303
+ // the core contract (least restrictive state)
304
+ MaxInvocationsLib.syncProjectMaxInvocationsToCore(
305
+ _projectId,
306
+ _coreContract,
307
+ _maxInvocationsProjectConfig
308
+ );
309
+ // return true to indicate max invocation state update
310
+ maxInvocationsUpdated = true;
311
+ } else {
312
+ // if local max invocations were already populated, validate the local state
313
+ uint256 coreMaxInvocations;
314
+ uint256 coreInvocations;
315
+ (coreInvocations, coreMaxInvocations) = MaxInvocationsLib
316
+ .coreContractInvocationData(_projectId, _coreContract);
317
+
318
+ uint256 localMaxInvocations = _maxInvocationsProjectConfig
319
+ .maxInvocations;
320
+ if (localMaxInvocations > coreMaxInvocations) {
321
+ // if local max invocations are greater than core max invocations, make
322
+ // them equal since that is the least restrictive logical state
323
+ // @dev this is only possible if the core contract's max invocations
324
+ // have been reduced since the minter's max invocations were last
325
+ // updated
326
+ // set local max invocations to core contract's max invocations
327
+ _maxInvocationsProjectConfig.maxInvocations = uint24(
328
+ coreMaxInvocations
329
+ );
330
+ // update the minter's `maxHasBeenInvoked` state
331
+ _maxInvocationsProjectConfig
332
+ .maxHasBeenInvoked = (coreMaxInvocations ==
333
+ coreInvocations);
334
+ // return true to indicate max invocation state update
335
+ maxInvocationsUpdated = true;
336
+ } else if (coreInvocations >= localMaxInvocations) {
337
+ // core invocations are greater than this minter's max
338
+ // invocations, indicating that minting must have occurred on
339
+ // another minter. update the minter's `maxHasBeenInvoked` to
340
+ // true to prevent any false negatives on
341
+ // `getMaxHasBeenInvoked'
342
+ _maxInvocationsProjectConfig.maxHasBeenInvoked = true;
343
+ // @dev do not return true, because we did not change the value
344
+ // of minter-local max invocations
345
+ }
346
+ }
347
+ }
348
+ }
@@ -0,0 +1,175 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ import "@openzeppelin-4.7/contracts/utils/cryptography/MerkleProof.sol";
5
+
6
+ pragma solidity ^0.8.0;
7
+
8
+ /**
9
+ * @title Art Blocks Merkle Library
10
+ * @notice This library is designed to manage and verify merkle based gating for Art Blocks projects.
11
+ * It provides functionalities such as updating the merkle root of project, verifying an address against a proof,
12
+ * and setting the maximum number of invocations per address for a project.
13
+ * @author Art Blocks Inc.
14
+ */
15
+
16
+ library MerkleLib {
17
+ using MerkleProof for bytes32[];
18
+
19
+ /// @notice Default maximum invocations per address
20
+ uint256 internal constant DEFAULT_MAX_INVOCATIONS_PER_ADDRESS = 1;
21
+ bytes32 internal constant CONFIG_MERKLE_ROOT = "merkleRoot";
22
+ bytes32 internal constant CONFIG_USE_MAX_INVOCATIONS_PER_ADDRESS_OVERRIDE =
23
+ "useMaxMintsPerAddrOverride"; // shortened to fit in 32 bytes
24
+ bytes32 internal constant CONFIG_MAX_INVOCATIONS_OVERRIDE =
25
+ "maxMintsPerAddrOverride"; // shortened to match format of previous key
26
+
27
+ struct MerkleProjectConfig {
28
+ // If true, the maxInvocationsPerAddressOverride will be used.
29
+ // If false, the default max invocations per address will be used.
30
+ bool useMaxInvocationsPerAddressOverride;
31
+ // Maximum invocations allowed per address.
32
+ // This will be used if useMaxInvocationsPerAddressOverride is true.
33
+ // A value of 0 means no limit.
34
+ // @dev Safe to use uint24 because maxInvocationsPerAddressOverride <= 1_000_000
35
+ // and 1_000_000 << max uint24
36
+ uint24 maxInvocationsPerAddressOverride;
37
+ // The root of the Merkle tree for this project.
38
+ bytes32 merkleRoot;
39
+ // The number of current invocations for this project from a given user address.
40
+ mapping(address => uint256) userMintInvocations;
41
+ }
42
+
43
+ /**
44
+ * @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.
47
+ */
48
+ function setProjectInvocationsPerAddress(
49
+ MerkleProjectConfig storage _projectConfig,
50
+ uint24 _maxInvocationsPerAddress
51
+ ) internal {
52
+ _projectConfig.useMaxInvocationsPerAddressOverride = true;
53
+ _projectConfig
54
+ .maxInvocationsPerAddressOverride = _maxInvocationsPerAddress;
55
+ }
56
+
57
+ /**
58
+ * @notice Updates the Merkle root of a project.
59
+ * @param _projectConfig Merkle project config.
60
+ * @param _root The new Merkle root.
61
+ */
62
+ function updateMerkleRoot(
63
+ MerkleProjectConfig storage _projectConfig,
64
+ bytes32 _root
65
+ ) internal {
66
+ require(_root != bytes32(0), "Must provide root");
67
+ _projectConfig.merkleRoot = _root;
68
+ }
69
+
70
+ /**
71
+ * @notice Hashes an address.
72
+ * @param _address The address to hash.
73
+ * @return The hash of the address.
74
+ */
75
+ function hashAddress(address _address) internal pure returns (bytes32) {
76
+ return keccak256(abi.encodePacked(_address));
77
+ }
78
+
79
+ /**
80
+ * @notice Processes a proof for an address.
81
+ * @param _proof The proof to process.
82
+ * @param _address The address to process the proof for.
83
+ * @return The resulting hash from processing the proof.
84
+ */
85
+ function processProofForAddress(
86
+ bytes32[] calldata _proof,
87
+ address _address
88
+ ) internal pure returns (bytes32) {
89
+ return _proof.processProofCalldata(hashAddress(_address));
90
+ }
91
+
92
+ /**
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.
98
+ */
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));
105
+ }
106
+
107
+ /**
108
+ * @notice Returns the maximum number of invocations per address for a project.
109
+ * @param _projectConfig The merkle project config to check.
110
+ * @return The maximum number of invocations per address.
111
+ */
112
+ function projectMaxInvocationsPerAddress(
113
+ MerkleProjectConfig storage _projectConfig
114
+ ) internal view returns (uint256) {
115
+ if (_projectConfig.useMaxInvocationsPerAddressOverride) {
116
+ return uint256(_projectConfig.maxInvocationsPerAddressOverride);
117
+ } else {
118
+ return DEFAULT_MAX_INVOCATIONS_PER_ADDRESS;
119
+ }
120
+ }
121
+
122
+ /**
123
+ * @notice Returns remaining invocations for a given address.
124
+ * If `projectLimitsMintInvocationsPerAddress` is false, individual
125
+ * addresses are only limited by the project's maximum invocations, and a
126
+ * dummy value of zero is returned for `mintInvocationsRemaining`.
127
+ * If `projectLimitsMintInvocationsPerAddress` is true, the quantity of
128
+ * remaining mint invocations for address `_address` is returned as
129
+ * `mintInvocationsRemaining`.
130
+ * Note that mint invocations per address can be changed at any time by the
131
+ * artist of a project.
132
+ * Also note that all mint invocations are limited by a project's maximum
133
+ * invocations as defined on the core contract. This function may return
134
+ * a value greater than the project's remaining invocations.
135
+ */
136
+ function projectRemainingInvocationsForAddress(
137
+ MerkleProjectConfig storage _projectConfig,
138
+ address _address
139
+ )
140
+ internal
141
+ view
142
+ returns (
143
+ bool projectLimitsMintInvocationsPerAddress,
144
+ uint256 mintInvocationsRemaining
145
+ )
146
+ {
147
+ uint256 maxInvocationsPerAddress = projectMaxInvocationsPerAddress(
148
+ _projectConfig
149
+ );
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 {
157
+ projectLimitsMintInvocationsPerAddress = true;
158
+ uint256 userMintInvocations = _projectConfig.userMintInvocations[
159
+ _address
160
+ ];
161
+ // if user has not reached max invocations per address, return
162
+ // remaining invocations
163
+ if (maxInvocationsPerAddress > userMintInvocations) {
164
+ unchecked {
165
+ // will never underflow due to the check above
166
+ mintInvocationsRemaining =
167
+ maxInvocationsPerAddress -
168
+ userMintInvocations;
169
+ }
170
+ }
171
+ // else user has reached their maximum invocations, so leave
172
+ // `mintInvocationsRemaining` at solidity initial value of zero
173
+ }
174
+ }
175
+ }
@@ -0,0 +1,160 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ import "../../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
5
+ import "../../../interfaces/v0.8.x/IGenArt721CoreContractExposesHashSeed.sol";
6
+ import "../../../interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol";
7
+ import "../../../interfaces/v0.8.x/ISharedRandomizerV0.sol";
8
+
9
+ import "@openzeppelin-4.7/contracts/token/ERC20/IERC20.sol";
10
+
11
+ pragma solidity ^0.8.0;
12
+
13
+ /**
14
+ * @title Art Blocks Polyptych Minter Library
15
+ * @notice This library is designed for the Art Blocks platform. It includes
16
+ * structs and functions to help configure Polyptych minters.
17
+ * @author Art Blocks Inc.
18
+ */
19
+
20
+ library PolyptychLib {
21
+ bytes32 constant POLYPTYCH_PANEL_ID = "polyptychPanelId";
22
+
23
+ struct PolyptychProjectConfig {
24
+ // @dev uint24 provides sufficient qty of panels, and could be packed
25
+ // in the future if other values are added to this struct.
26
+ uint24 polyptychPanelId;
27
+ // Stores whether a panel with an ID has been minted for a given token hash seed
28
+ // panelId => hashSeed => panelIsMinted
29
+ mapping(uint256 => mapping(bytes12 => bool)) polyptychPanelHashSeedIsMinted;
30
+ }
31
+
32
+ /**
33
+ * @notice Increments the minter to the next polyptych panel of a given project
34
+ * @param _polyptychProjectConfig Project ID to increment to its next polyptych panel
35
+ */
36
+ function incrementPolyptychProjectPanelId(
37
+ PolyptychProjectConfig storage _polyptychProjectConfig
38
+ ) internal {
39
+ ++_polyptychProjectConfig.polyptychPanelId;
40
+ }
41
+
42
+ /**
43
+ * Validate the polyptych-related effects after a purchase on a polyptych
44
+ * minter.
45
+ * Verifies that the token hash seed is non-zero, and also enforces that
46
+ * the hash seed can only be used up to one time per panel.
47
+ * @param _polyptychProjectConfig polyptych project config
48
+ * @param _tokenHashSeed token hash seed
49
+ */
50
+ function validatePolyptychEffects(
51
+ PolyptychProjectConfig storage _polyptychProjectConfig,
52
+ bytes12 _tokenHashSeed
53
+ ) internal {
54
+ // ensure non-zero hash seed
55
+ require(_tokenHashSeed != bytes12(0), "Only non-zero hash seeds");
56
+ // verify that the hash seed has not been used on the current panel
57
+ uint256 _panelId = _polyptychProjectConfig.polyptychPanelId;
58
+ require(
59
+ !_polyptychProjectConfig.polyptychPanelHashSeedIsMinted[_panelId][
60
+ _tokenHashSeed
61
+ ],
62
+ "Panel already minted"
63
+ );
64
+ // mark hash seed as used for the current panel
65
+ _polyptychProjectConfig.polyptychPanelHashSeedIsMinted[_panelId][
66
+ _tokenHashSeed
67
+ ] = true;
68
+ }
69
+
70
+ /**
71
+ * @notice Sets the polyptych token hash seed on shared randomizer for a
72
+ * token ID on a core contract.
73
+ * @dev This function assumes the core contract is configured to use a
74
+ * shared randomizer that supports polyptych minting.
75
+ * @param _coreContract Core contract address
76
+ * @param _tokenId Token ID to set hash seed for
77
+ * @param _hashSeed Hash seed to set
78
+ */
79
+ function setPolyptychHashSeed(
80
+ address _coreContract,
81
+ uint256 _tokenId,
82
+ bytes12 _hashSeed
83
+ ) internal {
84
+ IGenArt721CoreContractV3WithSharedRandomizer(_coreContract)
85
+ .randomizerContract()
86
+ .preSetHashSeed({
87
+ _coreContract: _coreContract,
88
+ _tokenId: _tokenId,
89
+ _hashSeed: _hashSeed
90
+ });
91
+ }
92
+
93
+ /**
94
+ * Validates that token hash seed is assigned to the token ID `_tokenId` on
95
+ * the core contract `_coreContract`.
96
+ * Reverts if hash seed is not assigned to the token ID.
97
+ * @param _coreContract Core contract address
98
+ * @param _tokenId Token ID to validate
99
+ * @param _targetHashSeed target hash seed of `_tokenId` on `_coreContract`
100
+ */
101
+ function validateAssignedHashSeed(
102
+ address _coreContract,
103
+ uint256 _tokenId,
104
+ bytes12 _targetHashSeed
105
+ ) internal view {
106
+ bytes12 _assignedHashSeed = getTokenHashSeed(_coreContract, _tokenId);
107
+ require(
108
+ _assignedHashSeed == _targetHashSeed,
109
+ "Unexpected token hash seed"
110
+ );
111
+ }
112
+
113
+ /**
114
+ * Gets token hash seed from core contract.
115
+ * Note that this function assumes the core contract conforms to
116
+ * `IGenArt721CoreContractExposesHashSeed`, which early versions of V3
117
+ * core contracts do not. If a contract does not conform to this interface,
118
+ * this function will revert.
119
+ * @param _coreContract Core contract address
120
+ * @param _tokenId Token ID to query hash seed for
121
+ */
122
+ function getTokenHashSeed(
123
+ address _coreContract,
124
+ uint256 _tokenId
125
+ ) internal view returns (bytes12) {
126
+ return
127
+ IGenArt721CoreContractExposesHashSeed(_coreContract)
128
+ .tokenIdToHashSeed(_tokenId);
129
+ }
130
+
131
+ /**
132
+ * Gets the current polyptych panel ID from polyptych project config.
133
+ * Polyptych panel ID is an incremented value that is used to track the
134
+ * current panel of a polyptych project.
135
+ * @param _polyptychProjectConfig Polyptych project config struct to query
136
+ */
137
+ function getPolyptychPanelId(
138
+ PolyptychProjectConfig storage _polyptychProjectConfig
139
+ ) internal view returns (uint256) {
140
+ return _polyptychProjectConfig.polyptychPanelId;
141
+ }
142
+
143
+ /**
144
+ * Gets if a polyptych panel has already been minted for a given panel ID
145
+ * and hash seed.
146
+ * @param _polyptychProjectConfig Polyptych project config struct to query
147
+ * @param _panelId Polyptych panel ID to query
148
+ * @param _hashSeed Hash seed of panel to query
149
+ */
150
+ function getPolyptychPanelHashSeedIsMinted(
151
+ PolyptychProjectConfig storage _polyptychProjectConfig,
152
+ uint256 _panelId,
153
+ bytes12 _hashSeed
154
+ ) internal view returns (bool) {
155
+ return
156
+ _polyptychProjectConfig.polyptychPanelHashSeedIsMinted[_panelId][
157
+ _hashSeed
158
+ ];
159
+ }
160
+ }