@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,830 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ pragma solidity 0.8.19;
5
+
6
+ import "../../interfaces/v0.8.x/IMinterFilterV1.sol";
7
+ import "../../interfaces/v0.8.x/ISharedMinterV0.sol";
8
+ import "../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
9
+ import "../../interfaces/v0.8.x/ICoreRegistryV1.sol";
10
+
11
+ import "../../libs/v0.8.x/Bytes32Strings.sol";
12
+
13
+ import "@openzeppelin-4.7/contracts/access/Ownable.sol";
14
+ import "@openzeppelin-4.7/contracts/utils/structs/EnumerableMap.sol";
15
+ import "@openzeppelin-4.7/contracts/utils/structs/EnumerableSet.sol";
16
+
17
+ /**
18
+ * @title MinterFilterV2
19
+ * @dev At the time of deployment, this contract is intended to be used with
20
+ * core contracts that implement IGenArt721CoreContractV3_Base.
21
+ * @author Art Blocks Inc.
22
+ * @notice This Minter Filter V2 contract allows minters to be set on a
23
+ * per-project basis, for any registered core contract. This minter filter does
24
+ * not extend the previous version of the minter filters, as the previous
25
+ * version is not compatible with multiple core contracts.
26
+ *
27
+ * This contract is designed to be managed by an Admin ACL contract, as well as
28
+ * delegated privileges to core contract artists and Admin ACL contracts.
29
+ * These roles hold extensive power and can arbitrarily control and modify
30
+ * how a project's tokens may be minted.
31
+ * Care must be taken to ensure that the admin ACL contract and artist
32
+ * addresses are secure behind a multi-sig or other access control mechanism.
33
+ * ----------------------------------------------------------------------------
34
+ * The following functions are restricted as allowed by this contract's Admin
35
+ * ACL:
36
+ * - updateCoreRegistry
37
+ * - approveMinterGlobally
38
+ * - revokeMinterGlobally
39
+ * - removeMintersForProjectsOnContracts
40
+ * ----------------------------------------------------------------------------
41
+ * The following functions are restricted as allowed by each core contract's
42
+ * Admin ACL contract:
43
+ * - approveMinterForContract
44
+ * - revokeMinterForContract
45
+ * - removeMintersForProjectsOnContract
46
+ * ----------------------------------------------------------------------------
47
+ * The following functions are restricted as allowed by each core contract's
48
+ * Admin ACL contract, or to the artist address of the project:
49
+ * - setMinterForProject
50
+ * - removeMinterForProject
51
+ * ----------------------------------------------------------------------------
52
+ * Additional admin and artist privileged roles may be described on minters,
53
+ * registries, and other contracts that may interact with this contract.
54
+ */
55
+ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
56
+ // add Enumerable Map methods
57
+ using EnumerableMap for EnumerableMap.UintToAddressMap;
58
+ using EnumerableSet for EnumerableSet.AddressSet;
59
+ // add Bytes32Strings methods
60
+ using Bytes32Strings for bytes32;
61
+
62
+ /// version & type of this core contract
63
+ bytes32 constant MINTER_FILTER_VERSION = "v2.0.0";
64
+
65
+ function minterFilterVersion() external pure returns (string memory) {
66
+ return MINTER_FILTER_VERSION.toString();
67
+ }
68
+
69
+ bytes32 constant MINTER_FILTER_TYPE = "MinterFilterV2";
70
+
71
+ function minterFilterType() external pure returns (string memory) {
72
+ return MINTER_FILTER_TYPE.toString();
73
+ }
74
+
75
+ /// Admin ACL contract for this minter filter
76
+ IAdminACLV0 public adminACLContract;
77
+
78
+ /**
79
+ * @notice Core registry, that tracks all registered core contracts
80
+ */
81
+ ICoreRegistryV1 public coreRegistry;
82
+
83
+ /// minter address => qty projects across all core contracts currently
84
+ /// using the minter
85
+ mapping(address => uint256) public numProjectsUsingMinter;
86
+
87
+ /**
88
+ * Enumerable Set of globally approved minters.
89
+ * This is a Set of addresses that are approved to mint on any
90
+ * project, for any core contract.
91
+ * @dev note that contract admins can extend a separate Set of minters for
92
+ * their core contract via the `approveMinterForContract` function.
93
+ */
94
+ EnumerableSet.AddressSet private globallyApprovedMinters;
95
+
96
+ /**
97
+ * Mapping of core contract addresses to Enumerable Sets of approved
98
+ * minters for that core contract.
99
+ * @dev note that contract admins can extend this Set for their core
100
+ * contract by via the `approveMinterForContract` function, and can remove
101
+ * minters from this Set via the `revokeMinterForContract` function.
102
+ */
103
+ mapping(address => EnumerableSet.AddressSet)
104
+ private contractApprovedMinters;
105
+
106
+ /**
107
+ * Mapping of core contract addresses to Enumerable Maps of project IDs to
108
+ * minter addresses.
109
+ */
110
+ mapping(address => EnumerableMap.UintToAddressMap) private minterForProject;
111
+
112
+ function _onlyNonZeroAddress(address _address) internal pure {
113
+ require(_address != address(0), "Only non-zero address");
114
+ }
115
+
116
+ /**
117
+ * @notice Function to restrict access to only AdminACL allowed calls
118
+ * on a given core contract.
119
+ * @dev defers to the ACL contract used by the core contract
120
+ * @param _selector function selector to be checked
121
+ */
122
+ function _onlyAdminACL(bytes4 _selector) internal {
123
+ require(
124
+ adminACLAllowed(msg.sender, address(this), _selector),
125
+ "Only Admin ACL allowed"
126
+ );
127
+ }
128
+
129
+ /**
130
+ * @notice Function to restrict access to only AdminACL allowed calls
131
+ * on a given core contract.
132
+ * @dev defers to the ACL contract used by the core contract
133
+ * @param _coreContract core contract address
134
+ * @param _selector function selector to be checked
135
+ */
136
+ function _onlyCoreAdminACL(
137
+ address _coreContract,
138
+ bytes4 _selector
139
+ ) internal {
140
+ require(
141
+ IGenArt721CoreContractV3_Base(_coreContract).adminACLAllowed(
142
+ msg.sender,
143
+ address(this),
144
+ _selector
145
+ ),
146
+ "Only Core AdminACL allowed"
147
+ );
148
+ }
149
+
150
+ // function to restrict access to only core AdminACL or the project artist
151
+ function _onlyCoreAdminACLOrArtist(
152
+ uint256 _projectId,
153
+ address _coreContract,
154
+ bytes4 _selector
155
+ ) internal {
156
+ IGenArt721CoreContractV3_Base genArtCoreContract_Base = IGenArt721CoreContractV3_Base(
157
+ _coreContract
158
+ );
159
+ require(
160
+ (msg.sender ==
161
+ genArtCoreContract_Base.projectIdToArtistAddress(_projectId)) ||
162
+ (
163
+ genArtCoreContract_Base.adminACLAllowed(
164
+ msg.sender,
165
+ address(this),
166
+ _selector
167
+ )
168
+ ),
169
+ "Only Artist or Core Admin ACL"
170
+ );
171
+ }
172
+
173
+ // function to restrict access to only core contracts registered with the
174
+ // currently configured core registry. This is used to prevent
175
+ // non-registered core contracts from being used with this minter filter.
176
+ function _onlyRegisteredCoreContract(address _coreContract) internal view {
177
+ // @dev use core registry to check if core contract is registered
178
+ require(
179
+ coreRegistry.isRegisteredContract(_coreContract),
180
+ "Only registered core contract"
181
+ );
182
+ }
183
+
184
+ // function to restrict access to only valid project IDs
185
+ function _onlyValidProjectId(
186
+ uint256 _projectId,
187
+ address _coreContract
188
+ ) internal view {
189
+ IGenArt721CoreContractV3_Base genArtCoreContract = IGenArt721CoreContractV3_Base(
190
+ _coreContract
191
+ );
192
+ require(
193
+ (_projectId >= genArtCoreContract.startingProjectId()) &&
194
+ (_projectId < genArtCoreContract.nextProjectId()),
195
+ "Only valid project ID"
196
+ );
197
+ }
198
+
199
+ // checks if minter is globally approved or approved for a core contract
200
+ function _onlyApprovedMinter(
201
+ address _coreContract,
202
+ address _minter
203
+ ) internal view {
204
+ require(
205
+ isApprovedMinterForContract(_coreContract, _minter),
206
+ "Only approved minters"
207
+ );
208
+ }
209
+
210
+ /**
211
+ * @notice Initializes contract to be a Minter for `_genArt721Address`.
212
+ * @param _adminACLContract Address of admin access control contract, to be
213
+ * set as contract owner.
214
+ * @param _coreRegistry Address of core registry contract.
215
+ */
216
+ constructor(address _adminACLContract, address _coreRegistry) {
217
+ // set AdminACL management contract as owner
218
+ _transferOwnership(_adminACLContract);
219
+ // set core registry contract
220
+ _updateCoreRegistry(_coreRegistry);
221
+ emit Deployed();
222
+ }
223
+
224
+ /// @dev override to prevent renouncing ownership
225
+ /// @dev not permission gated since this immediately reverts
226
+ function renounceOwnership() public pure override {
227
+ revert("Cannot renounce ownership");
228
+ }
229
+
230
+ /**
231
+ * @notice Updates the core registry contract to be used by this contract.
232
+ * Only callable as allowed by AdminACL of this contract.
233
+ * @param _coreRegistry Address of the new core registry contract.
234
+ */
235
+ function updateCoreRegistry(address _coreRegistry) external {
236
+ _onlyAdminACL(this.updateCoreRegistry.selector);
237
+ _updateCoreRegistry(_coreRegistry);
238
+ }
239
+
240
+ /**
241
+ * @notice Globally approves minter `_minter` to be available for
242
+ * minting on any project, for any core contract.
243
+ * Only callable as allowed by AdminACL of this contract.
244
+ * @dev Reverts if minter is already globally approved, or does not
245
+ * implement minterType().
246
+ * @param _minter Minter to be approved.
247
+ */
248
+ function approveMinterGlobally(address _minter) external {
249
+ _onlyAdminACL(this.approveMinterGlobally.selector);
250
+ // @dev add() returns true only if the value was not already in the Set
251
+ require(
252
+ globallyApprovedMinters.add(_minter),
253
+ "Minter already approved"
254
+ );
255
+ emit MinterApprovedGlobally(
256
+ _minter,
257
+ ISharedMinterV0(_minter).minterType()
258
+ );
259
+ }
260
+
261
+ /**
262
+ * @notice Removes previously globally approved minter `_minter`
263
+ * from the list of globally approved minters.
264
+ * Only callable as allowed by AdminACL of this contract.
265
+ * Reverts if minter is not globally approved, or if minter is still
266
+ * in use by any project.
267
+ * @dev intentionally do not check if minter is still in use by any
268
+ * project, meaning that any projects currently using the minter will
269
+ * continue to be able to use it. If existing projects should be forced
270
+ * to discontinue using a minter, the minter may be removed by the minter
271
+ * filter admin in bulk via the `TODO` function.
272
+ * @param _minter Minter to remove.
273
+ */
274
+ function revokeMinterGlobally(address _minter) external {
275
+ _onlyAdminACL(this.revokeMinterGlobally.selector);
276
+ // @dev remove() returns true only if the value was already in the Set
277
+ require(
278
+ globallyApprovedMinters.remove(_minter),
279
+ "Only previously approved minter"
280
+ );
281
+ emit MinterRevokedGlobally(_minter);
282
+ }
283
+
284
+ /**
285
+ * @notice Approves minter `_minter` to be available for minting on
286
+ * any project on core contarct `_coreContract`.
287
+ * Only callable as allowed by AdminACL of core contract `_coreContract`.
288
+ * Reverts if core contract is not registered, if minter is already
289
+ * approved for the contract, or if minter does not implement minterType().
290
+ * @param _coreContract Core contract to approve minter for.
291
+ * @param _minter Minter to be approved.
292
+ */
293
+ function approveMinterForContract(
294
+ address _coreContract,
295
+ address _minter
296
+ ) external {
297
+ _onlyRegisteredCoreContract(_coreContract);
298
+ _onlyCoreAdminACL(
299
+ _coreContract,
300
+ this.approveMinterForContract.selector
301
+ );
302
+ // @dev add() returns true only if the value was not already in the Set
303
+ require(
304
+ contractApprovedMinters[_coreContract].add(_minter),
305
+ "Minter already approved"
306
+ );
307
+ emit MinterApprovedForContract({
308
+ coreContract: _coreContract,
309
+ minter: _minter,
310
+ minterType: ISharedMinterV0(_minter).minterType()
311
+ });
312
+ }
313
+
314
+ /**
315
+ * @notice Removes previously approved minter `_minter` from the
316
+ * list of approved minters on core contract `_coreContract`.
317
+ * Only callable as allowed by AdminACL of core contract `_coreContract`.
318
+ * Reverts if core contract is not registered, or if minter is not approved
319
+ * on contract.
320
+ * @dev intentionally does not check if minter is still in use by any
321
+ * project, meaning that any projects currently using the minter will
322
+ * continue to be able to use it. If existing projects should be forced
323
+ * to discontinue using a minter, the minter may be removed by the contract
324
+ * admin in bulk via the `TODO` function.
325
+ * @param _minter Minter to remove.
326
+ */
327
+ function revokeMinterForContract(
328
+ address _coreContract,
329
+ address _minter
330
+ ) external {
331
+ _onlyRegisteredCoreContract(_coreContract);
332
+ _onlyCoreAdminACL(_coreContract, this.revokeMinterForContract.selector);
333
+ // @dev intentionally do not check if minter is still in use by any
334
+ // project, since it is possible that a different contract's project is
335
+ // using the minter
336
+ // @dev remove() returns true only if the value was already in the Set
337
+ require(
338
+ contractApprovedMinters[_coreContract].remove(_minter),
339
+ "Only previously approved minter"
340
+ );
341
+ emit MinterRevokedForContract({
342
+ coreContract: _coreContract,
343
+ minter: _minter
344
+ });
345
+ }
346
+
347
+ /**
348
+ * @notice Sets minter for project `_projectId` on contract `_coreContract`
349
+ * to minter `_minter`.
350
+ * Only callable by the project's artist or as allowed by AdminACL of
351
+ * core contract `_coreContract`.
352
+ * Reverts if:
353
+ * - core contract is not registered
354
+ * - minter is not approved globally on this minter filter or for the
355
+ * project's core contract
356
+ * - project is not valid on the core contract
357
+ * - function is called by an address other than the project's artist
358
+ * or a sender allowed by the core contract's admin ACL
359
+ * - minter does not implement minterType()
360
+ * @param _projectId Project ID to set minter for.
361
+ * @param _coreContract Core contract of project.
362
+ * @param _minter Minter to be the project's minter.
363
+ */
364
+ function setMinterForProject(
365
+ uint256 _projectId,
366
+ address _coreContract,
367
+ address _minter
368
+ ) external {
369
+ /// CHECKS
370
+ _onlyRegisteredCoreContract(_coreContract);
371
+ _onlyCoreAdminACLOrArtist(
372
+ _projectId,
373
+ _coreContract,
374
+ this.setMinterForProject.selector
375
+ );
376
+ _onlyApprovedMinter(_coreContract, _minter);
377
+ _onlyValidProjectId(_projectId, _coreContract);
378
+ /// EFFECTS
379
+ // decrement number of projects using a previous minter
380
+ (bool hasPreviousMinter, address previousMinter) = minterForProject[
381
+ _coreContract
382
+ ].tryGet(_projectId);
383
+ if (hasPreviousMinter) {
384
+ numProjectsUsingMinter[previousMinter]--;
385
+ }
386
+ // assign new minter
387
+ numProjectsUsingMinter[_minter]++;
388
+ minterForProject[_coreContract].set(_projectId, _minter);
389
+ emit ProjectMinterRegistered({
390
+ projectId: _projectId,
391
+ coreContract: _coreContract,
392
+ minter: _minter,
393
+ minterType: ISharedMinterV0(_minter).minterType()
394
+ });
395
+ }
396
+
397
+ /**
398
+ * @notice Updates project `_projectId` on contract `_coreContract` to have
399
+ * no configured minter.
400
+ * Only callable by the project's artist or as allowed by AdminACL of
401
+ * core contract `_coreContract`.
402
+ * Reverts if:
403
+ * - core contract is not registered
404
+ * - project does not already have a minter assigned
405
+ * - function is called by an address other than the project's artist
406
+ * or a sender allowed by the core contract's admin ACL
407
+ * @param _projectId Project ID to remove minter for.
408
+ * @param _coreContract Core contract of project.
409
+ * @dev requires project to have an assigned minter
410
+ */
411
+ function removeMinterForProject(
412
+ uint256 _projectId,
413
+ address _coreContract
414
+ ) external {
415
+ _onlyRegisteredCoreContract(_coreContract);
416
+ _onlyCoreAdminACLOrArtist(
417
+ _projectId,
418
+ _coreContract,
419
+ this.removeMinterForProject.selector
420
+ );
421
+ // @dev this will revert if project does not have a minter
422
+ _removeMinterForProject(_projectId, _coreContract);
423
+ }
424
+
425
+ /**
426
+ * @notice Updates an array of project IDs to have no configured minter.
427
+ * Only callable as allowed by AdminACL of core contract `_coreContract`.
428
+ * Reverts if the core contract is not registered, or if any project does
429
+ * not already have a minter assigned.
430
+ * @param _projectIds Array of project IDs to remove minters for.
431
+ * @dev caution with respect to single tx gas limits
432
+ */
433
+ function removeMintersForProjectsOnContract(
434
+ uint256[] calldata _projectIds,
435
+ address _coreContract
436
+ ) external {
437
+ _onlyRegisteredCoreContract(_coreContract);
438
+ _onlyCoreAdminACL(
439
+ _coreContract,
440
+ this.removeMintersForProjectsOnContract.selector
441
+ );
442
+ uint256 numProjects = _projectIds.length;
443
+ for (uint256 i; i < numProjects; ) {
444
+ _removeMinterForProject(_projectIds[i], _coreContract);
445
+ unchecked {
446
+ ++i;
447
+ }
448
+ }
449
+ }
450
+
451
+ /**
452
+ * @notice Mint a token from project `_projectId` on contract
453
+ * `_coreContract` to `_to`, originally purchased by `sender`.
454
+ * @param _to The new token's owner.
455
+ * @param _projectId Project ID to mint a new token on.
456
+ * @param _sender Address purchasing a new token.
457
+ * @param _coreContract Core contract of project.
458
+ * @return tokenId Token ID of minted token
459
+ * @dev reverts w/nonexistent key error when project has no assigned minter
460
+ * @dev does not check if core contract is registered, for gas efficiency
461
+ * and because project must have already been assigned a minter, which
462
+ * requires the core contract to have been previously registered. If core
463
+ * contract was unregistered but the project still has an assigned minter,
464
+ * minting will remain possible.
465
+ * @dev function name is optimized for gas.
466
+ */
467
+ function mint_joo(
468
+ address _to,
469
+ uint256 _projectId,
470
+ address _coreContract,
471
+ address _sender
472
+ ) external returns (uint256 tokenId) {
473
+ // CHECKS
474
+ // minter is the project's minter
475
+ require(
476
+ msg.sender == minterForProject[_coreContract].get(_projectId),
477
+ "Only assigned minter"
478
+ );
479
+ // INTERACTIONS
480
+ tokenId = IGenArt721CoreContractV3_Base(_coreContract).mint_Ecf(
481
+ _to,
482
+ _projectId,
483
+ _sender
484
+ );
485
+ return tokenId;
486
+ }
487
+
488
+ /**
489
+ * @notice Gets the assigned minter for project `_projectId` on core
490
+ * contract `_coreContract`.
491
+ * Reverts if project does not have an assigned minter.
492
+ * @param _projectId Project ID to query.
493
+ * @param _coreContract Core contract of project.
494
+ * @return address Minter address assigned to project
495
+ * @dev requires project to have an assigned minter
496
+ * @dev this function intentionally does not check that the core contract
497
+ * is registered, since it must have been registered at the time the
498
+ * project was assigned a minter
499
+ */
500
+ function getMinterForProject(
501
+ uint256 _projectId,
502
+ address _coreContract
503
+ ) external view returns (address) {
504
+ (bool hasMinter, address currentMinter) = minterForProject[
505
+ _coreContract
506
+ ].tryGet(_projectId);
507
+ require(hasMinter, "No minter assigned");
508
+ return currentMinter;
509
+ }
510
+
511
+ /**
512
+ * @notice Queries if project `_projectId` on core contract `_coreContract`
513
+ * has an assigned minter.
514
+ * @param _projectId Project ID to query.
515
+ * @param _coreContract Core contract of project.
516
+ * @return bool true if project has an assigned minter, else false
517
+ * @dev requires project to have an assigned minter
518
+ * @dev this function intentionally does not check that the core contract
519
+ * is registered, since it must have been registered at the time the
520
+ * project was assigned a minter
521
+ */
522
+ function projectHasMinter(
523
+ uint256 _projectId,
524
+ address _coreContract
525
+ ) external view returns (bool) {
526
+ (bool hasMinter, ) = minterForProject[_coreContract].tryGet(_projectId);
527
+ return hasMinter;
528
+ }
529
+
530
+ /**
531
+ * @notice Gets quantity of projects on a given core contract that have
532
+ * assigned minters.
533
+ * @param _coreContract Core contract to query.
534
+ * @return uint256 quantity of projects that have assigned minters
535
+ * @dev this function intentionally does not check that the core contract
536
+ * is registered, since it must have been registered at the time the
537
+ * project was assigned a minter
538
+ */
539
+ function getNumProjectsOnContractWithMinters(
540
+ address _coreContract
541
+ ) external view returns (uint256) {
542
+ return minterForProject[_coreContract].length();
543
+ }
544
+
545
+ /**
546
+ * @notice Get project ID and minter address at index `_index` of
547
+ * enumerable map.
548
+ * @param _coreContract Core contract to query.
549
+ * @param _index enumerable map index to query.
550
+ * @return projectId project ID at index `_index`
551
+ * @return minterAddress minter address for project at index `_index`
552
+ * @return minterType minter type of minter at minterAddress
553
+ * @dev index must be < quantity of projects that have assigned minters,
554
+ * otherwise reverts
555
+ * @dev reverts if minter does not implement minterType() function
556
+ * @dev this function intentionally does not check that the core contract
557
+ * is registered, since it must have been registered at the time the
558
+ * project was assigned a minter
559
+ */
560
+ function getProjectAndMinterInfoOnContractAt(
561
+ address _coreContract,
562
+ uint256 _index
563
+ )
564
+ external
565
+ view
566
+ returns (
567
+ uint256 projectId,
568
+ address minterAddress,
569
+ string memory minterType
570
+ )
571
+ {
572
+ // @dev at() reverts if index is out of bounds
573
+ (projectId, minterAddress) = minterForProject[_coreContract].at(_index);
574
+ minterType = ISharedMinterV0(minterAddress).minterType();
575
+ return (projectId, minterAddress, minterType);
576
+ }
577
+
578
+ /**
579
+ * @notice View that returns if a core contract is registered with the
580
+ * core registry, allowing this minter filter to service it.
581
+ * @param _coreContract core contract address to be checked
582
+ * @return bool true if core contract is registered, else false
583
+ */
584
+ function isRegisteredCoreContract(
585
+ address _coreContract
586
+ ) external view override returns (bool) {
587
+ return coreRegistry.isRegisteredContract(_coreContract);
588
+ }
589
+
590
+ /**
591
+ * @notice Gets all projects on core contract `_coreContract` that are
592
+ * using minter `_minter`.
593
+ * Warning: Unbounded gas limit. This function is gas-intensive and should
594
+ * only be used for off-chain queries. Alternatively, the subgraph indexing
595
+ * layer may be used to query these values.
596
+ * @param _coreContract core contract to query
597
+ * @param _minter minter to query
598
+ */
599
+ function getProjectsOnContractUsingMinter(
600
+ address _coreContract,
601
+ address _minter
602
+ ) external view returns (uint256[] memory projectIds) {
603
+ // initialize arrays with maximum potential length
604
+ // @dev use num projects using minter across all contracts since it the
605
+ // maximum length of this array
606
+ uint256 maxNumProjects = numProjectsUsingMinter[_minter];
607
+ projectIds = new uint256[](maxNumProjects);
608
+ // iterate over all projects on contract, adding to array if using
609
+ // `_minter`
610
+ EnumerableMap.UintToAddressMap storage minterMap = minterForProject[
611
+ _coreContract
612
+ ];
613
+ uint256 numProjects = minterMap.length();
614
+ uint256 numProjectsOnContractUsingMinter;
615
+ for (uint256 i; i < numProjects; ) {
616
+ (uint256 projectId, address minter) = minterMap.at(i);
617
+ if (minter == _minter) {
618
+ projectIds[numProjectsOnContractUsingMinter++] = projectId;
619
+ }
620
+ unchecked {
621
+ ++i;
622
+ }
623
+ }
624
+ // trim array if necessary
625
+ if (maxNumProjects > numProjectsOnContractUsingMinter) {
626
+ assembly {
627
+ let decrease := sub(
628
+ maxNumProjects,
629
+ numProjectsOnContractUsingMinter
630
+ )
631
+ mstore(projectIds, sub(mload(projectIds), decrease))
632
+ }
633
+ }
634
+ return projectIds;
635
+ }
636
+
637
+ /**
638
+ * @notice Gets all minters that are globally approved on this minter
639
+ * filter. Returns an array of MinterWithType structs, which contain the
640
+ * minter address and minter type.
641
+ * This function has unbounded gas, and should only be used for off-chain
642
+ * queries.
643
+ * Alternatively, the subgraph indexing layer may be used to query these
644
+ * values.
645
+ * @return mintersWithTypes Array of MinterWithType structs, which contain
646
+ * the minter address and minter type.
647
+ */
648
+ function getAllGloballyApprovedMinters()
649
+ external
650
+ view
651
+ returns (MinterWithType[] memory mintersWithTypes)
652
+ {
653
+ // initialize arrays with appropriate length
654
+ uint256 numMinters = globallyApprovedMinters.length();
655
+ mintersWithTypes = new MinterWithType[](numMinters);
656
+ // iterate over all globally approved minters, adding to array
657
+ for (uint256 i; i < numMinters; ) {
658
+ address minterAddress = globallyApprovedMinters.at(i);
659
+ // @dev we know minterType() does not revert, because it was called
660
+ // when globally approving the minter
661
+ string memory minterType = ISharedMinterV0(minterAddress)
662
+ .minterType();
663
+ mintersWithTypes[i] = MinterWithType({
664
+ minterAddress: minterAddress,
665
+ minterType: minterType
666
+ });
667
+ unchecked {
668
+ ++i;
669
+ }
670
+ }
671
+ }
672
+
673
+ /**
674
+ * @notice Gets all minters that are approved for a specific core contract.
675
+ * Returns an array of MinterWithType structs, which contain the minter
676
+ * address and minter type.
677
+ * This function has unbounded gas, and should only be used for off-chain
678
+ * queries.
679
+ * @param _coreContract Core contract to query.
680
+ * @return mintersWithTypes Array of MinterWithType structs, which contain
681
+ * the minter address and minter type.
682
+ */
683
+ function getAllContractApprovedMinters(
684
+ address _coreContract
685
+ ) external view returns (MinterWithType[] memory mintersWithTypes) {
686
+ // initialize arrays with appropriate length
687
+ EnumerableSet.AddressSet
688
+ storage _contractApprovedMinters = contractApprovedMinters[
689
+ _coreContract
690
+ ];
691
+ uint256 numMinters = _contractApprovedMinters.length();
692
+ mintersWithTypes = new MinterWithType[](numMinters);
693
+ // iterate over all minters approved for a given contract, adding to
694
+ // array
695
+ for (uint256 i; i < numMinters; ) {
696
+ address minterAddress = _contractApprovedMinters.at(i);
697
+ // @dev we know minterType() does not revert, because it was called
698
+ // when approving the minter for a contract
699
+ string memory minterType = ISharedMinterV0(minterAddress)
700
+ .minterType();
701
+ mintersWithTypes[i] = MinterWithType({
702
+ minterAddress: minterAddress,
703
+ minterType: minterType
704
+ });
705
+ unchecked {
706
+ ++i;
707
+ }
708
+ }
709
+ }
710
+
711
+ /**
712
+ * @notice Convenience function that returns whether `_sender` is allowed
713
+ * to call function with selector `_selector` on contract `_contract`, as
714
+ * determined by this contract's current Admin ACL contract. Expected use
715
+ * cases include minter contracts checking if caller is allowed to call
716
+ * admin-gated functions on minter contracts.
717
+ * @param _sender Address of the sender calling function with selector
718
+ * `_selector` on contract `_contract`.
719
+ * @param _contract Address of the contract being called by `_sender`.
720
+ * @param _selector Function selector of the function being called by
721
+ * `_sender`.
722
+ * @return bool Whether `_sender` is allowed to call function with selector
723
+ * `_selector` on contract `_contract`.
724
+ * @dev assumes the Admin ACL contract is the owner of this contract, which
725
+ * is expected to always be true.
726
+ * @dev adminACLContract is expected to either be null address (if owner
727
+ * has renounced ownership), or conform to IAdminACLV0 interface. Check for
728
+ * null address first to avoid revert when admin has renounced ownership.
729
+ */
730
+ function adminACLAllowed(
731
+ address _sender,
732
+ address _contract,
733
+ bytes4 _selector
734
+ ) public returns (bool) {
735
+ return
736
+ owner() != address(0) &&
737
+ adminACLContract.allowed(_sender, _contract, _selector);
738
+ }
739
+
740
+ /**
741
+ * @notice Returns whether `_minter` is globally approved to mint tokens
742
+ * on any contract.
743
+ * @param _minter Address of minter to check.
744
+ */
745
+ function isGloballyApprovedMinter(
746
+ address _minter
747
+ ) public view returns (bool) {
748
+ return globallyApprovedMinters.contains(_minter);
749
+ }
750
+
751
+ /**
752
+ * @notice Returns whether `_minter` is approved to mint tokens on
753
+ * core contract `_coreContract`.
754
+ * @param _coreContract Address of core contract to check.
755
+ * @param _minter Address of minter to check.
756
+ */
757
+ function isApprovedMinterForContract(
758
+ address _coreContract,
759
+ address _minter
760
+ ) public view returns (bool) {
761
+ return
762
+ isGloballyApprovedMinter(_minter) ||
763
+ contractApprovedMinters[_coreContract].contains(_minter);
764
+ }
765
+
766
+ /**
767
+ * @notice Returns contract owner. Set to deployer's address by default on
768
+ * contract deployment.
769
+ * @return address Address of contract owner.
770
+ * @dev ref: https://docs.openzeppelin.com/contracts/4.x/api/access#Ownable
771
+ * @dev owner role was called `admin` prior to V3 core contract
772
+ */
773
+ function owner()
774
+ public
775
+ view
776
+ override(Ownable, IMinterFilterV1)
777
+ returns (address)
778
+ {
779
+ return Ownable.owner();
780
+ }
781
+
782
+ /**
783
+ * @notice Updates project `_projectId` to have no configured minter
784
+ * Reverts if project does not already have an assigned minter.
785
+ * @param _projectId Project ID to remove minter.
786
+ * @dev requires project to have an assigned minter
787
+ * @dev this function intentionally does not check that the core contract
788
+ * is registered, since it must have been registered at the time the
789
+ * project was assigned a minter
790
+ */
791
+ function _removeMinterForProject(
792
+ uint256 _projectId,
793
+ address _coreContract
794
+ ) internal {
795
+ // remove minter for project and emit
796
+ // @dev `minterForProject.get()` reverts tx if no minter set for project
797
+ numProjectsUsingMinter[
798
+ minterForProject[_coreContract].get(
799
+ _projectId,
800
+ "No minter assigned"
801
+ )
802
+ ]--;
803
+ minterForProject[_coreContract].remove(_projectId);
804
+ emit ProjectMinterRemoved(_projectId, _coreContract);
805
+ }
806
+
807
+ /**
808
+ * @notice Transfers ownership of the contract to a new account (`_owner`).
809
+ * Internal function without access restriction.
810
+ * @param _owner New owner.
811
+ * @dev owner role was called `admin` prior to V3 core contract.
812
+ * @dev Overrides and wraps OpenZeppelin's _transferOwnership function to
813
+ * also update adminACLContract for improved introspection.
814
+ */
815
+ function _transferOwnership(address _owner) internal override {
816
+ Ownable._transferOwnership(_owner);
817
+ adminACLContract = IAdminACLV0(_owner);
818
+ }
819
+
820
+ /**
821
+ * @notice Updates this contract's core registry contract to
822
+ * `_coreRegistry`.
823
+ * @param _coreRegistry New core registry contract address.
824
+ */
825
+ function _updateCoreRegistry(address _coreRegistry) internal {
826
+ _onlyNonZeroAddress(_coreRegistry);
827
+ coreRegistry = ICoreRegistryV1(_coreRegistry);
828
+ emit CoreRegistryUpdated(_coreRegistry);
829
+ }
830
+ }