@artblocks/contracts 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/README.md +32 -25
  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 +125 -17
  5. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +6 -6
  6. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV0.sol/MinterDAExpV0.json +2 -2
  7. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV1.sol/MinterDAExpV1.json +2 -2
  8. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
  9. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
  10. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  11. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  12. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV0.sol/MinterDALinV0.json +2 -2
  13. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV1.sol/MinterDALinV1.json +2 -2
  14. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
  15. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
  16. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV0.sol/MinterHolderV0.json +2 -2
  17. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
  18. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
  19. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
  20. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV0.sol/MinterMerkleV0.json +2 -2
  21. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
  22. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
  23. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
  24. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
  25. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV0.sol/MinterSetPriceV0.json +2 -2
  26. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV1.sol/MinterSetPriceV1.json +2 -2
  27. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  28. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  29. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol/MinterSetPriceERC20V0.json +2 -2
  30. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol/MinterSetPriceERC20V1.json +2 -2
  31. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  32. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  33. package/artifacts/contracts/engine/V2/GenArt721CoreV2_ENGINE_FLEX.sol/GenArt721CoreV2_ENGINE_FLEX.json +2 -2
  34. package/artifacts/contracts/engine/V2/GenArt721CoreV2_PBAB.sol/GenArt721CoreV2_PBAB.json +2 -2
  35. package/artifacts/contracts/engine/V2/GenArt721CoreV2_PRTNR.sol/GenArt721CoreV2_PRTNR.json +2 -2
  36. package/artifacts/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol/GenArt721MinterBurner_PBAB.json +2 -2
  37. package/artifacts/contracts/engine/V2/GenArt721MinterDAExp_PBAB.sol/GenArt721MinterDAExp_PBAB.json +2 -2
  38. package/artifacts/contracts/engine/V2/GenArt721Minter_PBAB.sol/GenArt721Minter_PBAB.json +2 -2
  39. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +6 -6
  40. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +6 -6
  41. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +4 -4
  42. package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +2 -2
  43. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +6 -6
  44. package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +2 -2
  45. package/artifacts/contracts/engine-registry/EngineRegistryV0.sol/EngineRegistryV0.json +2 -2
  46. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +6 -6
  47. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IBonusContract.sol/IBonusContract.json +1 -1
  48. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreContractV1.sol/IGenArt721CoreContractV1.json +1 -1
  49. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreV2_PBAB.sol/IGenArt721CoreV2_PBAB.json +1 -1
  50. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IRandomizer.sol/IRandomizer.json +1 -1
  51. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IAdminACLV0.sol/IAdminACLV0.json +1 -1
  52. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IArtblocksRoyaltyOverride.sol/IArtblocksRoyaltyOverride.json +1 -1
  53. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IBonusContract.sol/IBonusContract.json +1 -1
  54. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IBytecodeStorageReader.sol/IBytecodeStorageReader.json +1 -1
  55. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/ICoreRegistryV1.sol/ICoreRegistryV1.json +1 -1
  56. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IDelegationRegistry.sol/IDelegationRegistry.json +1 -1
  57. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryCompatibleV0.sol/IDependencyRegistryCompatibleV0.json +1 -1
  58. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +3 -3
  59. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IEngineRegistryV0.sol/IEngineRegistryV0.json +1 -1
  60. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV0.sol/IFilteredMinterDAExpSettlementV0.json +1 -1
  61. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV1.sol/IFilteredMinterDAExpSettlementV1.json +1 -1
  62. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlement_Mixin.sol/IFilteredMinterDAExpSettlement_Mixin.json +1 -1
  63. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV0.sol/IFilteredMinterDAExpV0.json +1 -1
  64. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV1.sol/IFilteredMinterDAExpV1.json +1 -1
  65. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV0.sol/IFilteredMinterDALinV0.json +1 -1
  66. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV1.sol/IFilteredMinterDALinV1.json +1 -1
  67. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV0.sol/IFilteredMinterHolderV0.json +1 -1
  68. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV1.sol/IFilteredMinterHolderV1.json +1 -1
  69. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV2.sol/IFilteredMinterHolderV2.json +1 -1
  70. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV0.sol/IFilteredMinterMerkleV0.json +1 -1
  71. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV1.sol/IFilteredMinterMerkleV1.json +1 -1
  72. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV2.sol/IFilteredMinterMerkleV2.json +1 -1
  73. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterSEAV0.sol/IFilteredMinterSEAV0.json +1 -1
  74. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV0.sol/IFilteredMinterV0.json +1 -1
  75. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV1.sol/IFilteredMinterV1.json +1 -1
  76. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV2.sol/IFilteredMinterV2.json +1 -1
  77. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractExposesHashSeed.sol/IGenArt721CoreContractExposesHashSeed.json +1 -1
  78. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV1.sol/IGenArt721CoreContractV1.json +1 -1
  79. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +1 -1
  80. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol/IGenArt721CoreContractV3WithSharedRandomizer.json +24 -0
  81. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +1 -1
  82. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +1 -1
  83. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +1 -1
  84. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreV2_PBAB.sol/IGenArt721CoreV2_PBAB.json +1 -1
  85. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IManifold.sol/IManifold.json +1 -1
  86. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMinterBaseV0.sol/IMinterBaseV0.json +1 -1
  87. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV0.sol/IMinterFilterV0.json +1 -1
  88. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV1.sol/IMinterFilterV1.json +86 -1
  89. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPICoreV0.sol/IMintingAPICoreV0.json +1 -1
  90. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPIMinterV0.sol/IMintingAPIMinterV0.json +1 -1
  91. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IPseudorandomAtomic.sol/IPseudorandomAtomic.json +1 -1
  92. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizer.sol/IRandomizer.json +1 -1
  93. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerPolyptychV0.sol/IRandomizerPolyptychV0.json +1 -1
  94. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerV2.sol/IRandomizerV2.json +1 -1
  95. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizer_V3CoreBase.sol/IRandomizer_V3CoreBase.json +1 -1
  96. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol/ISharedMinterDAExpSettlementV0.json +207 -0
  97. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol/ISharedMinterDAExpV0.json +93 -0
  98. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol/ISharedMinterDALinV0.json +93 -0
  99. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol/ISharedMinterDAV0.json +69 -0
  100. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol/ISharedMinterHolderV0.json +203 -0
  101. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol/ISharedMinterMerkleV0.json +123 -0
  102. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol/ISharedMinterSEAV0.json +261 -0
  103. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol/ISharedMinterSimplePurchaseV0.json +64 -0
  104. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterV0.sol/ISharedMinterV0.json +533 -0
  105. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/ISharedRandomizerV0.sol/ISharedRandomizerV0.json +42 -26
  106. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IWETH.sol/IWETH.json +1 -1
  107. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Address.json +2 -2
  108. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Counters.json +2 -2
  109. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/CustomERC721Metadata.json +2 -2
  110. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/ERC721.json +2 -2
  111. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/ERC721Enumerable.json +2 -2
  112. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/GenArt721CoreV1.json +2 -2
  113. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/SafeMath.json +2 -2
  114. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Strings.json +2 -2
  115. package/artifacts/contracts/legacy/GenArt721LegacyMinter.sol/GenArt721LegacyMinter.json +2 -2
  116. package/artifacts/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol/DelegationRegistry.json +2 -2
  117. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/CustomERC721Metadata.sol/CustomERC721Metadata.json +3 -3
  118. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/IERC20.sol/IERC20.json +1 -1
  119. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/SafeMath.sol/SafeMath.json +3 -3
  120. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/Strings.sol/Strings.json +3 -3
  121. package/artifacts/contracts/libs/v0.8.x/ABHelpers.sol/ABHelpers.json +10 -0
  122. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +10 -0
  123. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV0.sol/BytecodeStorage.json +3 -3
  124. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV1.sol/BytecodeStorageReader.json +3 -3
  125. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV1.sol/BytecodeStorageWriter.json +3 -3
  126. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/Bytes32Strings.sol/Bytes32Strings.json +3 -3
  127. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +3 -3
  128. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/SSTORE2.sol/SSTORE2.json +3 -3
  129. package/artifacts/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol/DAExpLib.json +10 -0
  130. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +10 -0
  131. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +10 -0
  132. package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +10 -0
  133. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +10 -0
  134. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +10 -0
  135. package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +10 -0
  136. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +10 -0
  137. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +10 -0
  138. package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +10 -0
  139. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV0.sol/MinterFilterV0.json +2 -2
  140. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  141. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +58 -2
  142. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +1228 -0
  143. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -2
  144. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +1146 -0
  145. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV4.sol/MinterDAExpV4.json +2 -2
  146. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +909 -0
  147. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +1228 -0
  148. package/artifacts/contracts/minter-suite/Minters/MinterDALinV4.sol/MinterDALinV4.json +2 -2
  149. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +909 -0
  150. package/artifacts/contracts/minter-suite/Minters/MinterHolderV4.sol/MinterHolderV4.json +2 -2
  151. package/artifacts/contracts/minter-suite/Minters/MinterMerkleV5.sol/MinterMerkleV5.json +2 -2
  152. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
  153. package/artifacts/contracts/minter-suite/Minters/MinterSEAV0.sol/MinterSEAV0.json +2 -2
  154. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +1325 -0
  155. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
  156. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +848 -0
  157. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +1091 -0
  158. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +1075 -0
  159. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +1243 -0
  160. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +1167 -0
  161. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV4.sol/MinterSetPriceV4.json +2 -2
  162. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +772 -0
  163. package/artifacts/contracts/mock/BytecodeV0TextCR_DMock.sol/BytecodeV0TextCR_DMock.json +2 -2
  164. package/artifacts/contracts/mock/BytecodeV1LibCallsMock.sol/BytecodeV1LibCallsMock.json +2 -2
  165. package/artifacts/contracts/mock/BytecodeV1TextCR_DMock.sol/BytecodeV1TextCR_DMock.json +4 -4
  166. package/artifacts/contracts/mock/DeadReceiverBidderMock.sol/DeadReceiverBidderMock.json +25 -2
  167. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
  168. package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +28 -2
  169. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +4 -4
  170. package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +2 -2
  171. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +2 -2
  172. package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +2 -2
  173. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  174. package/artifacts/contracts/mock/ReentrancyHolderMock.sol/ReentrancyHolderMock.json +2 -2
  175. package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
  176. package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
  177. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +2 -2
  178. package/artifacts/contracts/mock/SSTORE2Mock.sol/SSTORE2Mock.json +2 -2
  179. package/artifacts/contracts/randomizer/deprecated/BasicRandomizer.sol/BasicRandomizer.json +2 -2
  180. package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +2 -2
  181. package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +2 -2
  182. package/artifacts/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol/PseudorandomAtomic.json +2 -2
  183. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +48 -32
  184. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +2 -2
  185. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol/GenArt721RoyaltyOverride_PBAB.json +2 -2
  186. package/contracts/AdminACLV0.sol +1 -1
  187. package/contracts/AdminACLV1.sol +1 -1
  188. package/contracts/DependencyRegistryV0.sol +216 -107
  189. package/contracts/GenArt721CoreV3.sol +27 -12
  190. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV0.sol +3 -3
  191. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV1.sol +3 -3
  192. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol +3 -3
  193. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol +3 -3
  194. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +3 -3
  195. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol +3 -3
  196. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV0.sol +3 -3
  197. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV1.sol +3 -3
  198. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol +3 -3
  199. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol +3 -3
  200. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV0.sol +3 -3
  201. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol +3 -3
  202. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol +4 -4
  203. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol +4 -4
  204. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV0.sol +3 -3
  205. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol +3 -3
  206. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol +4 -4
  207. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol +4 -4
  208. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol +4 -4
  209. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV0.sol +3 -3
  210. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV1.sol +3 -3
  211. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol +3 -3
  212. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol +3 -3
  213. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol +3 -3
  214. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol +3 -3
  215. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol +3 -3
  216. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol +3 -3
  217. package/contracts/engine/V2/GenArt721CoreV2_ENGINE_FLEX.sol +2 -2
  218. package/contracts/engine/V2/GenArt721CoreV2_PBAB.sol +2 -2
  219. package/contracts/engine/V2/GenArt721CoreV2_PRTNR.sol +3 -3
  220. package/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol +2 -2
  221. package/contracts/engine/V2/GenArt721MinterDAExp_PBAB.sol +1 -1
  222. package/contracts/engine/V2/GenArt721Minter_PBAB.sol +2 -2
  223. package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +29 -14
  224. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +29 -14
  225. package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +9 -9
  226. package/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol +1 -1
  227. package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +20 -15
  228. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IAdminACLV0_PROHIBITION.sol +1 -1
  229. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +1 -1
  230. package/contracts/engine-registry/CoreRegistryV1.sol +1 -1
  231. package/contracts/engine-registry/EngineRegistryV0.sol +1 -1
  232. package/contracts/explorations/GenArt721CoreV3_Explorations.sol +27 -12
  233. package/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryV0.sol +2 -2
  234. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol +23 -0
  235. package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV1.sol +26 -0
  236. package/contracts/interfaces/v0.8.x/IRandomizer_V3CoreBase.sol +23 -0
  237. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +37 -0
  238. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol +25 -0
  239. package/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol +26 -0
  240. package/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol +19 -0
  241. package/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol +69 -0
  242. package/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol +44 -0
  243. package/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol +78 -0
  244. package/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol +28 -0
  245. package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +191 -0
  246. package/contracts/interfaces/{0.8.x → v0.8.x}/ISharedRandomizerV0.sol +42 -24
  247. package/contracts/legacy/GenArt721CoreV1.sol +2 -2
  248. package/contracts/legacy/GenArt721LegacyMinter.sol +5 -5
  249. package/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol +1 -1
  250. package/contracts/libs/v0.8.x/ABHelpers.sol +55 -0
  251. package/contracts/libs/v0.8.x/AuthLib.sol +197 -0
  252. package/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol +125 -0
  253. package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +109 -0
  254. package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +348 -0
  255. package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +175 -0
  256. package/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol +160 -0
  257. package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +320 -0
  258. package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +44 -0
  259. package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +390 -0
  260. package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +583 -0
  261. package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +153 -0
  262. package/contracts/minter-suite/MinterFilter/MinterFilterV0.sol +3 -3
  263. package/contracts/minter-suite/MinterFilter/MinterFilterV1.sol +5 -5
  264. package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +83 -9
  265. package/contracts/minter-suite/Minters/MinterBase_v0_1_1.sol +4 -4
  266. package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +966 -0
  267. package/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol +3 -3
  268. package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +1126 -0
  269. package/contracts/minter-suite/Minters/MinterDAExpV4.sol +3 -3
  270. package/contracts/minter-suite/Minters/MinterDAExpV5.sol +606 -0
  271. package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +952 -0
  272. package/contracts/minter-suite/Minters/MinterDALinV4.sol +3 -3
  273. package/contracts/minter-suite/Minters/MinterDALinV5.sol +591 -0
  274. package/contracts/minter-suite/Minters/MinterHolderV4.sol +4 -4
  275. package/contracts/minter-suite/Minters/MinterMerkleV5.sol +4 -4
  276. package/contracts/minter-suite/Minters/MinterPolyptychV0.sol +6 -6
  277. package/contracts/minter-suite/Minters/MinterSEAV0.sol +3 -3
  278. package/contracts/minter-suite/Minters/MinterSEAV1.sol +1190 -0
  279. package/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol +5 -5
  280. package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +570 -0
  281. package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +821 -0
  282. package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +802 -0
  283. package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +1096 -0
  284. package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +992 -0
  285. package/contracts/minter-suite/Minters/MinterSetPriceV4.sol +3 -3
  286. package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +461 -0
  287. package/contracts/mock/BytecodeV0TextCR_DMock.sol +1 -1
  288. package/contracts/mock/BytecodeV1LibCallsMock.sol +1 -1
  289. package/contracts/mock/BytecodeV1TextCR_DMock.sol +1 -1
  290. package/contracts/mock/DeadReceiverBidderMock.sol +15 -0
  291. package/contracts/mock/DummySharedMinter.sol +2 -2
  292. package/contracts/mock/ERC20Mock.sol +16 -0
  293. package/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol +9 -9
  294. package/contracts/mock/MockAdminACLV0.sol +1 -1
  295. package/contracts/mock/MockAdminACLV0_PROHIBITION.sol +1 -1
  296. package/contracts/mock/OriginRegisterMock.sol +1 -1
  297. package/contracts/mock/ReentrancyHolderMock.sol +1 -1
  298. package/contracts/mock/ReentrancyMerkleMock.sol +1 -1
  299. package/contracts/mock/ReentrancyMock.sol +1 -1
  300. package/contracts/mock/ReentrancySEAMock.sol +1 -1
  301. package/contracts/mock/SSTORE2Mock.sol +1 -1
  302. package/contracts/randomizer/deprecated/BasicRandomizer.sol +1 -1
  303. package/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol +2 -2
  304. package/contracts/randomizer/deprecated/RandomizerV2.sol +2 -2
  305. package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +1 -1
  306. package/contracts/randomizer/shared/SharedRandomizerV0.sol +91 -76
  307. package/contracts/royalty-registry/GenArt721RoyaltyOverride.sol +2 -2
  308. package/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol +2 -2
  309. package/package.json +46 -31
  310. package/LICENSE +0 -165
  311. package/contracts/interfaces/0.8.x/IRandomizer_V3CoreBase.sol +0 -10
  312. /package/contracts/interfaces/{0.5.x → v0.5.x}/IBonusContract.sol +0 -0
  313. /package/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreContractV1.sol +0 -0
  314. /package/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreV2_PBAB.sol +0 -0
  315. /package/contracts/interfaces/{0.5.x → v0.5.x}/IRandomizer.sol +0 -0
  316. /package/contracts/interfaces/{0.8.x → v0.8.x}/IAdminACLV0.sol +0 -0
  317. /package/contracts/interfaces/{0.8.x → v0.8.x}/IArtblocksRoyaltyOverride.sol +0 -0
  318. /package/contracts/interfaces/{0.8.x → v0.8.x}/IBonusContract.sol +0 -0
  319. /package/contracts/interfaces/{0.8.x → v0.8.x}/IBytecodeStorageReader.sol +0 -0
  320. /package/contracts/interfaces/{0.8.x → v0.8.x}/ICoreRegistryV1.sol +0 -0
  321. /package/contracts/interfaces/{0.8.x → v0.8.x}/IDelegationRegistry.sol +0 -0
  322. /package/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryCompatibleV0.sol +0 -0
  323. /package/contracts/interfaces/{0.8.x → v0.8.x}/IEngineRegistryV0.sol +0 -0
  324. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV0.sol +0 -0
  325. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV1.sol +0 -0
  326. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlement_Mixin.sol +0 -0
  327. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV0.sol +0 -0
  328. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV1.sol +0 -0
  329. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV0.sol +0 -0
  330. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV1.sol +0 -0
  331. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV0.sol +0 -0
  332. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV1.sol +0 -0
  333. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV2.sol +0 -0
  334. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV0.sol +0 -0
  335. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV1.sol +0 -0
  336. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV2.sol +0 -0
  337. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterSEAV0.sol +0 -0
  338. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV0.sol +0 -0
  339. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV1.sol +0 -0
  340. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV2.sol +0 -0
  341. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractExposesHashSeed.sol +0 -0
  342. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV1.sol +0 -0
  343. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3.sol +0 -0
  344. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Base.sol +0 -0
  345. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine.sol +0 -0
  346. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine_Flex.sol +0 -0
  347. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreV2_PBAB.sol +0 -0
  348. /package/contracts/interfaces/{0.8.x → v0.8.x}/IManifold.sol +0 -0
  349. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterBaseV0.sol +0 -0
  350. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV0.sol +0 -0
  351. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPICoreV0.sol +0 -0
  352. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPIMinterV0.sol +0 -0
  353. /package/contracts/interfaces/{0.8.x → v0.8.x}/IPseudorandomAtomic.sol +0 -0
  354. /package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizer.sol +0 -0
  355. /package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerPolyptychV0.sol +0 -0
  356. /package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerV2.sol +0 -0
  357. /package/contracts/interfaces/{0.8.x → v0.8.x}/IWETH.sol +0 -0
  358. /package/contracts/libs/{0.5.x → v0.5.x}/CustomERC721Metadata.sol +0 -0
  359. /package/contracts/libs/{0.5.x → v0.5.x}/IERC20.sol +0 -0
  360. /package/contracts/libs/{0.5.x → v0.5.x}/SafeMath.sol +0 -0
  361. /package/contracts/libs/{0.5.x → v0.5.x}/Strings.sol +0 -0
  362. /package/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV0.sol +0 -0
  363. /package/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV1.sol +0 -0
  364. /package/contracts/libs/{0.8.x → v0.8.x}/Bytes32Strings.sol +0 -0
  365. /package/contracts/libs/{0.8.x → v0.8.x}/ERC721_PackedHashSeed.sol +0 -0
  366. /package/contracts/libs/{0.8.x → v0.8.x}/SSTORE2.sol +0 -0
@@ -3,9 +3,9 @@ pragma solidity 0.8.19;
3
3
 
4
4
  // Created By: Art Blocks Inc.
5
5
 
6
- import "./interfaces/0.8.x/IAdminACLV0.sol";
7
- import "./interfaces/0.8.x/IDependencyRegistryCompatibleV0.sol";
8
- import "./interfaces/0.8.x/IDependencyRegistryV0.sol";
6
+ import "./interfaces/v0.8.x/IAdminACLV0.sol";
7
+ import "./interfaces/v0.8.x/IDependencyRegistryCompatibleV0.sol";
8
+ import "./interfaces/v0.8.x/IDependencyRegistryV0.sol";
9
9
 
10
10
  import "@openzeppelin-4.7/contracts/utils/Strings.sol";
11
11
  import "@openzeppelin-4.7/contracts/utils/structs/EnumerableSet.sol";
@@ -13,8 +13,8 @@ import "@openzeppelin-4.8/contracts-upgradeable/access/OwnableUpgradeable.sol";
13
13
  import "@openzeppelin-4.8/contracts-upgradeable/proxy/utils/Initializable.sol";
14
14
  import "@openzeppelin-4.5/contracts/utils/math/SafeCast.sol";
15
15
 
16
- import "./libs/0.8.x/BytecodeStorageV1.sol";
17
- import "./libs/0.8.x/Bytes32Strings.sol";
16
+ import "./libs/v0.8.x/BytecodeStorageV1.sol";
17
+ import "./libs/v0.8.x/Bytes32Strings.sol";
18
18
 
19
19
  /**
20
20
  * @title Art Blocks Dependency Registry, V0.
@@ -47,8 +47,10 @@ contract DependencyRegistryV0 is
47
47
 
48
48
  struct Dependency {
49
49
  string preferredCDN;
50
+ // mapping from additional CDN index to CDN URLr
50
51
  mapping(uint256 => string) additionalCDNs;
51
52
  string preferredRepository;
53
+ // mapping from additional repository index to repository URL
52
54
  mapping(uint256 => string) additionalRepositories;
53
55
  string referenceWebsite;
54
56
  // mapping from script index to address storing script in bytecode
@@ -97,6 +99,10 @@ contract DependencyRegistryV0 is
97
99
  );
98
100
  }
99
101
 
102
+ function _onlyInRangeIndex(uint256 _index, uint256 _length) internal pure {
103
+ require(_index < _length, "Index out of range");
104
+ }
105
+
100
106
  /**
101
107
  * @notice Initializes contract.
102
108
  * @param _adminACLContract Address of admin access control contract, to be
@@ -134,10 +140,10 @@ contract DependencyRegistryV0 is
134
140
  );
135
141
 
136
142
  _dependencyTypes.add(_dependencyType);
137
- Dependency storage dependencyType = dependencyDetails[_dependencyType];
138
- dependencyType.preferredCDN = _preferredCDN;
139
- dependencyType.preferredRepository = _preferredRepository;
140
- dependencyType.referenceWebsite = _referenceWebsite;
143
+ Dependency storage dependency = dependencyDetails[_dependencyType];
144
+ dependency.preferredCDN = _preferredCDN;
145
+ dependency.preferredRepository = _preferredRepository;
146
+ dependency.referenceWebsite = _referenceWebsite;
141
147
 
142
148
  emit DependencyAdded(
143
149
  _dependencyType,
@@ -149,7 +155,7 @@ contract DependencyRegistryV0 is
149
155
 
150
156
  /**
151
157
  * @notice Removes a dependency.
152
- * @param _dependencyType Name of dependency type (i.e. "type@version")
158
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
153
159
  */
154
160
  function removeDependency(bytes32 _dependencyType) external {
155
161
  _onlyAdminACL(this.removeDependency.selector);
@@ -169,10 +175,11 @@ contract DependencyRegistryV0 is
169
175
  }
170
176
 
171
177
  /**
172
- * @notice Adds a script to dependency `_dependencyType`.
173
- * @param _dependencyType dependency to be updated.
178
+ * @notice Adds a script to dependency `_dependencyType`, by way of
179
+ * providing a string to write to bytecode storage.
180
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
174
181
  * @param _script Script to be added. Required to be a non-empty string,
175
- * but no further validation is performed.
182
+ * but no further validation is performed.
176
183
  */
177
184
  function addDependencyScript(
178
185
  bytes32 _dependencyType,
@@ -191,36 +198,80 @@ contract DependencyRegistryV0 is
191
198
  }
192
199
 
193
200
  /**
194
- * @notice Updates script for dependencyType `_dependencyType` at script ID `_scriptId`.
195
- * @param _dependencyType dependency to be updated.
196
- * @param _scriptId Script ID to be updated.
201
+ * @notice Updates script for dependencyType `_dependencyType` at script `_index`,
202
+ * by way of providing a string to write to bytecode storage.
203
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
204
+ * @param _index The index of a given script, relative to the overall `scriptCount`.
197
205
  * @param _script The updated script value. Required to be a non-empty
198
- * string, but no further validation is performed.
206
+ * string, but no further validation is performed.
199
207
  */
200
208
  function updateDependencyScript(
201
209
  bytes32 _dependencyType,
202
- uint256 _scriptId,
210
+ uint256 _index,
203
211
  string memory _script
204
212
  ) external {
205
213
  _onlyAdminACL(this.updateDependencyScript.selector);
206
214
  _onlyNonEmptyString(_script);
207
215
  _onlyExistingDependencyType(_dependencyType);
208
- Dependency storage dependencyType = dependencyDetails[_dependencyType];
209
- require(
210
- _scriptId < dependencyType.scriptCount,
211
- "scriptId out of range"
212
- );
216
+ Dependency storage dependency = dependencyDetails[_dependencyType];
217
+ _onlyInRangeIndex({_index: _index, _length: dependency.scriptCount});
213
218
  // store script in contract bytecode, replacing reference address from
214
219
  // the contract that no longer exists with the newly created one
215
- dependencyType.scriptBytecodeAddresses[_scriptId] = _script
216
- .writeToBytecode();
220
+ dependency.scriptBytecodeAddresses[_index] = _script.writeToBytecode();
221
+
222
+ emit DependencyScriptUpdated(_dependencyType);
223
+ }
224
+
225
+ /**
226
+ * @notice Adds a script to dependency `_dependencyType`, by way of
227
+ * providing an already written chunk of bytecode storage.
228
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
229
+ * @param _scriptPointer Address of script to be added. Required to be a non-zero address,
230
+ * but no further validation is performed.
231
+ */
232
+ function addDependencyScriptPointer(
233
+ bytes32 _dependencyType,
234
+ address _scriptPointer
235
+ ) external {
236
+ _onlyAdminACL(this.addDependencyScriptPointer.selector);
237
+ _onlyNonZeroAddress(_scriptPointer);
238
+ _onlyExistingDependencyType(_dependencyType);
239
+ Dependency storage dependency = dependencyDetails[_dependencyType];
240
+ // store script in contract bytecode
241
+ dependency.scriptBytecodeAddresses[
242
+ dependency.scriptCount
243
+ ] = _scriptPointer;
244
+ dependency.scriptCount = dependency.scriptCount + 1;
245
+
246
+ emit DependencyScriptUpdated(_dependencyType);
247
+ }
248
+
249
+ /**
250
+ * @notice Updates script for dependencyType `_dependencyType` at script `_index`,
251
+ * by way of providing an already written chunk of bytecode storage.
252
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
253
+ * @param _index The index of a given script, relative to the overall `scriptCount`.
254
+ * @param _scriptPointer The updated script pointer (address of bytecode storage).
255
+ * Required to be a non-zero address, but no further validation is performed.
256
+ */
257
+ function updateDependencyScriptPointer(
258
+ bytes32 _dependencyType,
259
+ uint256 _index,
260
+ address _scriptPointer
261
+ ) external {
262
+ _onlyAdminACL(this.updateDependencyScriptPointer.selector);
263
+ _onlyNonZeroAddress(_scriptPointer);
264
+ _onlyExistingDependencyType(_dependencyType);
265
+ Dependency storage dependency = dependencyDetails[_dependencyType];
266
+ _onlyInRangeIndex({_index: _index, _length: dependency.scriptCount});
267
+ dependency.scriptBytecodeAddresses[_index] = _scriptPointer;
217
268
 
218
269
  emit DependencyScriptUpdated(_dependencyType);
219
270
  }
220
271
 
221
272
  /**
222
273
  * @notice Removes last script from dependency `_dependencyType`.
223
- * @param _dependencyType dependency to be updated.
274
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
224
275
  */
225
276
  function removeDependencyLastScript(bytes32 _dependencyType) external {
226
277
  _onlyAdminACL(this.removeDependencyLastScript.selector);
@@ -238,7 +289,7 @@ contract DependencyRegistryV0 is
238
289
 
239
290
  /**
240
291
  * @notice Updates preferred CDN for dependency `_dependencyType`.
241
- * @param _dependencyType dependency to be updated.
292
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
242
293
  * @param _preferredCDN URL for preferred CDN.
243
294
  */
244
295
  function updateDependencyPreferredCDN(
@@ -254,7 +305,7 @@ contract DependencyRegistryV0 is
254
305
 
255
306
  /**
256
307
  * @notice Updates preferred repository for dependency `_dependencyType`.
257
- * @param _dependencyType dependency to be updated.
308
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
258
309
  * @param _preferredRepository URL for preferred repository.
259
310
  */
260
311
  function updateDependencyPreferredRepository(
@@ -274,7 +325,7 @@ contract DependencyRegistryV0 is
274
325
 
275
326
  /**
276
327
  * @notice Updates project website for dependency `_dependencyType`.
277
- * @param _dependencyType dependency to be updated.
328
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
278
329
  * @param _referenceWebsite URL for project website.
279
330
  */
280
331
  function updateDependencyReferenceWebsite(
@@ -293,9 +344,9 @@ contract DependencyRegistryV0 is
293
344
 
294
345
  /**
295
346
  * @notice Adds a new CDN url to `_dependencyType`.
296
- * @param _dependencyType dependency to be updated.
347
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
297
348
  * @param _additionalCDN CDN URL to be added. Required to be a non-empty string,
298
- * but no further validation is performed.
349
+ * but no further validation is performed.
299
350
  */
300
351
  function addDependencyAdditionalCDN(
301
352
  bytes32 _dependencyType,
@@ -321,19 +372,19 @@ contract DependencyRegistryV0 is
321
372
  * @notice Removes additional CDN for dependency `_dependencyId` at index `_index`.
322
373
  * Removal is done by swapping the element to be removed with the last element in the array, then deleting this last element.
323
374
  * Assets with indices higher than `_index` can have their indices adjusted as a result of this operation.
324
- * @param _dependencyType dependency to be updated.
325
- * @param _index Additional CDN index
375
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
376
+ * @param _index The index of an additional CDN, relative to the overall `additionalCDNCount`.
326
377
  */
327
- function removeDependencyAdditionalCDNAtIndex(
378
+ function removeDependencyAdditionalCDN(
328
379
  bytes32 _dependencyType,
329
380
  uint256 _index
330
381
  ) external {
331
- _onlyAdminACL(this.removeDependencyAdditionalCDNAtIndex.selector);
382
+ _onlyAdminACL(this.removeDependencyAdditionalCDN.selector);
332
383
  _onlyExistingDependencyType(_dependencyType);
333
384
  Dependency storage dependency = dependencyDetails[_dependencyType];
334
385
 
335
386
  uint256 additionalCDNCount = dependency.additionalCDNCount;
336
- require(_index < additionalCDNCount, "Asset index out of range");
387
+ _onlyInRangeIndex({_index: _index, _length: additionalCDNCount});
337
388
 
338
389
  uint256 lastElementIndex = additionalCDNCount - 1;
339
390
 
@@ -349,21 +400,23 @@ contract DependencyRegistryV0 is
349
400
 
350
401
  /**
351
402
  * @notice Updates additional CDN for dependency `_dependencyType` at `_index`.
352
- * @param _dependencyType dependency to be updated.
353
- * @param _index Additional CDN index.
403
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
404
+ * @param _index The index of an additional CDN, relative to the overall `additionalCDNCount`.
354
405
  * @param _additionalCDN New CDN URL.
355
406
  */
356
- function updateDependencyAdditionalCDNAtIndex(
407
+ function updateDependencyAdditionalCDN(
357
408
  bytes32 _dependencyType,
358
409
  uint256 _index,
359
410
  string memory _additionalCDN
360
411
  ) external {
361
- _onlyAdminACL(this.updateDependencyAdditionalCDNAtIndex.selector);
412
+ _onlyAdminACL(this.updateDependencyAdditionalCDN.selector);
362
413
  _onlyNonEmptyString(_additionalCDN);
363
414
  _onlyExistingDependencyType(_dependencyType);
364
415
  Dependency storage dependency = dependencyDetails[_dependencyType];
365
- uint24 additionalCDNCount = dependency.additionalCDNCount;
366
- require(_index < additionalCDNCount, "Asset index out of range");
416
+ _onlyInRangeIndex({
417
+ _index: _index,
418
+ _length: dependency.additionalCDNCount
419
+ });
367
420
 
368
421
  dependency.additionalCDNs[_index] = _additionalCDN;
369
422
 
@@ -376,7 +429,7 @@ contract DependencyRegistryV0 is
376
429
 
377
430
  /**
378
431
  * @notice Adds a new repository URL to dependency `_dependencyType`.
379
- * @param _dependencyType dependency to be updated.
432
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
380
433
  * @param _additionalRepository Repository URL to be added. Required to be a non-empty string,
381
434
  * but no further validation is performed.
382
435
  */
@@ -409,22 +462,19 @@ contract DependencyRegistryV0 is
409
462
  * @notice Removes additional repository for depenency `_dependencyId` at index `_index`.
410
463
  * Removal is done by swapping the element to be removed with the last element in the array, then deleting this last element.
411
464
  * Assets with indices higher than `_index` can have their indices adjusted as a result of this operation.
412
- * @param _dependencyType dependency to be updated.
413
- * @param _index Additional repository index.
465
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
466
+ * @param _index The index of an additional repository, relative to the overall `additionalRepositoryCount`.
414
467
  */
415
- function removeDependencyAdditionalRepositoryAtIndex(
468
+ function removeDependencyAdditionalRepository(
416
469
  bytes32 _dependencyType,
417
470
  uint256 _index
418
471
  ) external {
419
- _onlyAdminACL(
420
- this.removeDependencyAdditionalRepositoryAtIndex.selector
421
- );
472
+ _onlyAdminACL(this.removeDependencyAdditionalRepository.selector);
422
473
  _onlyExistingDependencyType(_dependencyType);
423
474
  Dependency storage dependency = dependencyDetails[_dependencyType];
424
- uint256 additionalRepositoryCount = uint256(
425
- dependency.additionalRepositoryCount
426
- );
427
- require(_index < additionalRepositoryCount, "Asset index out of range");
475
+ uint256 additionalRepositoryCount = dependency
476
+ .additionalRepositoryCount;
477
+ _onlyInRangeIndex({_index: _index, _length: additionalRepositoryCount});
428
478
 
429
479
  uint256 lastElementIndex = additionalRepositoryCount - 1;
430
480
 
@@ -440,23 +490,23 @@ contract DependencyRegistryV0 is
440
490
 
441
491
  /**
442
492
  * @notice Updates additional repository for dependency `_dependencyType` at `_index`.
443
- * @param _dependencyType dependency to be updated.
444
- * @param _index Additional repository index.
493
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
494
+ * @param _index The index of an additional repository, relative to the overall `additionalRepositoryCount`.
445
495
  * @param _additionalRepository New Repository URL.
446
496
  */
447
- function updateDependencyAdditionalRepositoryAtIndex(
497
+ function updateDependencyAdditionalRepository(
448
498
  bytes32 _dependencyType,
449
499
  uint256 _index,
450
500
  string memory _additionalRepository
451
501
  ) external {
452
- _onlyAdminACL(
453
- this.updateDependencyAdditionalRepositoryAtIndex.selector
454
- );
502
+ _onlyAdminACL(this.updateDependencyAdditionalRepository.selector);
455
503
  _onlyNonEmptyString(_additionalRepository);
456
504
  _onlyExistingDependencyType(_dependencyType);
457
505
  Dependency storage dependency = dependencyDetails[_dependencyType];
458
- uint24 additionalRepositoryCount = dependency.additionalRepositoryCount;
459
- require(_index < additionalRepositoryCount, "Asset index out of range");
506
+ _onlyInRangeIndex({
507
+ _index: _index,
508
+ _length: dependency.additionalRepositoryCount
509
+ });
460
510
 
461
511
  dependency.additionalRepositories[_index] = _additionalRepository;
462
512
 
@@ -503,7 +553,7 @@ contract DependencyRegistryV0 is
503
553
  * type (`_dependencyType`).
504
554
  * @param _contractAddress Core contract address.
505
555
  * @param _projectId Project to override script type and version for.
506
- * @param _dependencyType Dependency type to return for project.
556
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
507
557
  */
508
558
  function addProjectDependencyTypeOverride(
509
559
  address _contractAddress,
@@ -574,20 +624,20 @@ contract DependencyRegistryV0 is
574
624
 
575
625
  /**
576
626
  * @notice Returns registered depenedency type at index `_index`.
577
- * @return Registered dependency at `_index`.
627
+ * @return Registered dependency at `_index`, relative to the overall length of the dependency type set.
578
628
  */
579
- function getDependencyTypeAtIndex(
629
+ function getDependencyType(
580
630
  uint256 _index
581
631
  ) external view returns (string memory) {
582
- require(_dependencyTypes.length() > _index, "Index out of range");
632
+ _onlyInRangeIndex({_index: _index, _length: _dependencyTypes.length()});
583
633
  return _dependencyTypes.at(_index).toString();
584
634
  }
585
635
 
586
636
  /**
587
- * @notice Returns details for depedency type `_dependencyType`.
588
- * @param _dependencyType Dependency type to be queried.
637
+ * @notice Returns details for a given depedency type `_dependencyType`.
638
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
589
639
  * @return typeAndVersion String representation of `_dependencyType`.
590
- * (e.g. "p5js(atSymbol)1.0.0")
640
+ * (e.g. "p5js(atSymbol)1.0.0")
591
641
  * @return preferredCDN Preferred CDN URL for dependency
592
642
  * @return additionalCDNCount Count of additional CDN URLs for dependency
593
643
  * @return preferredRepository Preferred repository URL for dependency
@@ -636,19 +686,31 @@ contract DependencyRegistryV0 is
636
686
 
637
687
  /**
638
688
  * @notice Returns the address of the supported core contract at index `_index`.
639
- * @param _index Index of the core contract to be returned.
689
+ * @param _index Index of the core contract to be returned, relative to the overall
690
+ * list of supported core contracts.
640
691
  * @return address of the core contract.
641
692
  */
642
- function getSupportedCoreContractAtIndex(
693
+ function getSupportedCoreContract(
643
694
  uint256 _index
644
695
  ) external view returns (address) {
645
- require(
646
- _supportedCoreContracts.length() > _index,
647
- "Index out of bounds"
648
- );
696
+ _onlyInRangeIndex({
697
+ _index: _index,
698
+ _length: _supportedCoreContracts.length()
699
+ });
649
700
  return _supportedCoreContracts.at(_index);
650
701
  }
651
702
 
703
+ /**
704
+ * @notice Returns whether the given contract address is a supported core contract.
705
+ * @param coreContractAddress Address of the core contract to be queried.
706
+ * @return True if the given contract address is a supported core contract.
707
+ */
708
+ function isSupportedCoreContract(
709
+ address coreContractAddress
710
+ ) external view returns (bool) {
711
+ return _supportedCoreContracts.contains(coreContractAddress);
712
+ }
713
+
652
714
  /**
653
715
  * @notice Returns a list of supported core contracts.
654
716
  * @return List of supported core contracts.
@@ -674,32 +736,41 @@ contract DependencyRegistryV0 is
674
736
 
675
737
  /**
676
738
  * @notice Returns the additional CDN URL at index `_index` for dependency `_dependencyType`.
677
- * @param _dependencyType Dependency type to be queried.
678
- * @param _index Index of the additional CDN URL to be returned.
739
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
740
+ * @param _index The index of an additional CDN, relative to the overall `additionalCDNCount`.
679
741
  */
680
- function getDependencyAdditionalCDNAtIndex(
742
+ function getDependencyAdditionalCDN(
681
743
  bytes32 _dependencyType,
682
744
  uint256 _index
683
745
  ) external view returns (string memory) {
684
- return dependencyDetails[_dependencyType].additionalCDNs[_index];
746
+ Dependency storage dependency = dependencyDetails[_dependencyType];
747
+ _onlyInRangeIndex({
748
+ _index: _index,
749
+ _length: dependency.additionalCDNCount
750
+ });
751
+ return dependency.additionalCDNs[_index];
685
752
  }
686
753
 
687
754
  /**
688
755
  * @notice Returns the additional repository URL at index `_index` for dependency `_dependencyType`.
689
- * @param _dependencyType Dependency type to be queried.
690
- * @param _index Index of the additional repository URL to be returned.
756
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
757
+ * @param _index The index of an additional repository, relative to the overall `additionalRepositoryCount`.
691
758
  */
692
- function getDependencyAdditionalRepositoryAtIndex(
759
+ function getDependencyAdditionalRepository(
693
760
  bytes32 _dependencyType,
694
761
  uint256 _index
695
762
  ) external view returns (string memory) {
696
- return
697
- dependencyDetails[_dependencyType].additionalRepositories[_index];
763
+ Dependency storage dependency = dependencyDetails[_dependencyType];
764
+ _onlyInRangeIndex({
765
+ _index: _index,
766
+ _length: dependency.additionalRepositoryCount
767
+ });
768
+ return dependency.additionalRepositories[_index];
698
769
  }
699
770
 
700
771
  /**
701
772
  * @notice Returns the count of scripts for dependency `_dependencyType`.
702
- * @param _dependencyType Dependency type to be queried.
773
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
703
774
  */
704
775
  function getDependencyScriptCount(
705
776
  bytes32 _dependencyType
@@ -709,32 +780,80 @@ contract DependencyRegistryV0 is
709
780
 
710
781
  /**
711
782
  * @notice Returns address with bytecode containing script for
712
- * dependency `_dependencyTypes` at script index `_index`.
783
+ * dependency `_dependencyTypes` at script index `_index`.
784
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
785
+ * @param _index The index of a given script, relative to the overall `scriptCount`.
786
+ * @return The address of the bytecode storage for the script at the given index, if it can be determined.
713
787
  */
714
- function getDependencyScriptBytecodeAddressAtIndex(
788
+ function getDependencyScriptBytecodeAddress(
715
789
  bytes32 _dependencyType,
716
790
  uint256 _index
717
791
  ) external view returns (address) {
792
+ Dependency storage dependency = dependencyDetails[_dependencyType];
793
+ _onlyInRangeIndex({_index: _index, _length: dependency.scriptCount});
794
+ return dependency.scriptBytecodeAddresses[_index];
795
+ }
796
+
797
+ /**
798
+ * @notice Returns the storage library version for
799
+ * dependency `_dependencyTypes` at script index `_index`.
800
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
801
+ * @param _index The index of a given script, relative to the overall `scriptCount`.
802
+ * @return The storage library version for the script at the given index, if it can be determined.
803
+ * @dev Note that we only expect this to be determinable if the script was written using a version
804
+ * of the Art Blocks `BytecodeStorage` library, and in other cases the fallback will be the
805
+ * unknown version string, as defined by the `BytecodeStorage` UNKNOWN_VERSION_STRING – this
806
+ * is inclusive of the in the case of `SSTORE2` written data blobs, which are an unknown version
807
+ * that can be fallback-read optimistically.
808
+ */
809
+ function getDependencyScriptBytecodeStorageVersion(
810
+ bytes32 _dependencyType,
811
+ uint256 _index
812
+ ) external view returns (bytes32) {
813
+ Dependency storage dependency = dependencyDetails[_dependencyType];
814
+ _onlyInRangeIndex({_index: _index, _length: dependency.scriptCount});
718
815
  return
719
- dependencyDetails[_dependencyType].scriptBytecodeAddresses[_index];
816
+ BytecodeStorageReader.getLibraryVersionForBytecode(
817
+ dependencyDetails[_dependencyType].scriptBytecodeAddresses[
818
+ _index
819
+ ]
820
+ );
720
821
  }
721
822
 
722
823
  /**
723
824
  * @notice Returns script for dependency `_dependencyType` at script index `_index`.
724
- * @param _dependencyType dependency to be queried.
725
- * @param _index Index of script to be queried.
726
- */
727
- function getDependencyScriptAtIndex(
825
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
826
+ * @param _index The index of a given script, relative to the overall `scriptCount`.
827
+ * @return A string containing the script content at the given script chunk index for a given dependency.
828
+ * @dev This method attempts to introspectively determine which library version of
829
+ * `BytecodeStorage` was used to write the stored script string that is being
830
+ * read back, in order to use the proper read approach. If the version is
831
+ * non-determinate, a fall-back to reading using the assumption that the bytes
832
+ * were written with `SSTORE2` is used.
833
+ * Also note that in this `SSTORE2` fallback handling, the approach of casting bytes to string
834
+ * can cause failure (e.g. unexpected continuation byte).
835
+ */
836
+ function getDependencyScript(
728
837
  bytes32 _dependencyType,
729
838
  uint256 _index
730
839
  ) external view returns (string memory) {
731
840
  Dependency storage dependency = dependencyDetails[_dependencyType];
732
- // If trying to access an out-of-index script, return the empty string.
733
- if (_index >= dependency.scriptCount) {
734
- return "";
841
+ _onlyInRangeIndex({_index: _index, _length: dependency.scriptCount});
842
+
843
+ address scriptAddress = dependency.scriptBytecodeAddresses[_index];
844
+ bytes32 storageVersion = BytecodeStorageReader
845
+ .getLibraryVersionForBytecode(scriptAddress);
846
+
847
+ if (storageVersion == BytecodeStorageReader.UNKNOWN_VERSION_STRING) {
848
+ return
849
+ string(
850
+ BytecodeStorageReader.readBytesFromSSTORE2Bytecode(
851
+ scriptAddress
852
+ )
853
+ );
854
+ } else {
855
+ return BytecodeStorageReader.readFromBytecode(scriptAddress);
735
856
  }
736
-
737
- return _readFromBytecode(dependency.scriptBytecodeAddresses[_index]);
738
857
  }
739
858
 
740
859
  /**
@@ -745,7 +864,7 @@ contract DependencyRegistryV0 is
745
864
  * an override set, this will revert.
746
865
  * @param _contractAddress Core contract address.
747
866
  * @param _projectId Project to return dependency type for.
748
- * @return dependencyType Dependency type used by project.
867
+ * @return dependencyType Identifier for the dependency (i.e. "type@version") used by project.
749
868
  */
750
869
  function getDependencyTypeForProject(
751
870
  address _contractAddress,
@@ -828,14 +947,4 @@ contract DependencyRegistryV0 is
828
947
  OwnableUpgradeable._transferOwnership(newOwner);
829
948
  adminACLContract = IAdminACLV0(newOwner);
830
949
  }
831
-
832
- /**
833
- * Helper for calling `BytecodeStorageReader` external library reader method,
834
- * added for bytecode size reduction purposes.
835
- */
836
- function _readFromBytecode(
837
- address _address
838
- ) internal view returns (string memory) {
839
- return BytecodeStorageReader.readFromBytecode(_address);
840
- }
841
950
  }
@@ -3,17 +3,17 @@ pragma solidity 0.8.19;
3
3
 
4
4
  // Created By: Art Blocks Inc.
5
5
 
6
- import "./interfaces/0.8.x/IRandomizer_V3CoreBase.sol";
7
- import "./interfaces/0.8.x/IAdminACLV0.sol";
8
- import "./interfaces/0.8.x/IGenArt721CoreContractV3.sol";
9
- import "./interfaces/0.8.x/IGenArt721CoreContractExposesHashSeed.sol";
10
- import "./interfaces/0.8.x/IManifold.sol";
6
+ import "./interfaces/v0.8.x/IRandomizer_V3CoreBase.sol";
7
+ import "./interfaces/v0.8.x/IAdminACLV0.sol";
8
+ import "./interfaces/v0.8.x/IGenArt721CoreContractV3.sol";
9
+ import "./interfaces/v0.8.x/IGenArt721CoreContractExposesHashSeed.sol";
10
+ import "./interfaces/v0.8.x/IManifold.sol";
11
11
 
12
12
  import "@openzeppelin-4.7/contracts/utils/Strings.sol";
13
13
  import "@openzeppelin-4.7/contracts/access/Ownable.sol";
14
- import "./libs/0.8.x/ERC721_PackedHashSeed.sol";
15
- import "./libs/0.8.x/BytecodeStorageV1.sol";
16
- import "./libs/0.8.x/Bytes32Strings.sol";
14
+ import "./libs/v0.8.x/ERC721_PackedHashSeed.sol";
15
+ import "./libs/v0.8.x/BytecodeStorageV1.sol";
16
+ import "./libs/v0.8.x/Bytes32Strings.sol";
17
17
 
18
18
  /**
19
19
  * @title Art Blocks ERC-721 core contract, V3.
@@ -186,7 +186,7 @@ contract GenArt721CoreV3 is
186
186
  bool paused;
187
187
  string name;
188
188
  string artist;
189
- string description;
189
+ address descriptionAddress;
190
190
  string website;
191
191
  string license;
192
192
  string projectBaseURI;
@@ -241,7 +241,7 @@ contract GenArt721CoreV3 is
241
241
  bool public newProjectsForbidden;
242
242
 
243
243
  /// version & type of this core contract
244
- string public constant coreVersion = "v3.2.0";
244
+ string public constant coreVersion = "v3.2.2";
245
245
  string public constant coreType = "GenArt721CoreV3";
246
246
 
247
247
  /// default base URI to initialize all new project projectBaseURI values to
@@ -944,6 +944,13 @@ contract GenArt721CoreV3 is
944
944
  /**
945
945
  * @notice Updates description of project `_projectId`.
946
946
  * Only artist may call when unlocked, only admin may call when locked.
947
+ * Note: The BytecodeStorage library is used to store the description to
948
+ * reduce initial upload cost, however, even minor edits will require an
949
+ * expensive, entirely new bytecode storage contract to be deployed instead
950
+ * of relatively cheap updates to already-warm storage slots. This results
951
+ * in an increased gas cost for minor edits to the description after the
952
+ * initial upload, but an overall decrease in gas cost for projects with
953
+ * less than ~3-5 edits (depending on the length of the description).
947
954
  * @param _projectId Project ID.
948
955
  * @param _projectDescription New project description.
949
956
  */
@@ -963,7 +970,10 @@ contract GenArt721CoreV3 is
963
970
  "Only artist when unlocked, owner when locked"
964
971
  );
965
972
  // effects
966
- projects[_projectId].description = _projectDescription;
973
+ // store description in contract bytecode, replacing reference address from
974
+ // the old storage description with the newly created one
975
+ projects[_projectId].descriptionAddress = _projectDescription
976
+ .writeToBytecode();
967
977
  emit ProjectUpdated(_projectId, FIELD_PROJECT_DESCRIPTION);
968
978
  }
969
979
 
@@ -1354,7 +1364,12 @@ contract GenArt721CoreV3 is
1354
1364
  Project storage project = projects[_projectId];
1355
1365
  projectName = project.name;
1356
1366
  artist = project.artist;
1357
- description = project.description;
1367
+ address projectDescriptionBytecodeAddress = project.descriptionAddress;
1368
+ if (projectDescriptionBytecodeAddress == address(0)) {
1369
+ description = "";
1370
+ } else {
1371
+ description = _readFromBytecode(projectDescriptionBytecodeAddress);
1372
+ }
1358
1373
  website = project.website;
1359
1374
  license = project.license;
1360
1375
  }