@artblocks/contracts 1.0.1 → 1.0.3

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 (199) hide show
  1. package/README.md +67 -154
  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 +22 -4
  5. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +42 -5
  6. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
  7. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
  8. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  9. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  10. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
  11. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
  12. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
  13. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
  14. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
  15. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
  16. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
  17. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
  18. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
  19. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  20. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  21. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  22. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  23. package/artifacts/contracts/engine/{GenArt721CoreV2_ENGINE_FLEX.sol → V2/GenArt721CoreV2_ENGINE_FLEX.sol}/GenArt721CoreV2_ENGINE_FLEX.json +3 -3
  24. package/artifacts/contracts/engine/{GenArt721CoreV2_PBAB.sol → V2/GenArt721CoreV2_PBAB.sol}/GenArt721CoreV2_PBAB.json +3 -3
  25. package/artifacts/contracts/engine/{GenArt721CoreV2_PRTNR.sol → V2/GenArt721CoreV2_PRTNR.sol}/GenArt721CoreV2_PRTNR.json +3 -3
  26. package/artifacts/contracts/engine/{GenArt721MinterBurner_PBAB.sol → V2/GenArt721MinterBurner_PBAB.sol}/GenArt721MinterBurner_PBAB.json +3 -3
  27. package/artifacts/contracts/engine/{GenArt721MinterDAExp_PBAB.sol → V2/GenArt721MinterDAExp_PBAB.sol}/GenArt721MinterDAExp_PBAB.json +3 -3
  28. package/artifacts/contracts/engine/{GenArt721Minter_PBAB.sol → V2/GenArt721Minter_PBAB.sol}/GenArt721Minter_PBAB.json +3 -3
  29. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +1960 -0
  30. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +2247 -0
  31. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +2247 -0
  32. package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +401 -0
  33. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +2281 -0
  34. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IAdminACLV0_PROHIBITION.sol/IAdminACLV0_PROHIBITION.json +359 -0
  35. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +1094 -0
  36. package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +242 -0
  37. package/artifacts/contracts/engine-registry/EngineRegistryV0.sol/EngineRegistryV0.json +2 -2
  38. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +41 -4
  39. package/artifacts/contracts/interfaces/0.8.x/IBytecodeStorageReader.sol/IBytecodeStorageReader.json +111 -0
  40. package/artifacts/contracts/interfaces/0.8.x/ICoreRegistryV1.sol/ICoreRegistryV1.json +172 -0
  41. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterSEAV0.sol/IFilteredMinterSEAV0.json +1034 -0
  42. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractExposesHashSeed.sol/IGenArt721CoreContractExposesHashSeed.json +30 -0
  43. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +162 -0
  44. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +162 -0
  45. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +137 -13
  46. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +1060 -0
  47. package/artifacts/contracts/interfaces/0.8.x/IMinterFilterV1.sol/IMinterFilterV1.json +429 -0
  48. package/artifacts/contracts/interfaces/0.8.x/IPseudorandomAtomic.sol/IPseudorandomAtomic.json +30 -0
  49. package/artifacts/contracts/interfaces/0.8.x/IRandomizer_V3CoreBase.sol/IRandomizer_V3CoreBase.json +24 -0
  50. package/artifacts/contracts/interfaces/0.8.x/ISharedRandomizerV0.sol/ISharedRandomizerV0.json +207 -0
  51. package/artifacts/contracts/interfaces/0.8.x/IWETH.sol/IWETH.json +55 -0
  52. package/artifacts/contracts/libs/0.8.x/{BytecodeStorage.sol → BytecodeStorageV0.sol}/BytecodeStorage.json +3 -3
  53. package/artifacts/contracts/libs/0.8.x/BytecodeStorageV1.sol/BytecodeStorageReader.json +163 -0
  54. package/artifacts/contracts/libs/0.8.x/BytecodeStorageV1.sol/BytecodeStorageWriter.json +10 -0
  55. package/artifacts/contracts/libs/0.8.x/Bytes32Strings.sol/Bytes32Strings.json +2 -2
  56. package/artifacts/contracts/libs/0.8.x/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +2 -2
  57. package/artifacts/contracts/libs/0.8.x/SSTORE2.sol/SSTORE2.json +10 -0
  58. package/artifacts/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol/DelegationRegistry.json +2 -2
  59. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeMock.sol/GnosisSafeMock.json +2 -2
  60. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeProxyFactoryMock.sol/GnosisSafeProxyFactoryMock.json +2 -2
  61. package/artifacts/contracts/libs/integration-refs/gnosis-safe/MultiSendMock.sol/MultiSendMock.json +2 -2
  62. package/artifacts/contracts/libs/integration-refs/weth9/weth9.sol/WETH9_.json +295 -0
  63. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  64. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +692 -0
  65. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -2
  66. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV4.sol/MinterDAExpV4.json +2 -2
  67. package/artifacts/contracts/minter-suite/Minters/MinterDALinV4.sol/MinterDALinV4.json +2 -2
  68. package/artifacts/contracts/minter-suite/Minters/MinterHolderV4.sol/MinterHolderV4.json +2 -2
  69. package/artifacts/contracts/minter-suite/Minters/MinterMerkleV5.sol/MinterMerkleV5.json +2 -2
  70. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +104 -124
  71. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
  72. package/artifacts/contracts/minter-suite/Minters/MinterSEAV0.sol/MinterSEAV0.json +1289 -0
  73. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
  74. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV4.sol/MinterSetPriceV4.json +2 -2
  75. package/artifacts/contracts/mock/{BytecodeTextCR_DMock.sol/BytecodeTextCR_DMock.json → BytecodeV0TextCR_DMock.sol/BytecodeV0TextCR_DMock.json} +4 -4
  76. package/artifacts/contracts/mock/BytecodeV1LibCallsMock.sol/BytecodeV1LibCallsMock.json +135 -0
  77. package/artifacts/contracts/mock/BytecodeV1TextCR_DMock.sol/BytecodeV1TextCR_DMock.json +301 -0
  78. package/artifacts/contracts/mock/DeadReceiverBidderMock.sol/DeadReceiverBidderMock.json +33 -0
  79. package/artifacts/contracts/mock/DeadReceiverMock.sol/DeadReceiverMock.json +2 -2
  80. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +114 -0
  81. package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +2 -2
  82. package/artifacts/contracts/mock/GasLimitReceiverBidderMock.sol/GasLimitReceiverBidderMock.json +46 -0
  83. package/artifacts/contracts/mock/GasLimitReceiverMock.sol/GasLimitReceiverMock.json +28 -0
  84. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +22 -4
  85. package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +2 -2
  86. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +440 -0
  87. package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +39 -0
  88. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  89. package/artifacts/contracts/mock/ReentrancyHolderMock.sol/ReentrancyHolderMock.json +2 -2
  90. package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
  91. package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
  92. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +51 -0
  93. package/artifacts/contracts/mock/SSTORE2Mock.sol/SSTORE2Mock.json +118 -0
  94. package/artifacts/contracts/{BasicRandomizer.sol → randomizer/deprecated/BasicRandomizer.sol}/BasicRandomizer.json +3 -3
  95. package/artifacts/contracts/randomizer/deprecated/BasicRandomizerBase_v0_0_0.sol/RandomizerBase.json +10 -0
  96. package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +229 -0
  97. package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +102 -0
  98. package/artifacts/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol/PseudorandomAtomic.json +30 -0
  99. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +231 -0
  100. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +2 -2
  101. package/contracts/AdminACLV0.sol +1 -1
  102. package/contracts/AdminACLV1.sol +1 -1
  103. package/contracts/DependencyRegistryV0.sol +89 -141
  104. package/contracts/GenArt721CoreV3.sol +160 -204
  105. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol +1 -1
  106. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol +1 -1
  107. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +1 -1
  108. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol +1 -1
  109. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol +1 -1
  110. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol +1 -1
  111. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol +1 -1
  112. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol +1 -1
  113. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol +1 -1
  114. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol +1 -1
  115. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol +1 -1
  116. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol +1 -1
  117. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol +1 -1
  118. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol +1 -1
  119. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol +1 -1
  120. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol +1 -1
  121. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol +1 -1
  122. package/contracts/engine/{GenArt721CoreV2_ENGINE_FLEX.sol → V2/GenArt721CoreV2_ENGINE_FLEX.sol} +2 -2
  123. package/contracts/engine/{GenArt721CoreV2_PBAB.sol → V2/GenArt721CoreV2_PBAB.sol} +2 -2
  124. package/contracts/engine/{GenArt721CoreV2_PRTNR.sol → V2/GenArt721CoreV2_PRTNR.sol} +3 -3
  125. package/contracts/engine/{GenArt721MinterBurner_PBAB.sol → V2/GenArt721MinterBurner_PBAB.sol} +2 -2
  126. package/contracts/engine/{GenArt721MinterDAExp_PBAB.sol → V2/GenArt721MinterDAExp_PBAB.sol} +2 -2
  127. package/contracts/engine/{GenArt721Minter_PBAB.sol → V2/GenArt721Minter_PBAB.sol} +2 -2
  128. package/contracts/{GenArt721CoreV3_Engine.sol → engine/V3/GenArt721CoreV3_Engine.sol} +163 -216
  129. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +2283 -0
  130. package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +2293 -0
  131. package/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol +281 -0
  132. package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +2354 -0
  133. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IAdminACLV0_PROHIBITION.sol +123 -0
  134. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +29 -0
  135. package/contracts/engine-registry/CoreRegistryV1.sol +254 -0
  136. package/contracts/engine-registry/EngineRegistryV0.sol +1 -1
  137. package/contracts/explorations/GenArt721CoreV3_Explorations.sol +164 -190
  138. package/contracts/interfaces/0.8.x/IBytecodeStorageReader.sol +62 -0
  139. package/contracts/interfaces/0.8.x/ICoreRegistryV1.sol +27 -0
  140. package/contracts/interfaces/0.8.x/IDelegationRegistry.sol +1 -1
  141. package/contracts/interfaces/0.8.x/IDependencyRegistryCompatibleV0.sol +1 -1
  142. package/contracts/interfaces/0.8.x/IDependencyRegistryV0.sol +1 -1
  143. package/contracts/interfaces/0.8.x/IEngineRegistryV0.sol +1 -1
  144. package/contracts/interfaces/0.8.x/IFilteredMinterSEAV0.sol +164 -0
  145. package/contracts/interfaces/0.8.x/IGenArt721CoreContractExposesHashSeed.sol +11 -0
  146. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol +42 -0
  147. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol +0 -8
  148. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol +132 -0
  149. package/contracts/interfaces/0.8.x/IMinterFilterV1.sol +158 -0
  150. package/contracts/interfaces/0.8.x/IPseudorandomAtomic.sol +16 -0
  151. package/contracts/interfaces/0.8.x/IRandomizerPolyptychV0.sol +1 -1
  152. package/contracts/interfaces/0.8.x/IRandomizerV2.sol +2 -5
  153. package/contracts/interfaces/0.8.x/IRandomizer_V3CoreBase.sol +10 -0
  154. package/contracts/interfaces/0.8.x/ISharedRandomizerV0.sol +105 -0
  155. package/contracts/interfaces/0.8.x/IWETH.sol +11 -0
  156. package/contracts/libs/0.8.x/BytecodeStorageV1.sol +399 -0
  157. package/contracts/libs/0.8.x/SSTORE2.sol +109 -0
  158. package/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol +1 -1
  159. package/contracts/libs/integration-refs/weth9/weth9.sol +765 -0
  160. package/contracts/minter-suite/MinterFilter/MinterFilterV1.sol +36 -48
  161. package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +756 -0
  162. package/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol +27 -35
  163. package/contracts/minter-suite/Minters/MinterDAExpV4.sol +17 -22
  164. package/contracts/minter-suite/Minters/MinterDALinV4.sol +16 -18
  165. package/contracts/minter-suite/Minters/MinterHolderV4.sol +20 -20
  166. package/contracts/minter-suite/Minters/MinterMerkleV5.sol +14 -16
  167. package/contracts/minter-suite/Minters/MinterPolyptychV0.sol +37 -36
  168. package/contracts/minter-suite/Minters/MinterSEAV0.sol +1273 -0
  169. package/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol +12 -12
  170. package/contracts/minter-suite/Minters/MinterSetPriceV4.sol +10 -11
  171. package/contracts/mock/{BytecodeTextCR_DMock.sol → BytecodeV0TextCR_DMock.sol} +5 -5
  172. package/contracts/mock/BytecodeV1LibCallsMock.sol +114 -0
  173. package/contracts/mock/BytecodeV1TextCR_DMock.sol +233 -0
  174. package/contracts/mock/DeadReceiverBidderMock.sol +23 -0
  175. package/contracts/mock/DeadReceiverMock.sol +1 -1
  176. package/contracts/mock/DummySharedMinter.sol +75 -0
  177. package/contracts/mock/GasLimitReceiverBidderMock.sol +23 -0
  178. package/contracts/mock/GasLimitReceiverMock.sol +19 -0
  179. package/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol +14 -27
  180. package/contracts/mock/MockAdminACLV0.sol +1 -1
  181. package/contracts/mock/MockAdminACLV0_PROHIBITION.sol +207 -0
  182. package/contracts/mock/OriginRegisterMock.sol +27 -0
  183. package/contracts/mock/RandomizerV2_NoAssignMock.sol +3 -12
  184. package/contracts/mock/ReentrancySEAMock.sol +36 -0
  185. package/contracts/mock/SSTORE2Mock.sol +93 -0
  186. package/contracts/{BasicRandomizer.sol → randomizer/deprecated/BasicRandomizer.sol} +1 -1
  187. package/contracts/randomizer/deprecated/BasicRandomizerBase_v0_0_0.sol +23 -0
  188. package/contracts/{BasicPolyptychRandomizerV0.sol → randomizer/deprecated/PolyptychRandomizerV0.sol} +20 -29
  189. package/contracts/{BasicRandomizerV2.sol → randomizer/deprecated/RandomizerV2.sol} +6 -14
  190. package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +30 -0
  191. package/contracts/randomizer/shared/SharedRandomizerV0.sol +245 -0
  192. package/package.json +36 -30
  193. package/.env.example +0 -10
  194. package/artifacts/contracts/BasicPolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +0 -229
  195. package/artifacts/contracts/BasicRandomizerV2.sol/BasicRandomizerV2.json +0 -102
  196. package/artifacts/contracts/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +0 -1942
  197. package/artifacts/contracts/engine-registry/future/EngineRegistryV1.sol/EngineRegistryV1.json +0 -109
  198. package/contracts/engine-registry/future/EngineRegistryV1.sol +0 -86
  199. /package/contracts/libs/0.8.x/{BytecodeStorage.sol → BytecodeStorageV0.sol} +0 -0
@@ -1,20 +1,21 @@
1
1
  // SPDX-License-Identifier: LGPL-3.0-only
2
- pragma solidity 0.8.17;
2
+ pragma solidity 0.8.19;
3
3
 
4
4
  // Created By: Art Blocks Inc.
5
5
 
6
- import "./interfaces/0.8.x/IRandomizerV2.sol";
7
- import "./interfaces/0.8.x/IAdminACLV0.sol";
8
- import "./interfaces/0.8.x/IEngineRegistryV0.sol";
9
- import "./interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol";
10
- import "./interfaces/0.8.x/IDependencyRegistryCompatibleV0.sol";
11
- import "./interfaces/0.8.x/IManifold.sol";
6
+ import "../../interfaces/0.8.x/IRandomizer_V3CoreBase.sol";
7
+ import "../../interfaces/0.8.x/IAdminACLV0.sol";
8
+ import "../../interfaces/0.8.x/IEngineRegistryV0.sol";
9
+ import "../../interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol";
10
+ import "../../interfaces/0.8.x/IGenArt721CoreContractExposesHashSeed.sol";
11
+ import "../../interfaces/0.8.x/IDependencyRegistryCompatibleV0.sol";
12
+ import "../../interfaces/0.8.x/IManifold.sol";
12
13
 
13
14
  import "@openzeppelin-4.7/contracts/utils/Strings.sol";
14
15
  import "@openzeppelin-4.7/contracts/access/Ownable.sol";
15
- import "./libs/0.8.x/ERC721_PackedHashSeed.sol";
16
- import "./libs/0.8.x/BytecodeStorage.sol";
17
- import "./libs/0.8.x/Bytes32Strings.sol";
16
+ import "../../libs/0.8.x/ERC721_PackedHashSeed.sol";
17
+ import "../../libs/0.8.x/BytecodeStorageV1.sol";
18
+ import "../../libs/0.8.x/Bytes32Strings.sol";
18
19
 
19
20
  /**
20
21
  * @title Art Blocks Engine ERC-721 core contract, V3.
@@ -96,10 +97,10 @@ contract GenArt721CoreV3_Engine is
96
97
  Ownable,
97
98
  IDependencyRegistryCompatibleV0,
98
99
  IManifold,
99
- IGenArt721CoreContractV3_Engine
100
+ IGenArt721CoreContractV3_Engine,
101
+ IGenArt721CoreContractExposesHashSeed
100
102
  {
101
- using BytecodeStorage for string;
102
- using BytecodeStorage for address;
103
+ using BytecodeStorageWriter for string;
103
104
  using Bytes32Strings for bytes32;
104
105
  using Strings for uint256;
105
106
  using Strings for address;
@@ -158,7 +159,7 @@ contract GenArt721CoreV3_Engine is
158
159
  address public artblocksDependencyRegistryAddress;
159
160
 
160
161
  /// current randomizer contract
161
- IRandomizerV2 public randomizerContract;
162
+ IRandomizer_V3CoreBase public randomizerContract;
162
163
 
163
164
  /// append-only array of all randomizer contract addresses ever used by
164
165
  /// this contract
@@ -258,7 +259,7 @@ contract GenArt721CoreV3_Engine is
258
259
  bool public immutable autoApproveArtistSplitProposals;
259
260
 
260
261
  /// version & type of this core contract
261
- bytes32 constant CORE_VERSION = "v3.1.1";
262
+ bytes32 constant CORE_VERSION = "v3.1.2";
262
263
 
263
264
  function coreVersion() external pure returns (string memory) {
264
265
  return CORE_VERSION.toString();
@@ -273,59 +274,54 @@ contract GenArt721CoreV3_Engine is
273
274
  /// default base URI to initialize all new project projectBaseURI values to
274
275
  string public defaultBaseURI;
275
276
 
276
- modifier onlyNonZeroAddress(address _address) {
277
+ function _onlyNonZeroAddress(address _address) internal pure {
277
278
  require(_address != address(0), "Must input non-zero address");
278
- _;
279
279
  }
280
280
 
281
- modifier onlyNonEmptyString(string memory _string) {
281
+ function _onlyNonEmptyString(string memory _string) internal pure {
282
282
  require(bytes(_string).length != 0, "Must input non-empty string");
283
- _;
284
283
  }
285
284
 
286
- modifier onlyValidTokenId(uint256 _tokenId) {
285
+ function _onlyValidTokenId(uint256 _tokenId) internal view {
287
286
  require(_exists(_tokenId), "Token ID does not exist");
288
- _;
289
287
  }
290
288
 
291
- modifier onlyValidProjectId(uint256 _projectId) {
289
+ function _onlyValidProjectId(uint256 _projectId) internal view {
292
290
  require(
293
291
  (_projectId >= startingProjectId) && (_projectId < _nextProjectId),
294
292
  "Project ID does not exist"
295
293
  );
296
- _;
297
294
  }
298
295
 
299
- modifier onlyUnlocked(uint256 _projectId) {
296
+ function _onlyUnlocked(uint256 _projectId) internal view {
300
297
  // Note: calling `_projectUnlocked` enforces that the `_projectId`
301
298
  // passed in is valid.`
302
299
  require(_projectUnlocked(_projectId), "Only if unlocked");
303
- _;
304
300
  }
305
301
 
306
- modifier onlyAdminACL(bytes4 _selector) {
302
+ function _onlyAdminACL(bytes4 _selector) internal {
307
303
  require(
308
304
  adminACLAllowed(msg.sender, address(this), _selector),
309
305
  "Only Admin ACL allowed"
310
306
  );
311
- _;
312
307
  }
313
308
 
314
- modifier onlyArtist(uint256 _projectId) {
309
+ function _onlyArtist(uint256 _projectId) internal view {
315
310
  require(
316
311
  msg.sender == projectIdToFinancials[_projectId].artistAddress,
317
312
  "Only artist"
318
313
  );
319
- _;
320
314
  }
321
315
 
322
- modifier onlyArtistOrAdminACL(uint256 _projectId, bytes4 _selector) {
316
+ function _onlyArtistOrAdminACL(
317
+ uint256 _projectId,
318
+ bytes4 _selector
319
+ ) internal {
323
320
  require(
324
321
  msg.sender == projectIdToFinancials[_projectId].artistAddress ||
325
322
  adminACLAllowed(msg.sender, address(this), _selector),
326
323
  "Only artist or Admin ACL allowed"
327
324
  );
328
- _;
329
325
  }
330
326
 
331
327
  /**
@@ -334,10 +330,10 @@ contract GenArt721CoreV3_Engine is
334
330
  * contract to continue to function if the owner decides to renounce
335
331
  * ownership.
336
332
  */
337
- modifier onlyAdminACLOrRenouncedArtist(
333
+ function _onlyAdminACLOrRenouncedArtist(
338
334
  uint256 _projectId,
339
335
  bytes4 _selector
340
- ) {
336
+ ) internal {
341
337
  require(
342
338
  adminACLAllowed(msg.sender, address(this), _selector) ||
343
339
  (owner() == address(0) &&
@@ -345,7 +341,6 @@ contract GenArt721CoreV3_Engine is
345
341
  projectIdToFinancials[_projectId].artistAddress),
346
342
  "Only Admin ACL allowed, or artist if owner has renounced"
347
343
  );
348
- _;
349
344
  }
350
345
 
351
346
  /**
@@ -373,13 +368,11 @@ contract GenArt721CoreV3_Engine is
373
368
  uint248 _startingProjectId,
374
369
  bool _autoApproveArtistSplitProposals,
375
370
  address _engineRegistryContract
376
- )
377
- ERC721_PackedHashSeed(_tokenName, _tokenSymbol)
378
- onlyNonZeroAddress(_renderProviderAddress)
379
- onlyNonZeroAddress(_platformProviderAddress)
380
- onlyNonZeroAddress(_randomizerContract)
381
- onlyNonZeroAddress(_adminACLContract)
382
- {
371
+ ) ERC721_PackedHashSeed(_tokenName, _tokenSymbol) {
372
+ _onlyNonZeroAddress(_renderProviderAddress);
373
+ _onlyNonZeroAddress(_platformProviderAddress);
374
+ _onlyNonZeroAddress(_randomizerContract);
375
+ _onlyNonZeroAddress(_adminACLContract);
383
376
  // setup immutable `autoApproveArtistSplitProposals` config
384
377
  autoApproveArtistSplitProposals = _autoApproveArtistSplitProposals;
385
378
  // record contracts starting project ID
@@ -501,10 +494,9 @@ contract GenArt721CoreV3_Engine is
501
494
  * for indexing purposes, it must be emitted by the randomizer. This is to
502
495
  * minimize gas when minting.
503
496
  */
504
- function setTokenHash_8PT(
505
- uint256 _tokenId,
506
- bytes32 _hashSeed
507
- ) external onlyValidTokenId(_tokenId) {
497
+ function setTokenHash_8PT(uint256 _tokenId, bytes32 _hashSeed) external {
498
+ _onlyValidTokenId(_tokenId);
499
+
508
500
  OwnerAndHashSeed storage ownerAndHashSeed = _ownersAndHashSeeds[
509
501
  _tokenId
510
502
  ];
@@ -554,11 +546,9 @@ contract GenArt721CoreV3_Engine is
554
546
  */
555
547
  function updateArtblocksDependencyRegistryAddress(
556
548
  address _artblocksDependencyRegistryAddress
557
- )
558
- external
559
- onlyAdminACL(this.updateArtblocksDependencyRegistryAddress.selector)
560
- onlyNonZeroAddress(_artblocksDependencyRegistryAddress)
561
- {
549
+ ) external {
550
+ _onlyAdminACL(this.updateArtblocksDependencyRegistryAddress.selector);
551
+ _onlyNonZeroAddress(_artblocksDependencyRegistryAddress);
562
552
  artblocksDependencyRegistryAddress = _artblocksDependencyRegistryAddress;
563
553
  emit PlatformUpdated(FIELD_ARTBLOCKS_DEPENDENCY_REGISTRY_ADDRESS);
564
554
  }
@@ -580,14 +570,12 @@ contract GenArt721CoreV3_Engine is
580
570
  address payable _renderProviderSecondarySalesAddress,
581
571
  address payable _platformProviderPrimarySalesAddress,
582
572
  address payable _platformProviderSecondarySalesAddress
583
- )
584
- external
585
- onlyAdminACL(this.updateProviderSalesAddresses.selector)
586
- onlyNonZeroAddress(_renderProviderPrimarySalesAddress)
587
- onlyNonZeroAddress(_renderProviderSecondarySalesAddress)
588
- onlyNonZeroAddress(_platformProviderPrimarySalesAddress)
589
- onlyNonZeroAddress(_platformProviderSecondarySalesAddress)
590
- {
573
+ ) external {
574
+ _onlyAdminACL(this.updateProviderSalesAddresses.selector);
575
+ _onlyNonZeroAddress(_renderProviderPrimarySalesAddress);
576
+ _onlyNonZeroAddress(_renderProviderSecondarySalesAddress);
577
+ _onlyNonZeroAddress(_platformProviderPrimarySalesAddress);
578
+ _onlyNonZeroAddress(_platformProviderSecondarySalesAddress);
591
579
  _updateProviderSalesAddresses(
592
580
  _renderProviderPrimarySalesAddress,
593
581
  _renderProviderSecondarySalesAddress,
@@ -606,10 +594,9 @@ contract GenArt721CoreV3_Engine is
606
594
  function updateProviderPrimarySalesPercentages(
607
595
  uint256 renderProviderPrimarySalesPercentage_,
608
596
  uint256 platformProviderPrimarySalesPercentage_
609
- )
610
- external
611
- onlyAdminACL(this.updateProviderPrimarySalesPercentages.selector)
612
- {
597
+ ) external {
598
+ _onlyAdminACL(this.updateProviderPrimarySalesPercentages.selector);
599
+
613
600
  // Validate that the sum of the proposed %s, does not exceed 100%.
614
601
  require(
615
602
  (renderProviderPrimarySalesPercentage_ +
@@ -643,13 +630,14 @@ contract GenArt721CoreV3_Engine is
643
630
  function updateProviderSecondarySalesBPS(
644
631
  uint256 _renderProviderSecondarySalesBPS,
645
632
  uint256 _platformProviderSecondarySalesBPS
646
- ) external onlyAdminACL(this.updateProviderSecondarySalesBPS.selector) {
633
+ ) external {
634
+ _onlyAdminACL(this.updateProviderSecondarySalesBPS.selector);
647
635
  // Validate that the sum of the proposed provider BPS, does not exceed 10_000 BPS.
648
636
  require(
649
637
  (_renderProviderSecondarySalesBPS +
650
638
  _platformProviderSecondarySalesBPS) <=
651
639
  MAX_PROVIDER_SECONDARY_SALES_BPS,
652
- "Max sum of MAX_PROVIDER_SECONDARY_SALES_BPS BPS"
640
+ "Over max sum of BPS"
653
641
  );
654
642
  renderProviderSecondarySalesBPS = _renderProviderSecondarySalesBPS;
655
643
  platformProviderSecondarySalesBPS = _platformProviderSecondarySalesBPS;
@@ -660,13 +648,9 @@ contract GenArt721CoreV3_Engine is
660
648
  * @notice Updates minter to `_address`.
661
649
  * @param _address Address of new minter.
662
650
  */
663
- function updateMinterContract(
664
- address _address
665
- )
666
- external
667
- onlyAdminACL(this.updateMinterContract.selector)
668
- onlyNonZeroAddress(_address)
669
- {
651
+ function updateMinterContract(address _address) external {
652
+ _onlyAdminACL(this.updateMinterContract.selector);
653
+ _onlyNonZeroAddress(_address);
670
654
  minterContract = _address;
671
655
  emit MinterUpdated(_address);
672
656
  }
@@ -675,13 +659,9 @@ contract GenArt721CoreV3_Engine is
675
659
  * @notice Updates randomizer to `_randomizerAddress`.
676
660
  * @param _randomizerAddress Address of new randomizer.
677
661
  */
678
- function updateRandomizerAddress(
679
- address _randomizerAddress
680
- )
681
- external
682
- onlyAdminACL(this.updateRandomizerAddress.selector)
683
- onlyNonZeroAddress(_randomizerAddress)
684
- {
662
+ function updateRandomizerAddress(address _randomizerAddress) external {
663
+ _onlyAdminACL(this.updateRandomizerAddress.selector);
664
+ _onlyNonZeroAddress(_randomizerAddress);
685
665
  _updateRandomizerAddress(_randomizerAddress);
686
666
  }
687
667
 
@@ -689,13 +669,9 @@ contract GenArt721CoreV3_Engine is
689
669
  * @notice Toggles project `_projectId` as active/inactive.
690
670
  * @param _projectId Project ID to be toggled.
691
671
  */
692
- function toggleProjectIsActive(
693
- uint256 _projectId
694
- )
695
- external
696
- onlyAdminACL(this.toggleProjectIsActive.selector)
697
- onlyValidProjectId(_projectId)
698
- {
672
+ function toggleProjectIsActive(uint256 _projectId) external {
673
+ _onlyAdminACL(this.toggleProjectIsActive.selector);
674
+ _onlyValidProjectId(_projectId);
699
675
  projects[_projectId].active = !projects[_projectId].active;
700
676
  emit ProjectUpdated(_projectId, FIELD_PROJECT_ACTIVE);
701
677
  }
@@ -738,12 +714,10 @@ contract GenArt721CoreV3_Engine is
738
714
  uint256 _additionalPayeePrimarySalesPercentage,
739
715
  address payable _additionalPayeeSecondarySales,
740
716
  uint256 _additionalPayeeSecondarySalesPercentage
741
- )
742
- external
743
- onlyValidProjectId(_projectId)
744
- onlyArtist(_projectId)
745
- onlyNonZeroAddress(_artistAddress)
746
- {
717
+ ) external {
718
+ _onlyValidProjectId(_projectId);
719
+ _onlyArtist(_projectId);
720
+ _onlyNonZeroAddress(_artistAddress);
747
721
  ProjectFinance storage projectFinance = projectIdToFinancials[
748
722
  _projectId
749
723
  ];
@@ -861,15 +835,13 @@ contract GenArt721CoreV3_Engine is
861
835
  uint256 _additionalPayeePrimarySalesPercentage,
862
836
  address payable _additionalPayeeSecondarySales,
863
837
  uint256 _additionalPayeeSecondarySalesPercentage
864
- )
865
- external
866
- onlyValidProjectId(_projectId)
867
- onlyAdminACLOrRenouncedArtist(
838
+ ) external {
839
+ _onlyValidProjectId(_projectId);
840
+ _onlyAdminACLOrRenouncedArtist(
868
841
  _projectId,
869
842
  this.adminAcceptArtistAddressesAndSplits.selector
870
- )
871
- onlyNonZeroAddress(_artistAddress)
872
- {
843
+ );
844
+ _onlyNonZeroAddress(_artistAddress);
873
845
  // checks
874
846
  require(
875
847
  proposedArtistAddressesAndSplitsHash[_projectId] ==
@@ -915,15 +887,13 @@ contract GenArt721CoreV3_Engine is
915
887
  function updateProjectArtistAddress(
916
888
  uint256 _projectId,
917
889
  address payable _artistAddress
918
- )
919
- external
920
- onlyValidProjectId(_projectId)
921
- onlyAdminACLOrRenouncedArtist(
890
+ ) external {
891
+ _onlyValidProjectId(_projectId);
892
+ _onlyAdminACLOrRenouncedArtist(
922
893
  _projectId,
923
894
  this.updateProjectArtistAddress.selector
924
- )
925
- onlyNonZeroAddress(_artistAddress)
926
- {
895
+ );
896
+ _onlyNonZeroAddress(_artistAddress);
927
897
  projectIdToFinancials[_projectId].artistAddress = _artistAddress;
928
898
  emit ProjectUpdated(_projectId, FIELD_PROJECT_ARTIST_ADDRESS);
929
899
  }
@@ -932,9 +902,8 @@ contract GenArt721CoreV3_Engine is
932
902
  * @notice Toggles paused state of project `_projectId`.
933
903
  * @param _projectId Project ID to be toggled.
934
904
  */
935
- function toggleProjectIsPaused(
936
- uint256 _projectId
937
- ) external onlyArtist(_projectId) {
905
+ function toggleProjectIsPaused(uint256 _projectId) external {
906
+ _onlyArtist(_projectId);
938
907
  projects[_projectId].paused = !projects[_projectId].paused;
939
908
  emit ProjectUpdated(_projectId, FIELD_PROJECT_PAUSED);
940
909
  }
@@ -948,12 +917,10 @@ contract GenArt721CoreV3_Engine is
948
917
  function addProject(
949
918
  string memory _projectName,
950
919
  address payable _artistAddress
951
- )
952
- external
953
- onlyAdminACL(this.addProject.selector)
954
- onlyNonEmptyString(_projectName)
955
- onlyNonZeroAddress(_artistAddress)
956
- {
920
+ ) external {
921
+ _onlyAdminACL(this.addProject.selector);
922
+ _onlyNonEmptyString(_projectName);
923
+ _onlyNonZeroAddress(_artistAddress);
957
924
  require(!newProjectsForbidden, "New projects forbidden");
958
925
  uint256 projectId = _nextProjectId;
959
926
  projectIdToFinancials[projectId].artistAddress = _artistAddress;
@@ -969,10 +936,8 @@ contract GenArt721CoreV3_Engine is
969
936
  /**
970
937
  * @notice Forever forbids new projects from being added to this contract.
971
938
  */
972
- function forbidNewProjects()
973
- external
974
- onlyAdminACL(this.forbidNewProjects.selector)
975
- {
939
+ function forbidNewProjects() external {
940
+ _onlyAdminACL(this.forbidNewProjects.selector);
976
941
  require(!newProjectsForbidden, "Already forbidden");
977
942
  _forbidNewProjects();
978
943
  }
@@ -985,12 +950,10 @@ contract GenArt721CoreV3_Engine is
985
950
  function updateProjectName(
986
951
  uint256 _projectId,
987
952
  string memory _projectName
988
- )
989
- external
990
- onlyUnlocked(_projectId)
991
- onlyArtistOrAdminACL(_projectId, this.updateProjectName.selector)
992
- onlyNonEmptyString(_projectName)
993
- {
953
+ ) external {
954
+ _onlyUnlocked(_projectId);
955
+ _onlyArtistOrAdminACL(_projectId, this.updateProjectName.selector);
956
+ _onlyNonEmptyString(_projectName);
994
957
  projects[_projectId].name = _projectName;
995
958
  emit ProjectUpdated(_projectId, FIELD_PROJECT_NAME);
996
959
  }
@@ -1004,12 +967,13 @@ contract GenArt721CoreV3_Engine is
1004
967
  function updateProjectArtistName(
1005
968
  uint256 _projectId,
1006
969
  string memory _projectArtistName
1007
- )
1008
- external
1009
- onlyUnlocked(_projectId)
1010
- onlyArtistOrAdminACL(_projectId, this.updateProjectArtistName.selector)
1011
- onlyNonEmptyString(_projectArtistName)
1012
- {
970
+ ) external {
971
+ _onlyUnlocked(_projectId);
972
+ _onlyArtistOrAdminACL(
973
+ _projectId,
974
+ this.updateProjectArtistName.selector
975
+ );
976
+ _onlyNonEmptyString(_projectArtistName);
1013
977
  projects[_projectId].artist = _projectArtistName;
1014
978
  emit ProjectUpdated(_projectId, FIELD_PROJECT_ARTIST_NAME);
1015
979
  }
@@ -1028,10 +992,11 @@ contract GenArt721CoreV3_Engine is
1028
992
  function updateProjectSecondaryMarketRoyaltyPercentage(
1029
993
  uint256 _projectId,
1030
994
  uint256 _secondMarketRoyalty
1031
- ) external onlyArtist(_projectId) {
995
+ ) external {
996
+ _onlyArtist(_projectId);
1032
997
  require(
1033
998
  _secondMarketRoyalty <= ARTIST_MAX_SECONDARY_ROYALTY_PERCENTAGE,
1034
- "Max of ARTIST_MAX_SECONDARY_ROYALTY_PERCENTAGE percent"
999
+ "Over max percent"
1035
1000
  );
1036
1001
  projectIdToFinancials[_projectId]
1037
1002
  .secondaryMarketRoyaltyPercentage = uint8(_secondMarketRoyalty);
@@ -1076,7 +1041,8 @@ contract GenArt721CoreV3_Engine is
1076
1041
  function updateProjectWebsite(
1077
1042
  uint256 _projectId,
1078
1043
  string memory _projectWebsite
1079
- ) external onlyArtist(_projectId) {
1044
+ ) external {
1045
+ _onlyArtist(_projectId);
1080
1046
  projects[_projectId].website = _projectWebsite;
1081
1047
  emit ProjectUpdated(_projectId, FIELD_PROJECT_WEBSITE);
1082
1048
  }
@@ -1089,12 +1055,10 @@ contract GenArt721CoreV3_Engine is
1089
1055
  function updateProjectLicense(
1090
1056
  uint256 _projectId,
1091
1057
  string memory _projectLicense
1092
- )
1093
- external
1094
- onlyUnlocked(_projectId)
1095
- onlyArtistOrAdminACL(_projectId, this.updateProjectLicense.selector)
1096
- onlyNonEmptyString(_projectLicense)
1097
- {
1058
+ ) external {
1059
+ _onlyUnlocked(_projectId);
1060
+ _onlyArtistOrAdminACL(_projectId, this.updateProjectLicense.selector);
1061
+ _onlyNonEmptyString(_projectLicense);
1098
1062
  projects[_projectId].license = _projectLicense;
1099
1063
  emit ProjectUpdated(_projectId, FIELD_PROJECT_LICENSE);
1100
1064
  }
@@ -1111,18 +1075,16 @@ contract GenArt721CoreV3_Engine is
1111
1075
  function updateProjectMaxInvocations(
1112
1076
  uint256 _projectId,
1113
1077
  uint24 _maxInvocations
1114
- ) external onlyArtist(_projectId) {
1078
+ ) external {
1079
+ _onlyArtist(_projectId);
1115
1080
  // CHECKS
1116
1081
  Project storage project = projects[_projectId];
1117
1082
  uint256 _invocations = project.invocations;
1118
1083
  require(
1119
1084
  (_maxInvocations < project.maxInvocations),
1120
- "maxInvocations may only be decreased"
1121
- );
1122
- require(
1123
- _maxInvocations >= _invocations,
1124
- "Only max invocations gte current invocations"
1085
+ "Only maxInvocations decrease"
1125
1086
  );
1087
+ require(_maxInvocations >= _invocations, "Only gte invocations");
1126
1088
  // EFFECTS
1127
1089
  project.maxInvocations = _maxInvocations;
1128
1090
  emit ProjectUpdated(_projectId, FIELD_PROJECT_MAX_INVOCATIONS);
@@ -1137,17 +1099,15 @@ contract GenArt721CoreV3_Engine is
1137
1099
  * @notice Adds a script to project `_projectId`.
1138
1100
  * @param _projectId Project to be updated.
1139
1101
  * @param _script Script to be added. Required to be a non-empty string,
1140
- * but no further validation is performed.
1102
+ * but no further validation is performed.
1141
1103
  */
1142
1104
  function addProjectScript(
1143
1105
  uint256 _projectId,
1144
1106
  string memory _script
1145
- )
1146
- external
1147
- onlyUnlocked(_projectId)
1148
- onlyArtistOrAdminACL(_projectId, this.addProjectScript.selector)
1149
- onlyNonEmptyString(_script)
1150
- {
1107
+ ) external {
1108
+ _onlyUnlocked(_projectId);
1109
+ _onlyArtistOrAdminACL(_projectId, this.addProjectScript.selector);
1110
+ _onlyNonEmptyString(_script);
1151
1111
  Project storage project = projects[_projectId];
1152
1112
  // store script in contract bytecode
1153
1113
  project.scriptBytecodeAddresses[project.scriptCount] = _script
@@ -1167,26 +1127,14 @@ contract GenArt721CoreV3_Engine is
1167
1127
  uint256 _projectId,
1168
1128
  uint256 _scriptId,
1169
1129
  string memory _script
1170
- )
1171
- external
1172
- onlyUnlocked(_projectId)
1173
- onlyArtistOrAdminACL(_projectId, this.updateProjectScript.selector)
1174
- onlyNonEmptyString(_script)
1175
- {
1130
+ ) external {
1131
+ _onlyUnlocked(_projectId);
1132
+ _onlyArtistOrAdminACL(_projectId, this.updateProjectScript.selector);
1133
+ _onlyNonEmptyString(_script);
1176
1134
  Project storage project = projects[_projectId];
1177
1135
  require(_scriptId < project.scriptCount, "scriptId out of range");
1178
- // purge old contract bytecode contract from the blockchain state
1179
- // note: Although this does reduce usage of Ethereum state, it does not
1180
- // reduce the gas costs of removal transactions. We believe this is the
1181
- // best behavior at the time of writing, and do not expect this to
1182
- // result in any breaking changes in the future. All current proposals
1183
- // to change the self-destruct opcode are backwards compatible, but may
1184
- // result in not removing the bytecode from the blockchain state. This
1185
- // implementation is compatible with that architecture, as it does not
1186
- // rely on the bytecode being removed from the blockchain state.
1187
- project.scriptBytecodeAddresses[_scriptId].purgeBytecode();
1188
1136
  // store script in contract bytecode, replacing reference address from
1189
- // the contract that no longer exists with the newly created one
1137
+ // the old storage contract with the newly created one
1190
1138
  project.scriptBytecodeAddresses[_scriptId] = _script.writeToBytecode();
1191
1139
  emit ProjectUpdated(_projectId, FIELD_PROJECT_SCRIPT);
1192
1140
  }
@@ -1195,28 +1143,15 @@ contract GenArt721CoreV3_Engine is
1195
1143
  * @notice Removes last script from project `_projectId`.
1196
1144
  * @param _projectId Project to be updated.
1197
1145
  */
1198
- function removeProjectLastScript(
1199
- uint256 _projectId
1200
- )
1201
- external
1202
- onlyUnlocked(_projectId)
1203
- onlyArtistOrAdminACL(_projectId, this.removeProjectLastScript.selector)
1204
- {
1146
+ function removeProjectLastScript(uint256 _projectId) external {
1147
+ _onlyUnlocked(_projectId);
1148
+ _onlyArtistOrAdminACL(
1149
+ _projectId,
1150
+ this.removeProjectLastScript.selector
1151
+ );
1205
1152
  Project storage project = projects[_projectId];
1206
- require(project.scriptCount > 0, "there are no scripts to remove");
1207
- // purge old contract bytecode contract from the blockchain state
1208
- // note: Although this does reduce usage of Ethereum state, it does not
1209
- // reduce the gas costs of removal transactions. We believe this is the
1210
- // best behavior at the time of writing, and do not expect this to
1211
- // result in any breaking changes in the future. All current proposals
1212
- // to change the self-destruct opcode are backwards compatible, but may
1213
- // result in not removing the bytecode from the blockchain state. This
1214
- // implementation is compatible with that architecture, as it does not
1215
- // rely on the bytecode being removed from the blockchain state.
1216
- project
1217
- .scriptBytecodeAddresses[project.scriptCount - 1]
1218
- .purgeBytecode();
1219
- // delete reference to contract address that no longer exists
1153
+ require(project.scriptCount > 0, "No scripts to remove");
1154
+ // delete reference to old storage contract address
1220
1155
  delete project.scriptBytecodeAddresses[project.scriptCount - 1];
1221
1156
  unchecked {
1222
1157
  project.scriptCount = project.scriptCount - 1;
@@ -1233,11 +1168,12 @@ contract GenArt721CoreV3_Engine is
1233
1168
  function updateProjectScriptType(
1234
1169
  uint256 _projectId,
1235
1170
  bytes32 _scriptTypeAndVersion
1236
- )
1237
- external
1238
- onlyUnlocked(_projectId)
1239
- onlyArtistOrAdminACL(_projectId, this.updateProjectScriptType.selector)
1240
- {
1171
+ ) external {
1172
+ _onlyUnlocked(_projectId);
1173
+ _onlyArtistOrAdminACL(
1174
+ _projectId,
1175
+ this.updateProjectScriptType.selector
1176
+ );
1241
1177
  Project storage project = projects[_projectId];
1242
1178
  // require exactly one @ symbol in _scriptTypeAndVersion
1243
1179
  require(
@@ -1261,12 +1197,13 @@ contract GenArt721CoreV3_Engine is
1261
1197
  function updateProjectAspectRatio(
1262
1198
  uint256 _projectId,
1263
1199
  string memory _aspectRatio
1264
- )
1265
- external
1266
- onlyUnlocked(_projectId)
1267
- onlyArtistOrAdminACL(_projectId, this.updateProjectAspectRatio.selector)
1268
- onlyNonEmptyString(_aspectRatio)
1269
- {
1200
+ ) external {
1201
+ _onlyUnlocked(_projectId);
1202
+ _onlyArtistOrAdminACL(
1203
+ _projectId,
1204
+ this.updateProjectAspectRatio.selector
1205
+ );
1206
+ _onlyNonEmptyString(_aspectRatio);
1270
1207
  // Perform more detailed input validation for aspect ratio.
1271
1208
  bytes memory aspectRatioBytes = bytes(_aspectRatio);
1272
1209
  uint256 bytesLength = aspectRatioBytes.length;
@@ -1309,7 +1246,9 @@ contract GenArt721CoreV3_Engine is
1309
1246
  function updateProjectBaseURI(
1310
1247
  uint256 _projectId,
1311
1248
  string memory _newBaseURI
1312
- ) external onlyArtist(_projectId) onlyNonEmptyString(_newBaseURI) {
1249
+ ) external {
1250
+ _onlyArtist(_projectId);
1251
+ _onlyNonEmptyString(_newBaseURI);
1313
1252
  projects[_projectId].projectBaseURI = _newBaseURI;
1314
1253
  emit ProjectUpdated(_projectId, FIELD_PROJECT_BASE_URI);
1315
1254
  }
@@ -1320,13 +1259,9 @@ contract GenArt721CoreV3_Engine is
1320
1259
  * projects. Token URIs are determined by their project's `projectBaseURI`.
1321
1260
  * @param _defaultBaseURI New default base URI.
1322
1261
  */
1323
- function updateDefaultBaseURI(
1324
- string memory _defaultBaseURI
1325
- )
1326
- external
1327
- onlyAdminACL(this.updateDefaultBaseURI.selector)
1328
- onlyNonEmptyString(_defaultBaseURI)
1329
- {
1262
+ function updateDefaultBaseURI(string memory _defaultBaseURI) external {
1263
+ _onlyAdminACL(this.updateDefaultBaseURI.selector);
1264
+ _onlyNonEmptyString(_defaultBaseURI);
1330
1265
  _updateDefaultBaseURI(_defaultBaseURI);
1331
1266
  }
1332
1267
 
@@ -1603,6 +1538,7 @@ contract GenArt721CoreV3_Engine is
1603
1538
  )
1604
1539
  external
1605
1540
  view
1541
+ override(IGenArt721CoreContractV3_Base, IDependencyRegistryCompatibleV0)
1606
1542
  returns (
1607
1543
  string memory scriptTypeAndVersion,
1608
1544
  string memory aspectRatio,
@@ -1640,7 +1576,7 @@ contract GenArt721CoreV3_Engine is
1640
1576
  if (_index >= project.scriptCount) {
1641
1577
  return "";
1642
1578
  }
1643
- return project.scriptBytecodeAddresses[_index].readFromBytecode();
1579
+ return _readFromBytecode(project.scriptBytecodeAddresses[_index]);
1644
1580
  }
1645
1581
 
1646
1582
  /**
@@ -1709,9 +1645,9 @@ contract GenArt721CoreV3_Engine is
1709
1645
  )
1710
1646
  external
1711
1647
  view
1712
- onlyValidTokenId(_tokenId)
1713
1648
  returns (address payable[] memory recipients, uint256[] memory bps)
1714
1649
  {
1650
+ _onlyValidTokenId(_tokenId);
1715
1651
  // initialize arrays with maximum potential length
1716
1652
  recipients = new address payable[](4);
1717
1653
  bps = new uint256[](4);
@@ -1923,7 +1859,8 @@ contract GenArt721CoreV3_Engine is
1923
1859
  */
1924
1860
  function tokenURI(
1925
1861
  uint256 _tokenId
1926
- ) public view override onlyValidTokenId(_tokenId) returns (string memory) {
1862
+ ) public view override returns (string memory) {
1863
+ _onlyValidTokenId(_tokenId);
1927
1864
  string memory _projectBaseURI = projects[tokenIdToProjectId(_tokenId)]
1928
1865
  .projectBaseURI;
1929
1866
  return string.concat(_projectBaseURI, _tokenId.toString());
@@ -2009,7 +1946,7 @@ contract GenArt721CoreV3_Engine is
2009
1946
  * perform input validation where applicable.
2010
1947
  */
2011
1948
  function _updateRandomizerAddress(address _randomizerAddress) internal {
2012
- randomizerContract = IRandomizerV2(_randomizerAddress);
1949
+ randomizerContract = IRandomizer_V3CoreBase(_randomizerAddress);
2013
1950
  // populate historical randomizer array
2014
1951
  _historicalRandomizerAddresses.push(_randomizerAddress);
2015
1952
  emit PlatformUpdated(FIELD_RANDOMIZER_ADDRESS);
@@ -2047,9 +1984,9 @@ contract GenArt721CoreV3_Engine is
2047
1984
  * @return bool true if project is unlocked, false otherwise.
2048
1985
  * @dev This also enforces that the `_projectId` passed in is valid.
2049
1986
  */
2050
- function _projectUnlocked(
2051
- uint256 _projectId
2052
- ) internal view onlyValidProjectId(_projectId) returns (bool) {
1987
+ function _projectUnlocked(uint256 _projectId) internal view returns (bool) {
1988
+ _onlyValidProjectId(_projectId);
1989
+
2053
1990
  uint256 projectCompletedTimestamp = projects[_projectId]
2054
1991
  .completedTimestamp;
2055
1992
  bool projectOpen = projectCompletedTimestamp == 0;
@@ -2058,4 +1995,14 @@ contract GenArt721CoreV3_Engine is
2058
1995
  (block.timestamp - projectCompletedTimestamp <
2059
1996
  FOUR_WEEKS_IN_SECONDS);
2060
1997
  }
1998
+
1999
+ /**
2000
+ * Helper for calling `BytecodeStorageReader` external library reader method,
2001
+ * added for bytecode size reduction purposes.
2002
+ */
2003
+ function _readFromBytecode(
2004
+ address _address
2005
+ ) internal view returns (string memory) {
2006
+ return BytecodeStorageReader.readFromBytecode(_address);
2007
+ }
2061
2008
  }