@artblocks/contracts 1.3.2 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/README.md +11 -10
  2. package/artifacts/contracts/AdminACLV0RoyaltyRegistry.sol/AdminACLV0RoyaltyRegistry.json +193 -0
  3. package/artifacts/contracts/AdminACLV0RoyaltyRegistry.sol/IRoyaltyRegistry.json +35 -0
  4. package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
  5. package/artifacts/contracts/BytecodeStorageReaders/BytecodeStorageReaderContractV2.sol/BytecodeStorageReaderContractV2.json +2 -2
  6. package/artifacts/contracts/BytecodeStorageReaders/BytecodeStorageReaderContractV2_Web3Call.sol/BytecodeStorageReaderContractV2_Web3Call.json +2 -2
  7. package/artifacts/contracts/BytecodeStorageV2Writer.sol/BytecodeStorageV2Writer.json +2 -2
  8. package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +210 -2
  9. package/artifacts/contracts/GenArt721CoreV3_Curated.sol/GenArt721CoreV3_Curated.json +235 -20
  10. package/artifacts/contracts/GenArt721CoreV3_Curated_Flex.sol/GenArt721CoreV3_Curated_Flex.json +3197 -0
  11. package/artifacts/contracts/GenArt721CoreV3_Explorations_Flex.sol/GenArt721CoreV3_Explorations_Flex.json +3192 -0
  12. package/artifacts/contracts/OwnedCreate2FactoryV0.sol/OwnedCreate2FactoryV0.json +2 -2
  13. package/artifacts/contracts/archive/GenArt721CoreV3.sol/GenArt721CoreV3.json +27 -2
  14. package/artifacts/contracts/archive/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +27 -2
  15. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
  16. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
  17. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV4.sol/MinterDAExpV4.json +2 -2
  18. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  19. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  20. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -2
  21. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
  22. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
  23. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV4.sol/MinterDALinV4.json +2 -2
  24. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
  25. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
  26. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
  27. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV4.sol/MinterHolderV4.json +2 -2
  28. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
  29. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
  30. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
  31. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
  32. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV5.sol/MinterMerkleV5.json +2 -2
  33. package/artifacts/contracts/archive/minter-suite/Minters/MinterPolyptych/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +25 -0
  34. package/artifacts/contracts/archive/minter-suite/Minters/MinterPolyptych/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
  35. package/artifacts/contracts/archive/minter-suite/Minters/MinterSEA/MinterSEAV0.sol/MinterSEAV0.json +2 -2
  36. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  37. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  38. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV4.sol/MinterSetPriceV4.json +2 -2
  39. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  40. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  41. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
  42. package/artifacts/contracts/engine/V3/EngineFactoryV0.sol/EngineFactoryV0.json +28 -2
  43. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +239 -20
  44. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +267 -48
  45. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +27 -2
  46. package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +2 -2
  47. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +27 -2
  48. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +25 -0
  49. package/artifacts/contracts/engine/V3/transfer-hooks/AbstractTransferHook.sol/AbstractTransferHook.json +79 -0
  50. package/artifacts/contracts/engine/V3/transfer-hooks/OwnerHistoryTransferHook.sol/OwnerHistoryTransferHook.json +315 -0
  51. package/artifacts/contracts/generator/GenArt721GeneratorV0.sol/GenArt721GeneratorV0.json +2 -2
  52. package/artifacts/contracts/interfaces/v0.8.x/IClaimMinter.sol/IClaimMinter.json +189 -0
  53. package/artifacts/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +149 -0
  54. package/artifacts/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol/IEngineFactoryV0.json +26 -0
  55. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +25 -0
  56. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +25 -0
  57. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +123 -0
  58. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +123 -0
  59. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.json +25 -0
  60. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol/IGenArt721CoreContractV3_Engine_PreV3p2.json +25 -0
  61. package/artifacts/contracts/interfaces/v0.8.x/IOwnerHistoryTransferHook.sol/IOwnerHistoryTransferHook.json +299 -0
  62. package/artifacts/contracts/interfaces/v0.8.x/ISRHooks.sol/ISRHooks.json +432 -0
  63. package/artifacts/contracts/interfaces/v0.8.x/ISeaDropShimForContract.sol/ISeaDropShimForContract.json +0 -13
  64. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterTieredAllowV0.sol/ISharedMinterTieredAllowV0.json +94 -0
  65. package/artifacts/contracts/interfaces/v0.8.x/ITransferHook.sol/ITransferHook.json +63 -0
  66. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +2 -2
  67. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageReader.json +2 -2
  68. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageWriter.json +2 -2
  69. package/artifacts/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol/DependencyRegistryStorageLib.json +2 -2
  70. package/artifacts/contracts/libs/v0.8.x/ENSLib.sol/ENSLib.json +10 -0
  71. package/artifacts/contracts/libs/v0.8.x/ENSLib.sol/IUniversalResolver.json +45 -0
  72. package/artifacts/contracts/libs/v0.8.x/EnumerableSetUint16.sol/EnumerableSetUint16.json +10 -0
  73. package/artifacts/contracts/libs/v0.8.x/FeistelWalkLib.sol/FeistelWalkLib.json +10 -0
  74. package/artifacts/contracts/libs/v0.8.x/ImmutableUint16Array.sol/ImmutableUint16Array.json +10 -0
  75. package/artifacts/contracts/libs/v0.8.x/V3EngineLib.sol/V3EngineLib.json +163 -0
  76. package/artifacts/contracts/libs/v0.8.x/V3FlexLib.sol/V3FlexLib.json +2 -2
  77. package/artifacts/contracts/libs/v0.8.x/V3TransferHookLib.sol/V3TransferHookLib.json +79 -0
  78. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +2 -2
  79. package/artifacts/contracts/libs/v0.8.x/minter-libs/OnChainAllowlistLib.sol/OnChainAllowlistLib.json +10 -0
  80. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +2 -2
  81. package/artifacts/contracts/libs/v0.8.x/minter-libs/RAMLib.sol/RAMLib.json +2 -2
  82. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +2 -2
  83. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +2 -2
  84. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +2 -2
  85. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  86. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +2 -2
  87. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +2 -2
  88. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +2 -2
  89. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +2 -2
  90. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +2 -2
  91. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +2 -2
  92. package/artifacts/contracts/minter-suite/Minters/MinterMinPriceMerkleV0.sol/MinterMinPriceMerkleV0.json +2 -2
  93. package/artifacts/contracts/minter-suite/Minters/MinterMinPriceV0.sol/MinterMinPriceV0.json +2 -2
  94. package/artifacts/contracts/minter-suite/Minters/MinterRAMV0.sol/MinterRAMV0.json +2 -2
  95. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +2 -2
  96. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +2 -2
  97. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +2 -2
  98. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +2 -2
  99. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceOnChainAllowV0.sol/MinterSetPriceOnChainAllowV0.json +522 -0
  100. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +2 -2
  101. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +2 -2
  102. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceTieredAllowV1.sol/MinterSetPriceTieredAllowV1.json +715 -0
  103. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +2 -2
  104. package/artifacts/contracts/minter-suite/Minters/MinterSlidingScaleV0.sol/MinterSlidingScaleV0.json +431 -0
  105. package/artifacts/contracts/minter-suite/Minters/one-off/ClaimMinter.sol/ClaimMinter.json +502 -0
  106. package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceTieredOnChainAllowV0.sol/MinterSetPriceTieredOnChainAllowV0.json +673 -0
  107. package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol/MinterSetPriceV5_SingleCore.json +2 -2
  108. package/artifacts/contracts/minter-suite/Minters/one-off/SeaDropXArtBlocksShim.sol/SeaDropXArtBlocksShim.json +6 -19
  109. package/artifacts/contracts/mock/BytecodeV2TextCR_DMock.sol/BytecodeV2TextCR_DMock.json +2 -2
  110. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
  111. package/artifacts/contracts/mock/ENSLibMock.sol/ENSLibMock.json +30 -0
  112. package/artifacts/contracts/mock/EnumerableSetUint16Mock.sol/EnumerableSetUint16Mock.json +146 -0
  113. package/artifacts/contracts/mock/FeistelWalkLibMock.sol/FeistelWalkLibMock.json +142 -0
  114. package/artifacts/contracts/mock/ForceSendMock.sol/ForceSendMock.json +2 -2
  115. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +2 -2
  116. package/artifacts/contracts/mock/ImmutableUint16ArrayMock.sol/ImmutableUint16ArrayMock.json +89 -0
  117. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +2 -2
  118. package/artifacts/contracts/mock/MockGenArt721V3Core.sol/MockGenArt721V3Core.json +490 -0
  119. package/artifacts/contracts/mock/MockPMP.sol/MockPMP.json +523 -0
  120. package/artifacts/contracts/mock/MockTransferHook.sol/MockTransferHook.json +453 -0
  121. package/artifacts/contracts/mock/MockTransferHookTestHelpers.sol/MockBatchTransferrer.json +39 -0
  122. package/artifacts/contracts/mock/MockTransferHookTestHelpers.sol/MockForwardingERC721Receiver.json +71 -0
  123. package/artifacts/contracts/mock/MockTransferHookTestHelpers.sol/MockSpoofingCore.json +94 -0
  124. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  125. package/artifacts/contracts/mock/ReentrancyBatchMockShared.sol/IBatchMinter.json +64 -0
  126. package/artifacts/contracts/mock/ReentrancyBatchMockShared.sol/ReentrancyBatchMockShared.json +113 -0
  127. package/artifacts/contracts/mock/RelayExecutorTestHelper.sol/MockTarget.json +74 -0
  128. package/artifacts/contracts/mock/RelayExecutorTestHelper.sol/RelayExecutorPartialRevertsTestHelper.json +138 -0
  129. package/artifacts/contracts/mock/RelayExecutorTestHelper.sol/RelayExecutorTestHelper.json +119 -0
  130. package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +2 -2
  131. package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +2 -2
  132. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +2 -2
  133. package/artifacts/contracts/relay/RelayExecutor.sol/RelayExecutor.json +101 -0
  134. package/artifacts/contracts/relay/RelayExecutorPartialReverts.sol/RelayExecutorPartialReverts.json +120 -0
  135. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverrideSplits.sol/GenArt721RoyaltyOverrideSplits.json +263 -0
  136. package/artifacts/contracts/utils/MintMulticallUtil.sol/IMinterSetPriceV5.json +40 -0
  137. package/artifacts/contracts/utils/MintMulticallUtil.sol/MintMulticallUtil.json +163 -0
  138. package/artifacts/contracts/web3call/PMPV0.sol/PMPV0.json +2 -2
  139. package/artifacts/contracts/web3call/PMPV1.sol/PMPV1.json +648 -0
  140. package/artifacts/contracts/web3call/augment-hooks/InjectBaseGasFee.sol/InjectBaseGasFee.json +2 -2
  141. package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeight.sol/InjectBlockHeight.json +83 -0
  142. package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeightAndArtistProjectOverrides.sol/InjectBlockHeightAndArtistProjectOverrides.json +226 -0
  143. package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeightAndNumOwnedProjectTokens.sol/InjectBlockHeightAndNumOwnedProjectTokens.json +182 -0
  144. package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeightProjectInvocationsAndArtistProjectOverrides.sol/InjectBlockHeightProjectInvocationsAndArtistProjectOverrides.json +226 -0
  145. package/artifacts/contracts/web3call/augment-hooks/InjectBlockTimestamp.sol/InjectBlockTimestamp.json +83 -0
  146. package/artifacts/contracts/web3call/augment-hooks/InjectBytesPerToken.sol/InjectBytesPerToken.json +358 -0
  147. package/artifacts/contracts/web3call/augment-hooks/InjectChromieSquiggleFloorPrice.sol/InjectChromieSquiggleFloorPrice.json +2 -2
  148. package/artifacts/contracts/web3call/augment-hooks/InjectIsNounsDaoMember.sol/InjectIsNounsDaoMember.json +2 -2
  149. package/artifacts/contracts/web3call/augment-hooks/InjectIsProjectFullyMinted.sol/InjectIsProjectFullyMinted.json +2 -2
  150. package/artifacts/contracts/web3call/augment-hooks/InjectPolyptychTokenHash.sol/InjectPolyptychTokenHash.json +2 -2
  151. package/artifacts/contracts/web3call/augment-hooks/InjectTokenHashSeed.sol/InjectTokenHashSeed.json +2 -2
  152. package/artifacts/contracts/web3call/augment-hooks/InjectTokenOwner.sol/InjectTokenOwner.json +2 -2
  153. package/artifacts/contracts/web3call/augment-hooks/InjectTokenOwnerEthBalance.sol/InjectTokenOwnerEthBalance.json +2 -2
  154. package/artifacts/contracts/web3call/augment-hooks/InjectUSDCTotalSupply.sol/InjectUSDCTotalSupply.json +2 -2
  155. package/artifacts/contracts/web3call/augment-hooks/SRHooks.sol/SRHooks.json +899 -0
  156. package/artifacts/contracts/web3call/combined-hooks/LiftHooks.sol/IGenArt721V0_Minimal.json +30 -0
  157. package/artifacts/contracts/web3call/combined-hooks/LiftHooks.sol/IRelic.json +35 -0
  158. package/artifacts/contracts/web3call/combined-hooks/LiftHooks.sol/LiftHooks.json +256 -0
  159. package/artifacts/contracts/web3call/configure-hooks/{abstractPMPConfigureHook.sol → AbstractPMPConfigureHook.sol}/AbstractPMPConfigureHook.json +1 -1
  160. package/artifacts/contracts/web3call/configure-hooks/PMPConfigureLockHook.sol/PMPConfigureLockHook.json +195 -0
  161. package/contracts/AdminACLV0RoyaltyRegistry.sol +142 -0
  162. package/contracts/DependencyRegistryV0.sol +143 -13
  163. package/contracts/GenArt721CoreV3_Curated.sol +1 -1
  164. package/contracts/GenArt721CoreV3_Curated_Flex.sol +173 -0
  165. package/contracts/GenArt721CoreV3_Explorations_Flex.sol +159 -0
  166. package/contracts/engine/V3/EngineFactoryV0.sol +20 -1
  167. package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +286 -299
  168. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +292 -301
  169. package/contracts/engine/V3/transfer-hooks/AbstractTransferHook.sol +101 -0
  170. package/contracts/engine/V3/transfer-hooks/OwnerHistoryTransferHook.sol +291 -0
  171. package/contracts/generator/GenArt721GeneratorV0.sol +145 -47
  172. package/contracts/helpers/ERC1967ProxyImport.sol +5 -0
  173. package/contracts/interfaces/v0.8.x/IArtblocksRoyaltyOverride.sol +1 -1
  174. package/contracts/interfaces/v0.8.x/IClaimMinter.sol +70 -0
  175. package/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol +95 -0
  176. package/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol +15 -0
  177. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol +21 -2
  178. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol +72 -0
  179. package/contracts/interfaces/v0.8.x/IOwnerHistoryTransferHook.sol +119 -0
  180. package/contracts/interfaces/v0.8.x/ISRHooks.sol +229 -0
  181. package/contracts/interfaces/v0.8.x/ISeaDropShimForContract.sol +0 -6
  182. package/contracts/interfaces/v0.8.x/ISharedMinterTieredAllowV0.sol +69 -0
  183. package/contracts/interfaces/v0.8.x/ITransferHook.sol +48 -0
  184. package/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol +12 -0
  185. package/contracts/libs/v0.8.x/ENSLib.sol +85 -0
  186. package/contracts/libs/v0.8.x/EnumerableSetUint16.sol +429 -0
  187. package/contracts/libs/v0.8.x/FeistelWalkLib.sol +221 -0
  188. package/contracts/libs/v0.8.x/ImmutableUint16Array.sol +201 -0
  189. package/contracts/libs/v0.8.x/V3EngineLib.sol +490 -0
  190. package/contracts/libs/v0.8.x/V3TransferHookLib.sol +251 -0
  191. package/contracts/libs/v0.8.x/minter-libs/OnChainAllowlistLib.sol +165 -0
  192. package/contracts/minter-suite/Minters/MinterSetPriceOnChainAllowV0.sol +632 -0
  193. package/contracts/minter-suite/Minters/MinterSetPriceTieredAllowV1.sol +871 -0
  194. package/contracts/minter-suite/Minters/MinterSlidingScaleV0.sol +493 -0
  195. package/contracts/minter-suite/Minters/one-off/ClaimMinter.sol +595 -0
  196. package/contracts/minter-suite/Minters/one-off/MinterSetPriceTieredOnChainAllowV0.sol +894 -0
  197. package/contracts/minter-suite/Minters/one-off/SeaDropXArtBlocksShim.sol +59 -41
  198. package/contracts/mock/ENSLibMock.sol +25 -0
  199. package/contracts/mock/EnumerableSetUint16Mock.sol +88 -0
  200. package/contracts/mock/FeistelWalkLibMock.sol +81 -0
  201. package/contracts/mock/ImmutableUint16ArrayMock.sol +62 -0
  202. package/contracts/mock/MockGenArt721V3Core.sol +416 -0
  203. package/contracts/mock/MockPMP.sol +287 -0
  204. package/contracts/mock/MockTransferHook.sol +160 -0
  205. package/contracts/mock/MockTransferHookTestHelpers.sol +96 -0
  206. package/contracts/mock/ReentrancyBatchMockShared.sol +53 -0
  207. package/contracts/mock/RelayExecutorTestHelper.sol +44 -0
  208. package/contracts/relay/RelayExecutor.sol +61 -0
  209. package/contracts/relay/RelayExecutorPartialReverts.sol +79 -0
  210. package/contracts/royalty-registry/GenArt721RoyaltyOverrideSplits.sol +130 -0
  211. package/contracts/utils/MintMulticallUtil.sol +103 -0
  212. package/contracts/web3call/PMPV1.sol +1204 -0
  213. package/contracts/web3call/augment-hooks/AbstractPMPAugmentHook.sol +1 -1
  214. package/contracts/web3call/augment-hooks/InjectBaseGasFee.sol +1 -1
  215. package/contracts/web3call/augment-hooks/InjectBlockHeight.sol +57 -0
  216. package/contracts/web3call/augment-hooks/InjectBlockHeightAndArtistProjectOverrides.sol +310 -0
  217. package/contracts/web3call/augment-hooks/InjectBlockHeightAndNumOwnedProjectTokens.sol +141 -0
  218. package/contracts/web3call/augment-hooks/InjectBlockHeightProjectInvocationsAndArtistProjectOverrides.sol +326 -0
  219. package/contracts/web3call/augment-hooks/InjectBlockTimestamp.sol +57 -0
  220. package/contracts/web3call/augment-hooks/InjectBytesPerToken.sol +279 -0
  221. package/contracts/web3call/augment-hooks/InjectIsProjectFullyMinted.sol +1 -1
  222. package/contracts/web3call/augment-hooks/InjectTokenHashSeed.sol +1 -1
  223. package/contracts/web3call/augment-hooks/InjectTokenOwner.sol +1 -1
  224. package/contracts/web3call/augment-hooks/InjectTokenOwnerEthBalance.sol +1 -1
  225. package/contracts/web3call/augment-hooks/SRHooks.sol +1722 -0
  226. package/contracts/web3call/combined-hooks/LiftHooks.sol +304 -0
  227. package/contracts/web3call/configure-hooks/{abstractPMPConfigureHook.sol → AbstractPMPConfigureHook.sol} +1 -1
  228. package/contracts/web3call/configure-hooks/PMPConfigureLockHook.sol +107 -0
  229. package/package.json +39 -24
@@ -0,0 +1,142 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity 0.8.22;
4
+
5
+ import "./interfaces/v0.8.x/IAdminACLV0.sol";
6
+ import {IAdminACLV0_Extended} from "./interfaces/v0.8.x/IAdminACLV0_Extended.sol";
7
+ import "@openzeppelin-4.7/contracts/access/Ownable.sol";
8
+ import "@openzeppelin-4.7/contracts/utils/introspection/ERC165.sol";
9
+
10
+ interface IRoyaltyRegistry {
11
+ function setRoyaltyLookupAddress(
12
+ address tokenAddress,
13
+ address royaltyLookupAddress
14
+ ) external returns (bool);
15
+ }
16
+
17
+ /**
18
+ * @title Admin ACL contract, V0, with Royalty Registry support.
19
+ * @author Art Blocks Inc.
20
+ * @notice Privileged Roles and Ownership:
21
+ * This contract has a single superAdmin that passes all ACL checks. All checks
22
+ * for any other address will return false.
23
+ * The superAdmin can be changed by the current superAdmin.
24
+ * Extends AdminACLV0 with a single additional function to call
25
+ * setRoyaltyLookupAddress on a Royalty Registry contract. This is needed
26
+ * because V3 core contracts return this AdminACL as admin(), and the
27
+ * Royalty Registry's overrideAllowed check requires msg.sender == admin().
28
+ * Care must be taken to ensure that the admin ACL contract is secure behind a
29
+ * multi-sig or other secure access control mechanism.
30
+ */
31
+ contract AdminACLV0RoyaltyRegistry is
32
+ IAdminACLV0,
33
+ IAdminACLV0_Extended,
34
+ ERC165
35
+ {
36
+ string public AdminACLType = "AdminACLV0RoyaltyRegistry";
37
+
38
+ /// superAdmin is the only address that passes any and all ACL checks
39
+ address public superAdmin;
40
+
41
+ constructor(address superAdmin_) {
42
+ superAdmin = superAdmin_;
43
+ }
44
+
45
+ /**
46
+ * @notice Allows superAdmin change the superAdmin address.
47
+ * @param _newSuperAdmin The new superAdmin address.
48
+ * @param _genArt721CoreAddressesToUpdate Array of genArt721Core
49
+ * addresses to update to the new superAdmin, for indexing purposes only.
50
+ * @dev this function is gated to only superAdmin address.
51
+ */
52
+ function changeSuperAdmin(
53
+ address _newSuperAdmin,
54
+ address[] calldata _genArt721CoreAddressesToUpdate
55
+ ) external {
56
+ require(msg.sender == superAdmin, "Only superAdmin");
57
+ address previousSuperAdmin = superAdmin;
58
+ superAdmin = _newSuperAdmin;
59
+ emit SuperAdminTransferred(
60
+ previousSuperAdmin,
61
+ _newSuperAdmin,
62
+ _genArt721CoreAddressesToUpdate
63
+ );
64
+ }
65
+
66
+ /**
67
+ * Calls transferOwnership on other contract from this contract.
68
+ * This is useful for updating to a new AdminACL contract.
69
+ * @dev this function is gated to only superAdmin address.
70
+ * @dev This implementation requires that the new AdminACL contract
71
+ * broadcasts support of IAdminACLV0 via ERC165 interface detection.
72
+ */
73
+ function transferOwnershipOn(
74
+ address _contract,
75
+ address _newAdminACL
76
+ ) external {
77
+ require(msg.sender == superAdmin, "Only superAdmin");
78
+ require(
79
+ ERC165(_newAdminACL).supportsInterface(
80
+ type(IAdminACLV0).interfaceId
81
+ ),
82
+ "AdminACLV0RoyaltyRegistry: new admin ACL does not support IAdminACLV0"
83
+ );
84
+ Ownable(_contract).transferOwnership(_newAdminACL);
85
+ }
86
+
87
+ /**
88
+ * @notice Calls renounceOwnership on other contract from this contract.
89
+ * @dev this function is gated to only superAdmin address.
90
+ */
91
+ function renounceOwnershipOn(address _contract) external {
92
+ require(msg.sender == superAdmin, "Only superAdmin");
93
+ Ownable(_contract).renounceOwnership();
94
+ }
95
+
96
+ /**
97
+ * @notice Checks if sender `_sender` is allowed to call function with selector
98
+ * `_selector` on contract `_contract`. Returns true if sender is superAdmin.
99
+ */
100
+ function allowed(
101
+ address _sender,
102
+ address /*_contract*/,
103
+ bytes4 /*_selector*/
104
+ ) external view returns (bool) {
105
+ return superAdmin == _sender;
106
+ }
107
+
108
+ /**
109
+ * @notice Calls setRoyaltyLookupAddress on a Royalty Registry contract.
110
+ * This is necessary because V3 core contracts return this AdminACL's
111
+ * address from admin(), and the Royalty Registry requires
112
+ * msg.sender == admin() for override authorization.
113
+ * @param _royaltyRegistry Address of the Royalty Registry contract.
114
+ * @param _tokenAddress Core contract address to configure.
115
+ * @param _royaltyLookupAddress Override address for royalty lookups
116
+ * (typically a royalty override shim). Set to address(0) to clear.
117
+ * @dev this function is gated to only superAdmin address.
118
+ */
119
+ function setRoyaltyLookupAddressOn(
120
+ address _royaltyRegistry,
121
+ address _tokenAddress,
122
+ address _royaltyLookupAddress
123
+ ) external {
124
+ require(msg.sender == superAdmin, "Only superAdmin");
125
+ IRoyaltyRegistry(_royaltyRegistry).setRoyaltyLookupAddress(
126
+ _tokenAddress,
127
+ _royaltyLookupAddress
128
+ );
129
+ }
130
+
131
+ /**
132
+ * @inheritdoc ERC165
133
+ */
134
+ function supportsInterface(
135
+ bytes4 interfaceId
136
+ ) public view virtual override(ERC165) returns (bool) {
137
+ return
138
+ interfaceId == type(IAdminACLV0).interfaceId ||
139
+ interfaceId == type(IAdminACLV0_Extended).interfaceId ||
140
+ super.supportsInterface(interfaceId);
141
+ }
142
+ }
@@ -439,6 +439,98 @@ contract DependencyRegistryV0 is
439
439
  );
440
440
  }
441
441
 
442
+ /**
443
+ * @notice Updates the canvas tag requirement for dependency `dependencyNameAndVersion`.
444
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
445
+ * @param canvasTagType Whether generated HTML requires a canvas tag, and where it belongs
446
+ * relative to the project script.
447
+ */
448
+ function updateDependencyCanvasTagType(
449
+ bytes32 dependencyNameAndVersion,
450
+ IDependencyRegistryV0.CanvasTagType canvasTagType
451
+ ) external {
452
+ _onlyAdminACL(this.updateDependencyCanvasTagType.selector);
453
+ _onlyExistingDependency(dependencyNameAndVersion);
454
+
455
+ DependencyRegistryStorageLib
456
+ .s()
457
+ .dependencyRecords[dependencyNameAndVersion]
458
+ .canvasTagType = canvasTagType;
459
+
460
+ emit DependencyCanvasTagTypeUpdated(
461
+ dependencyNameAndVersion,
462
+ canvasTagType
463
+ );
464
+ }
465
+
466
+ /**
467
+ * @notice Updates whether dependency `dependencyNameAndVersion` must be loaded as an ES module.
468
+ * @dev When true, the generator exposes the dependency to project scripts via an import map
469
+ * keyed on the dependency's name, rather than loading it with a plain `<script src>` tag.
470
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
471
+ * @param loadAsModule Whether the dependency's script is an ES module.
472
+ */
473
+ function updateDependencyLoadAsModule(
474
+ bytes32 dependencyNameAndVersion,
475
+ bool loadAsModule
476
+ ) external {
477
+ _onlyAdminACL(this.updateDependencyLoadAsModule.selector);
478
+ _onlyExistingDependency(dependencyNameAndVersion);
479
+
480
+ DependencyRegistryStorageLib
481
+ .s()
482
+ .dependencyRecords[dependencyNameAndVersion]
483
+ .loadAsModule = loadAsModule;
484
+
485
+ emit DependencyLoadAsModuleUpdated(
486
+ dependencyNameAndVersion,
487
+ loadAsModule
488
+ );
489
+ }
490
+
491
+ /**
492
+ * @notice Updates how project scripts using `dependencyNameAndVersion` are injected into
493
+ * generated HTML.
494
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
495
+ * @param projectScriptTagType How the project script must be wrapped.
496
+ * @param projectScriptSpecialType `type` attribute to use, required to be non-empty when
497
+ * `projectScriptTagType` is SpecialType and required to be empty otherwise.
498
+ */
499
+ function updateDependencyProjectScriptTagType(
500
+ bytes32 dependencyNameAndVersion,
501
+ IDependencyRegistryV0.ProjectScriptTagType projectScriptTagType,
502
+ string memory projectScriptSpecialType
503
+ ) external {
504
+ _onlyAdminACL(this.updateDependencyProjectScriptTagType.selector);
505
+ _onlyExistingDependency(dependencyNameAndVersion);
506
+ // @dev keeps the special type and the tag type from drifting out of sync, which would
507
+ // otherwise silently produce a script tag with a missing or ignored `type` attribute.
508
+ if (
509
+ projectScriptTagType ==
510
+ IDependencyRegistryV0.ProjectScriptTagType.SpecialType
511
+ ) {
512
+ _onlyNonEmptyString(projectScriptSpecialType);
513
+ } else {
514
+ require(
515
+ bytes(projectScriptSpecialType).length == 0,
516
+ "Special type only for SpecialType"
517
+ );
518
+ }
519
+
520
+ DependencyRegistryStorageLib.Dependency
521
+ storage dependency = DependencyRegistryStorageLib
522
+ .s()
523
+ .dependencyRecords[dependencyNameAndVersion];
524
+ dependency.projectScriptTagType = projectScriptTagType;
525
+ dependency.projectScriptSpecialType = projectScriptSpecialType;
526
+
527
+ emit DependencyProjectScriptTagTypeUpdated(
528
+ dependencyNameAndVersion,
529
+ projectScriptTagType,
530
+ projectScriptSpecialType
531
+ );
532
+ }
533
+
442
534
  /**
443
535
  * @notice Adds a new CDN url to `dependencyNameAndVersion`.
444
536
  * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
@@ -1377,6 +1469,46 @@ contract DependencyRegistryV0 is
1377
1469
  /**
1378
1470
  * @notice Returns details for a given dependency type `dependencyNameAndVersion`.
1379
1471
  * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
1472
+ * @return dependencyDetails Details for the given dependency.
1473
+ */
1474
+ function getDependencyDetailsV2(
1475
+ bytes32 dependencyNameAndVersion
1476
+ )
1477
+ public
1478
+ view
1479
+ returns (
1480
+ IDependencyRegistryV0.DependencyDetails memory dependencyDetails
1481
+ )
1482
+ {
1483
+ DependencyRegistryStorageLib.Dependency
1484
+ storage dependency = DependencyRegistryStorageLib
1485
+ .s()
1486
+ .dependencyRecords[dependencyNameAndVersion];
1487
+
1488
+ return
1489
+ IDependencyRegistryV0.DependencyDetails({
1490
+ nameAndVersion: dependencyNameAndVersion.toString(),
1491
+ licenseType: dependency.licenseType.toString(),
1492
+ preferredCDN: dependency.preferredCDN,
1493
+ additionalCDNCount: dependency.additionalCDNCount,
1494
+ preferredRepository: dependency.preferredRepository,
1495
+ additionalRepositoryCount: dependency.additionalRepositoryCount,
1496
+ dependencyWebsite: dependency.website,
1497
+ availableOnChain: dependency.scriptCount > 0,
1498
+ scriptCount: dependency.scriptCount,
1499
+ loadAsModule: dependency.loadAsModule,
1500
+ canvasTagType: dependency.canvasTagType,
1501
+ projectScriptTagType: dependency.projectScriptTagType,
1502
+ projectScriptSpecialType: dependency.projectScriptSpecialType
1503
+ });
1504
+ }
1505
+
1506
+ /**
1507
+ * @notice Returns details for a given dependency type `dependencyNameAndVersion`.
1508
+ * @dev Superseded by `getDependencyDetailsV2`, which additionally returns the fields
1509
+ * prescribing how the generator renders projects using this dependency. Retained with an
1510
+ * unchanged signature so that existing off-chain consumers continue to decode correctly.
1511
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
1380
1512
  * @return nameAndVersion String representation of `dependencyNameAndVersion`.
1381
1513
  * (e.g. "p5js(atSymbol)1.0.0")
1382
1514
  * @return licenseType License type for dependency
@@ -1405,21 +1537,19 @@ contract DependencyRegistryV0 is
1405
1537
  uint24 scriptCount
1406
1538
  )
1407
1539
  {
1408
- DependencyRegistryStorageLib.Dependency
1409
- storage dependency = DependencyRegistryStorageLib
1410
- .s()
1411
- .dependencyRecords[dependencyNameAndVersion];
1540
+ IDependencyRegistryV0.DependencyDetails
1541
+ memory details = getDependencyDetailsV2(dependencyNameAndVersion);
1412
1542
 
1413
1543
  return (
1414
- dependencyNameAndVersion.toString(),
1415
- dependency.licenseType.toString(),
1416
- dependency.preferredCDN,
1417
- dependency.additionalCDNCount,
1418
- dependency.preferredRepository,
1419
- dependency.additionalRepositoryCount,
1420
- dependency.website,
1421
- dependency.scriptCount > 0,
1422
- dependency.scriptCount
1544
+ details.nameAndVersion,
1545
+ details.licenseType,
1546
+ details.preferredCDN,
1547
+ details.additionalCDNCount,
1548
+ details.preferredRepository,
1549
+ details.additionalRepositoryCount,
1550
+ details.dependencyWebsite,
1551
+ details.availableOnChain,
1552
+ details.scriptCount
1423
1553
  );
1424
1554
  }
1425
1555
 
@@ -24,7 +24,7 @@ contract GenArt721CoreV3_Curated is GenArt721CoreV3_Engine {
24
24
 
25
25
  /// override patch version of this core contract
26
26
  // @dev this is a constant value that is used to override the inherited core version CORE_VERSION
27
- bytes32 private constant _CORE_VERSION_OVERRIDE = "v3.2.6";
27
+ bytes32 private constant _CORE_VERSION_OVERRIDE = "v3.3.2";
28
28
 
29
29
  // @dev overridden core version is returned instead of the inherited core version
30
30
  function coreVersion() external pure override returns (string memory) {
@@ -0,0 +1,173 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ pragma solidity 0.8.22;
3
+
4
+ // Created By: Art Blocks Inc.
5
+
6
+ import {GenArt721CoreV3_Engine_Flex} from "./engine/V3/GenArt721CoreV3_Engine_Flex.sol";
7
+ import {EngineConfiguration} from "./interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol";
8
+
9
+ import "./libs/v0.8.x/Bytes32Strings.sol";
10
+
11
+ /**
12
+ * @title Art Blocks Curated ERC-721 core contract, V3.2 Flex (ONCHAIN only)
13
+ * @author Art Blocks Inc.
14
+ * @notice This contract derives from the Art Blocks Engine Flex contract and adds
15
+ * some functionality to support curation of projects by Art Blocks.
16
+ * It also performs initialization of the contract in the constructor, because
17
+ * the contract is not intended to use a clone proxy pattern, and is intended
18
+ * to be deployed without any required follow-on calls to initialize.
19
+ * Constraints are added to the contract to only allow ONCHAIN dependencies,
20
+ * ensuring that the Art Blocks Curated projects are only dependent on onchain
21
+ * data, consistent with previous Art Blocks Curated contracts.
22
+ * ----------------------------------------------------------------------------
23
+ * See the Art Blocks Engine Flex contract for additional applicable documentation.
24
+ */
25
+ contract GenArt721CoreV3_Curated_Flex is GenArt721CoreV3_Engine_Flex {
26
+ using Bytes32Strings for bytes32;
27
+
28
+ /// override patch version of this core contract
29
+ // @dev this is a constant value that is used to override the inherited core version CORE_VERSION
30
+ bytes32 private constant _CORE_VERSION_OVERRIDE = "v3.3.3";
31
+
32
+ // @dev overridden core version is returned instead of the inherited core version
33
+ function coreVersion() external pure override returns (string memory) {
34
+ return _CORE_VERSION_OVERRIDE.toString();
35
+ }
36
+
37
+ /// metadata pointer to the previous associated Flagship Artblocks core contracts
38
+ // @dev not defined as constant because constant address arrays are not yet implemented in Solidity
39
+ address[] public PREVIOUS_ART_BLOCKS_CONTRACTS = [
40
+ 0x059EDD72Cd353dF5106D2B9cC5ab83a52287aC3a,
41
+ 0xa7d8d9ef8D8Ce8992Df33D8b8CF4Aebabd5bD270,
42
+ 0x99a9B7c1116f9ceEB1652de04d5969CcE509B069,
43
+ 0xAB0000000000aa06f89B268D604a9c1C41524Ac6
44
+ ];
45
+
46
+ /// Curation registry for Flagship projects, managed by Art Blocks
47
+ address public artblocksCurationRegistryAddress;
48
+
49
+ bool public constant IS_FLAGSHIP = true;
50
+
51
+ /**
52
+ * @notice Construct a new curated Art Blocks ERC-721 core contract.
53
+ * Performs all contract initialization in the constructor.
54
+ * @param engineConfiguration Configuration for the engine contract.
55
+ * note: parameter `engineConfiguration.newSuperAdminAddress` is not used or operated on in this contract.
56
+ * @param adminACLContract_ Address of the admin ACL contract.
57
+ * @param defaultBaseURIHost Default base URI host for token URIs, e.g. "https://token.artblocks.io/" for mainnet
58
+ * @param bytecodeStorageReaderContract_ Address of the bytecode storage reader contract to be used by this
59
+ * contract.
60
+ */
61
+ constructor(
62
+ EngineConfiguration memory engineConfiguration,
63
+ address adminACLContract_,
64
+ string memory defaultBaseURIHost,
65
+ address bytecodeStorageReaderContract_
66
+ ) GenArt721CoreV3_Engine_Flex() {
67
+ // input validation generally performed by the engine factory
68
+ _onlyNonZeroAddress(engineConfiguration.renderProviderAddress);
69
+ _onlyNonZeroAddress(engineConfiguration.randomizerContract);
70
+ _onlyNonZeroAddress(adminACLContract_);
71
+ _onlyNonZeroAddress(bytecodeStorageReaderContract_);
72
+ require(
73
+ bytes(defaultBaseURIHost).length > 0,
74
+ "GenArt721CoreV3_Curated_Flex: defaultBaseURIHost must be non-empty"
75
+ );
76
+
77
+ // input validation specific to the curated contract
78
+ require(
79
+ !engineConfiguration.autoApproveArtistSplitProposals,
80
+ "GenArt721CoreV3_Curated_Flex: autoApproveArtistSplitProposals must be false"
81
+ );
82
+ // @dev artblocks is listed as render provider, no party should be platform provider
83
+ require(
84
+ engineConfiguration.nullPlatformProvider,
85
+ "GenArt721CoreV3_Curated_Flex: nullPlatformProvider must be true"
86
+ );
87
+ require(
88
+ !engineConfiguration.allowArtistProjectActivation,
89
+ "GenArt721CoreV3_Curated_Flex: allowArtistProjectActivation must be false"
90
+ );
91
+ // @dev previous artblocks contracts exists, so only starting project ID > 0
92
+ require(
93
+ engineConfiguration.startingProjectId > 0,
94
+ "GenArt721CoreV3_Curated_Flex: startingProjectId must be greater than 0"
95
+ );
96
+
97
+ // initialize the contract
98
+ _initialize({
99
+ engineConfiguration: engineConfiguration,
100
+ adminACLContract_: adminACLContract_,
101
+ defaultBaseURIHost: defaultBaseURIHost,
102
+ bytecodeStorageReaderContract_: bytecodeStorageReaderContract_
103
+ });
104
+
105
+ // override default base URI to be curated format instead of Engine (no address required for curated)
106
+ _updateDefaultBaseURI(defaultBaseURIHost);
107
+ }
108
+
109
+ /**
110
+ * @notice Override of the Engine contract's initialize function.
111
+ * Immediately reverts, as initialization of this Curated contract is performed in the constructor.
112
+ */
113
+ function initialize(
114
+ EngineConfiguration memory /*engineConfiguration*/,
115
+ address /*adminACLContract_*/,
116
+ string memory /*defaultBaseURIHost*/,
117
+ address /*bytecodeStorageReaderContract_*/
118
+ ) external pure override {
119
+ // revert - initialization for this contract is performed in the constructor
120
+ // @dev note that the initialize function would revert without this override, but it is included for clarity
121
+ revert(
122
+ "GenArt721CoreV3_Curated_Flex: contract initialized in constructor"
123
+ );
124
+ }
125
+
126
+ /**
127
+ * @notice Updates reference to Art Blocks Curation Registry contract.
128
+ * @param _artblocksCurationRegistryAddress Address of Art Blocks Curation Registry contract.
129
+ */
130
+ function updateArtblocksCurationRegistryAddress(
131
+ address _artblocksCurationRegistryAddress
132
+ ) external {
133
+ _onlyAdminACL(this.updateArtblocksCurationRegistryAddress.selector);
134
+ artblocksCurationRegistryAddress = _artblocksCurationRegistryAddress;
135
+ emit ArtBlocksCurationRegistryContractUpdated(
136
+ _artblocksCurationRegistryAddress
137
+ );
138
+ }
139
+
140
+ function updateProjectExternalAssetDependency(
141
+ uint256 _projectId,
142
+ uint256 _index,
143
+ string memory _cidOrData,
144
+ ExternalAssetDependencyType _dependencyType
145
+ ) public override {
146
+ require(
147
+ _dependencyType == ExternalAssetDependencyType.ONCHAIN,
148
+ "GenArt721CoreV3_Curated_Flex: Curated dependency type must be ONCHAIN"
149
+ );
150
+ super.updateProjectExternalAssetDependency({
151
+ _projectId: _projectId,
152
+ _index: _index,
153
+ _cidOrData: _cidOrData,
154
+ _dependencyType: _dependencyType
155
+ });
156
+ }
157
+
158
+ function addProjectExternalAssetDependency(
159
+ uint256 _projectId,
160
+ string memory _cidOrData,
161
+ ExternalAssetDependencyType _dependencyType
162
+ ) public override {
163
+ require(
164
+ _dependencyType == ExternalAssetDependencyType.ONCHAIN,
165
+ "GenArt721CoreV3_Curated_Flex: Curated dependency type must be ONCHAIN"
166
+ );
167
+ super.addProjectExternalAssetDependency({
168
+ _projectId: _projectId,
169
+ _cidOrData: _cidOrData,
170
+ _dependencyType: _dependencyType
171
+ });
172
+ }
173
+ }
@@ -0,0 +1,159 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ pragma solidity 0.8.22;
3
+
4
+ // Created By: Art Blocks Inc.
5
+
6
+ import {GenArt721CoreV3_Engine_Flex} from "./engine/V3/GenArt721CoreV3_Engine_Flex.sol";
7
+ import {EngineConfiguration} from "./interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol";
8
+
9
+ import "./libs/v0.8.x/Bytes32Strings.sol";
10
+
11
+ /**
12
+ * @title Art Blocks Explorations ERC-721 core contract, V3.2 Flex (ONCHAIN only)
13
+ * @author Art Blocks Inc.
14
+ * @notice This contract derives from the Art Blocks Engine Flex contract and adds
15
+ * some functionality to support curation of projects by Art Blocks.
16
+ * It also performs initialization of the contract in the constructor, because
17
+ * the contract is not intended to use a clone proxy pattern, and is intended
18
+ * to be deployed without any required follow-on calls to initialize.
19
+ * Constraints are added to the contract to only allow ONCHAIN dependencies.
20
+ * ----------------------------------------------------------------------------
21
+ * See the Art Blocks Engine Flex contract for additional applicable documentation.
22
+ */
23
+ contract GenArt721CoreV3_Explorations_Flex is GenArt721CoreV3_Engine_Flex {
24
+ using Bytes32Strings for bytes32;
25
+
26
+ /// override patch version of this core contract
27
+ // @dev this is a constant value that is used to override the inherited core version CORE_VERSION
28
+ bytes32 private constant _CORE_VERSION_OVERRIDE = "v3.3.4";
29
+
30
+ // @dev overridden core version is returned instead of the inherited core version
31
+ function coreVersion() external pure override returns (string memory) {
32
+ return _CORE_VERSION_OVERRIDE.toString();
33
+ }
34
+
35
+ /// metadata pointer to the previous associated Art Blocks Explorations core contracts
36
+ // @dev not defined as constant because constant address arrays are not yet implemented in Solidity
37
+ address[] public PREVIOUS_ART_BLOCKS_EXPLORATIONS_CONTRACTS = [
38
+ 0x942BC2d3e7a589FE5bd4A5C6eF9727DFd82F5C8a
39
+ ];
40
+
41
+ /// Curation registry for Flagship projects, managed by Art Blocks
42
+ address public artblocksCurationRegistryAddress;
43
+
44
+ bool public constant IS_FLAGSHIP = true;
45
+
46
+ /**
47
+ * @notice Construct a new Explorations Art Blocks ERC-721 core contract.
48
+ * Performs all contract initialization in the constructor.
49
+ * @param engineConfiguration Configuration for the engine contract.
50
+ * note: parameter `engineConfiguration.newSuperAdminAddress` is not used or operated on in this contract.
51
+ * @param adminACLContract_ Address of the admin ACL contract.
52
+ * @param bytecodeStorageReaderContract_ Address of the bytecode storage reader contract to be used by this
53
+ * contract.
54
+ */
55
+ constructor(
56
+ EngineConfiguration memory engineConfiguration,
57
+ address adminACLContract_,
58
+ address bytecodeStorageReaderContract_
59
+ ) GenArt721CoreV3_Engine_Flex() {
60
+ // input validation generally performed by the engine factory
61
+ _onlyNonZeroAddress(engineConfiguration.renderProviderAddress);
62
+ _onlyNonZeroAddress(engineConfiguration.randomizerContract);
63
+ _onlyNonZeroAddress(adminACLContract_);
64
+ _onlyNonZeroAddress(bytecodeStorageReaderContract_);
65
+
66
+ // input validation specific to the Explorations contract
67
+ require(
68
+ !engineConfiguration.autoApproveArtistSplitProposals,
69
+ "GenArt721CoreV3_Explorations_Flex: autoApproveArtistSplitProposals must be false"
70
+ );
71
+ // @dev artblocks is listed as render provider, no party should be platform provider
72
+ require(
73
+ engineConfiguration.nullPlatformProvider,
74
+ "GenArt721CoreV3_Explorations_Flex: nullPlatformProvider must be true"
75
+ );
76
+ require(
77
+ !engineConfiguration.allowArtistProjectActivation,
78
+ "GenArt721CoreV3_Explorations_Flex: allowArtistProjectActivation must be false"
79
+ );
80
+ // @dev previous artblocks contracts exists, so only starting project ID > 0
81
+ require(
82
+ engineConfiguration.startingProjectId > 0,
83
+ "GenArt721CoreV3_Explorations_Flex: startingProjectId must be greater than 0"
84
+ );
85
+
86
+ // initialize the contract
87
+ _initialize({
88
+ engineConfiguration: engineConfiguration,
89
+ adminACLContract_: adminACLContract_,
90
+ defaultBaseURIHost: "https://token.artblocks.io/", // function will append contract address
91
+ bytecodeStorageReaderContract_: bytecodeStorageReaderContract_
92
+ });
93
+ }
94
+
95
+ /**
96
+ * @notice Override of the Engine contract's initialize function.
97
+ * Immediately reverts, as initialization of this Explorations contract is performed in the constructor.
98
+ */
99
+ function initialize(
100
+ EngineConfiguration memory /*engineConfiguration*/,
101
+ address /*adminACLContract_*/,
102
+ string memory /*defaultBaseURIHost*/,
103
+ address /*bytecodeStorageReaderContract_*/
104
+ ) external pure override {
105
+ // revert - initialization for this contract is performed in the constructor
106
+ // @dev note that the initialize function would revert without this override, but it is included for clarity
107
+ revert(
108
+ "GenArt721CoreV3_Explorations_Flex: contract initialized in constructor"
109
+ );
110
+ }
111
+
112
+ /**
113
+ * @notice Updates reference to Art Blocks Curation Registry contract.
114
+ * @param _artblocksCurationRegistryAddress Address of Art Blocks Curation Registry contract.
115
+ */
116
+ function updateArtblocksCurationRegistryAddress(
117
+ address _artblocksCurationRegistryAddress
118
+ ) external {
119
+ _onlyAdminACL(this.updateArtblocksCurationRegistryAddress.selector);
120
+ artblocksCurationRegistryAddress = _artblocksCurationRegistryAddress;
121
+ emit ArtBlocksCurationRegistryContractUpdated(
122
+ _artblocksCurationRegistryAddress
123
+ );
124
+ }
125
+
126
+ function updateProjectExternalAssetDependency(
127
+ uint256 _projectId,
128
+ uint256 _index,
129
+ string memory _cidOrData,
130
+ ExternalAssetDependencyType _dependencyType
131
+ ) public override {
132
+ require(
133
+ _dependencyType == ExternalAssetDependencyType.ONCHAIN,
134
+ "GenArt721CoreV3_Explorations_Flex: Dependency type must be ONCHAIN"
135
+ );
136
+ super.updateProjectExternalAssetDependency({
137
+ _projectId: _projectId,
138
+ _index: _index,
139
+ _cidOrData: _cidOrData,
140
+ _dependencyType: _dependencyType
141
+ });
142
+ }
143
+
144
+ function addProjectExternalAssetDependency(
145
+ uint256 _projectId,
146
+ string memory _cidOrData,
147
+ ExternalAssetDependencyType _dependencyType
148
+ ) public override {
149
+ require(
150
+ _dependencyType == ExternalAssetDependencyType.ONCHAIN,
151
+ "GenArt721CoreV3_Explorations_Flex: Dependency type must be ONCHAIN"
152
+ );
153
+ super.addProjectExternalAssetDependency({
154
+ _projectId: _projectId,
155
+ _cidOrData: _cidOrData,
156
+ _dependencyType: _dependencyType
157
+ });
158
+ }
159
+ }