@artblocks/contracts 1.0.3 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) 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 +212 -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 -11
  40. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +6 -11
  41. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +6 -11
  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 -11
  44. package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +12 -12
  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 +7 -7
  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 +22 -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 +104 -19
  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 +114 -0
  97. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol/ISharedMinterDAExpV0.json +37 -0
  98. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol/ISharedMinterDALinV0.json +37 -0
  99. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol/ISharedMinterDAV0.json +50 -0
  100. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol/ISharedMinterHolderERC20V0.json +158 -0
  101. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol/ISharedMinterHolderV0.json +128 -0
  102. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol/ISharedMinterMerkleV0.json +97 -0
  103. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol/ISharedMinterSEAV0.json +29 -0
  104. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol/ISharedMinterSimplePurchaseV0.json +64 -0
  105. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterV0.sol/ISharedMinterV0.json +117 -0
  106. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/ISharedRandomizerV0.sol/ISharedRandomizerV0.json +52 -36
  107. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IWETH.sol/IWETH.json +1 -1
  108. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Address.json +2 -2
  109. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Counters.json +2 -2
  110. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/CustomERC721Metadata.json +2 -2
  111. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/ERC721.json +2 -2
  112. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/ERC721Enumerable.json +2 -2
  113. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/GenArt721CoreV1.json +2 -2
  114. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/SafeMath.json +2 -2
  115. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Strings.json +2 -2
  116. package/artifacts/contracts/legacy/GenArt721LegacyMinter.sol/GenArt721LegacyMinter.json +2 -2
  117. package/artifacts/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol/DelegationRegistry.json +2 -2
  118. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/CustomERC721Metadata.sol/CustomERC721Metadata.json +3 -3
  119. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/IERC20.sol/IERC20.json +1 -1
  120. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/SafeMath.sol/SafeMath.json +3 -3
  121. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/Strings.sol/Strings.json +3 -3
  122. package/artifacts/contracts/libs/v0.8.x/ABHelpers.sol/ABHelpers.json +10 -0
  123. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +10 -0
  124. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV0.sol/BytecodeStorage.json +3 -3
  125. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV1.sol/BytecodeStorageReader.json +3 -3
  126. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV1.sol/BytecodeStorageWriter.json +3 -3
  127. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/Bytes32Strings.sol/Bytes32Strings.json +3 -3
  128. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +3 -3
  129. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/SSTORE2.sol/SSTORE2.json +3 -3
  130. package/artifacts/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol/DAExpLib.json +67 -0
  131. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALib.sol/DALib.json +30 -0
  132. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +67 -0
  133. package/artifacts/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol/GenericMinterEventsLib.json +346 -0
  134. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +36 -0
  135. package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +37 -0
  136. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +10 -0
  137. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +261 -0
  138. package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +55 -0
  139. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +48 -0
  140. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +42 -0
  141. package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +86 -0
  142. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV0.sol/MinterFilterV0.json +2 -2
  143. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  144. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +96 -40
  145. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +662 -0
  146. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -20
  147. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +619 -0
  148. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV4.sol/MinterDAExpV4.json +2 -2
  149. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +418 -0
  150. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +662 -0
  151. package/artifacts/contracts/minter-suite/Minters/MinterDALinV4.sol/MinterDALinV4.json +2 -2
  152. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +418 -0
  153. package/artifacts/contracts/minter-suite/Minters/MinterHolderV4.sol/MinterHolderV4.json +2 -2
  154. package/artifacts/contracts/minter-suite/Minters/MinterMerkleV5.sol/MinterMerkleV5.json +2 -2
  155. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
  156. package/artifacts/contracts/minter-suite/Minters/MinterSEAV0.sol/MinterSEAV0.json +2 -2
  157. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +659 -0
  158. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
  159. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +452 -0
  160. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +600 -0
  161. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +633 -0
  162. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +782 -0
  163. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +676 -0
  164. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV4.sol/MinterSetPriceV4.json +2 -2
  165. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +356 -0
  166. package/artifacts/contracts/mock/BytecodeV0TextCR_DMock.sol/BytecodeV0TextCR_DMock.json +2 -2
  167. package/artifacts/contracts/mock/BytecodeV1LibCallsMock.sol/BytecodeV1LibCallsMock.json +2 -2
  168. package/artifacts/contracts/mock/BytecodeV1TextCR_DMock.sol/BytecodeV1TextCR_DMock.json +4 -4
  169. package/artifacts/contracts/mock/DeadReceiverBidderMock.sol/DeadReceiverBidderMock.json +25 -2
  170. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
  171. package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +28 -2
  172. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +6 -11
  173. package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +2 -2
  174. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +2 -2
  175. package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +2 -2
  176. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  177. package/artifacts/contracts/mock/ReentrancyHolderMock.sol/ReentrancyHolderMock.json +2 -2
  178. package/artifacts/contracts/mock/ReentrancyHolderMockShared.sol/ReentrancyHolderMockShared.json +136 -0
  179. package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
  180. package/artifacts/contracts/mock/ReentrancyMerkleMockShared.sol/ReentrancyMerkleMockShared.json +105 -0
  181. package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
  182. package/artifacts/contracts/mock/ReentrancyMockShared.sol/ReentrancyMockShared.json +100 -0
  183. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +2 -2
  184. package/artifacts/contracts/mock/ReentrancySEAMockShared.sol/ReentrancySEAAutoBidderMockShared.json +69 -0
  185. package/artifacts/contracts/mock/SSTORE2Mock.sol/SSTORE2Mock.json +2 -2
  186. package/artifacts/contracts/randomizer/deprecated/BasicRandomizer.sol/BasicRandomizer.json +2 -2
  187. package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +2 -2
  188. package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +2 -2
  189. package/artifacts/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol/PseudorandomAtomic.json +2 -2
  190. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +58 -42
  191. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +2 -2
  192. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol/GenArt721RoyaltyOverride_PBAB.json +2 -2
  193. package/contracts/AdminACLV0.sol +1 -1
  194. package/contracts/AdminACLV1.sol +1 -1
  195. package/contracts/DependencyRegistryV0.sol +300 -123
  196. package/contracts/GenArt721CoreV3.sol +27 -12
  197. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV0.sol +3 -3
  198. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV1.sol +3 -3
  199. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol +3 -3
  200. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol +3 -3
  201. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +3 -3
  202. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol +3 -3
  203. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV0.sol +3 -3
  204. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV1.sol +3 -3
  205. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol +3 -3
  206. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol +3 -3
  207. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV0.sol +3 -3
  208. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol +3 -3
  209. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol +4 -4
  210. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol +4 -4
  211. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV0.sol +3 -3
  212. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol +3 -3
  213. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol +4 -4
  214. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol +4 -4
  215. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol +4 -4
  216. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV0.sol +3 -3
  217. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV1.sol +3 -3
  218. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol +3 -3
  219. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol +3 -3
  220. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol +3 -3
  221. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol +3 -3
  222. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol +3 -3
  223. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol +3 -3
  224. package/contracts/archive/readme.md +16 -0
  225. package/contracts/engine/README.md +21 -0
  226. package/contracts/engine/V2/GenArt721CoreV2_ENGINE_FLEX.sol +2 -2
  227. package/contracts/engine/V2/GenArt721CoreV2_PBAB.sol +2 -2
  228. package/contracts/engine/V2/GenArt721CoreV2_PRTNR.sol +3 -3
  229. package/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol +2 -2
  230. package/contracts/engine/V2/GenArt721MinterDAExp_PBAB.sol +1 -1
  231. package/contracts/engine/V2/GenArt721Minter_PBAB.sol +2 -2
  232. package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +31 -22
  233. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +31 -22
  234. package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +12 -18
  235. package/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol +1 -1
  236. package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +23 -24
  237. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IAdminACLV0_PROHIBITION.sol +1 -1
  238. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +1 -1
  239. package/contracts/engine-registry/CoreRegistryV1.sol +58 -65
  240. package/contracts/engine-registry/EngineRegistryV0.sol +1 -1
  241. package/contracts/explorations/GenArt721CoreV3_Explorations.sol +27 -12
  242. package/contracts/interfaces/{0.8.x → v0.8.x}/ICoreRegistryV1.sol +6 -8
  243. package/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryV0.sol +5 -2
  244. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol +23 -0
  245. package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV1.sol +45 -19
  246. package/contracts/interfaces/v0.8.x/IRandomizer_V3CoreBase.sol +23 -0
  247. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +28 -0
  248. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol +12 -0
  249. package/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol +12 -0
  250. package/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol +13 -0
  251. package/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol +47 -0
  252. package/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol +41 -0
  253. package/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol +34 -0
  254. package/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol +15 -0
  255. package/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol +28 -0
  256. package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +43 -0
  257. package/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol +123 -0
  258. package/contracts/legacy/GenArt721CoreV1.sol +2 -2
  259. package/contracts/legacy/GenArt721LegacyMinter.sol +5 -5
  260. package/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol +1 -1
  261. package/contracts/libs/v0.8.x/ABHelpers.sol +55 -0
  262. package/contracts/libs/v0.8.x/AuthLib.sol +196 -0
  263. package/contracts/libs/{0.8.x → v0.8.x}/Bytes32Strings.sol +5 -5
  264. package/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol +250 -0
  265. package/contracts/libs/v0.8.x/minter-libs/DALib.sol +26 -0
  266. package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +216 -0
  267. package/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol +171 -0
  268. package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +488 -0
  269. package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +384 -0
  270. package/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol +240 -0
  271. package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +995 -0
  272. package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +166 -0
  273. package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +770 -0
  274. package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +741 -0
  275. package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +291 -0
  276. package/contracts/minter-suite/MinterFilter/MinterFilterV0.sol +3 -3
  277. package/contracts/minter-suite/MinterFilter/MinterFilterV1.sol +5 -5
  278. package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +414 -297
  279. package/contracts/minter-suite/Minters/MinterBase_v0_1_1.sol +4 -4
  280. package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +866 -0
  281. package/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol +4 -57
  282. package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +886 -0
  283. package/contracts/minter-suite/Minters/MinterDAExpV4.sol +3 -3
  284. package/contracts/minter-suite/Minters/MinterDAExpV5.sol +545 -0
  285. package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +857 -0
  286. package/contracts/minter-suite/Minters/MinterDALinV4.sol +3 -3
  287. package/contracts/minter-suite/Minters/MinterDALinV5.sol +534 -0
  288. package/contracts/minter-suite/Minters/MinterHolderV4.sol +4 -4
  289. package/contracts/minter-suite/Minters/MinterMerkleV5.sol +4 -4
  290. package/contracts/minter-suite/Minters/MinterPolyptychV0.sol +6 -6
  291. package/contracts/minter-suite/Minters/MinterSEAV0.sol +3 -3
  292. package/contracts/minter-suite/Minters/MinterSEAV1.sol +853 -0
  293. package/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol +5 -5
  294. package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +545 -0
  295. package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +730 -0
  296. package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +714 -0
  297. package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +1012 -0
  298. package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +868 -0
  299. package/contracts/minter-suite/Minters/MinterSetPriceV4.sol +3 -3
  300. package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +414 -0
  301. package/contracts/mock/BytecodeV0TextCR_DMock.sol +1 -1
  302. package/contracts/mock/BytecodeV1LibCallsMock.sol +1 -1
  303. package/contracts/mock/BytecodeV1TextCR_DMock.sol +1 -1
  304. package/contracts/mock/DeadReceiverBidderMock.sol +15 -0
  305. package/contracts/mock/DummySharedMinter.sol +2 -2
  306. package/contracts/mock/ERC20Mock.sol +16 -0
  307. package/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol +11 -18
  308. package/contracts/mock/MockAdminACLV0.sol +1 -1
  309. package/contracts/mock/MockAdminACLV0_PROHIBITION.sol +1 -1
  310. package/contracts/mock/OriginRegisterMock.sol +1 -1
  311. package/contracts/mock/ReentrancyHolderMock.sol +1 -1
  312. package/contracts/mock/ReentrancyHolderMockShared.sol +59 -0
  313. package/contracts/mock/ReentrancyMerkleMock.sol +1 -1
  314. package/contracts/mock/ReentrancyMerkleMockShared.sol +58 -0
  315. package/contracts/mock/ReentrancyMock.sol +1 -1
  316. package/contracts/mock/ReentrancyMockShared.sol +48 -0
  317. package/contracts/mock/ReentrancySEAMock.sol +1 -1
  318. package/contracts/mock/ReentrancySEAMockShared.sol +40 -0
  319. package/contracts/mock/SSTORE2Mock.sol +1 -1
  320. package/contracts/randomizer/deprecated/BasicRandomizer.sol +1 -1
  321. package/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol +2 -2
  322. package/contracts/randomizer/deprecated/RandomizerV2.sol +2 -2
  323. package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +1 -1
  324. package/contracts/randomizer/shared/SharedRandomizerV0.sol +134 -111
  325. package/contracts/royalty-registry/GenArt721RoyaltyOverride.sol +2 -2
  326. package/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol +2 -2
  327. package/package.json +57 -36
  328. package/LICENSE +0 -165
  329. package/contracts/interfaces/0.8.x/IRandomizer_V3CoreBase.sol +0 -10
  330. package/contracts/interfaces/0.8.x/ISharedRandomizerV0.sol +0 -105
  331. /package/contracts/interfaces/{0.5.x → v0.5.x}/IBonusContract.sol +0 -0
  332. /package/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreContractV1.sol +0 -0
  333. /package/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreV2_PBAB.sol +0 -0
  334. /package/contracts/interfaces/{0.5.x → v0.5.x}/IRandomizer.sol +0 -0
  335. /package/contracts/interfaces/{0.8.x → v0.8.x}/IAdminACLV0.sol +0 -0
  336. /package/contracts/interfaces/{0.8.x → v0.8.x}/IArtblocksRoyaltyOverride.sol +0 -0
  337. /package/contracts/interfaces/{0.8.x → v0.8.x}/IBonusContract.sol +0 -0
  338. /package/contracts/interfaces/{0.8.x → v0.8.x}/IBytecodeStorageReader.sol +0 -0
  339. /package/contracts/interfaces/{0.8.x → v0.8.x}/IDelegationRegistry.sol +0 -0
  340. /package/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryCompatibleV0.sol +0 -0
  341. /package/contracts/interfaces/{0.8.x → v0.8.x}/IEngineRegistryV0.sol +0 -0
  342. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV0.sol +0 -0
  343. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV1.sol +0 -0
  344. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlement_Mixin.sol +0 -0
  345. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV0.sol +0 -0
  346. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV1.sol +0 -0
  347. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV0.sol +0 -0
  348. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV1.sol +0 -0
  349. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV0.sol +0 -0
  350. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV1.sol +0 -0
  351. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV2.sol +0 -0
  352. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV0.sol +0 -0
  353. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV1.sol +0 -0
  354. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV2.sol +0 -0
  355. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterSEAV0.sol +0 -0
  356. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV0.sol +0 -0
  357. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV1.sol +0 -0
  358. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV2.sol +0 -0
  359. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractExposesHashSeed.sol +0 -0
  360. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV1.sol +0 -0
  361. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3.sol +0 -0
  362. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Base.sol +0 -0
  363. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine.sol +0 -0
  364. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine_Flex.sol +0 -0
  365. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreV2_PBAB.sol +0 -0
  366. /package/contracts/interfaces/{0.8.x → v0.8.x}/IManifold.sol +0 -0
  367. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterBaseV0.sol +0 -0
  368. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV0.sol +0 -0
  369. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPICoreV0.sol +0 -0
  370. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPIMinterV0.sol +0 -0
  371. /package/contracts/interfaces/{0.8.x → v0.8.x}/IPseudorandomAtomic.sol +0 -0
  372. /package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizer.sol +0 -0
  373. /package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerPolyptychV0.sol +0 -0
  374. /package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerV2.sol +0 -0
  375. /package/contracts/interfaces/{0.8.x → v0.8.x}/IWETH.sol +0 -0
  376. /package/contracts/libs/{0.5.x → v0.5.x}/CustomERC721Metadata.sol +0 -0
  377. /package/contracts/libs/{0.5.x → v0.5.x}/IERC20.sol +0 -0
  378. /package/contracts/libs/{0.5.x → v0.5.x}/SafeMath.sol +0 -0
  379. /package/contracts/libs/{0.5.x → v0.5.x}/Strings.sol +0 -0
  380. /package/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV0.sol +0 -0
  381. /package/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV1.sol +0 -0
  382. /package/contracts/libs/{0.8.x → v0.8.x}/ERC721_PackedHashSeed.sol +0 -0
  383. /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.
@@ -23,7 +23,7 @@ import "./libs/0.8.x/Bytes32Strings.sol";
23
23
  * Permissions managed by ACL contract. If/when we ever call
24
24
  * renounceOwnership() this will becom a frozen, immutable registry
25
25
  * as no upgrades will be possible.
26
- * This contract This contract is intended to be an auxiliary reference registry
26
+ * This contract is intended to be an auxiliary reference registry
27
27
  * to our non-upgradeable and immutable ERC-721 conforming core contracts,
28
28
  * and has been made upgradeable as we expect its required functionality in
29
29
  * relation to the Art Blocks ecosystem to evolve over time.
@@ -46,9 +46,12 @@ contract DependencyRegistryV0 is
46
46
  IAdminACLV0 public adminACLContract;
47
47
 
48
48
  struct Dependency {
49
+ bytes32 licenseType;
49
50
  string preferredCDN;
51
+ // mapping from additional CDN index to CDN URLr
50
52
  mapping(uint256 => string) additionalCDNs;
51
53
  string preferredRepository;
54
+ // mapping from additional repository index to repository URL
52
55
  mapping(uint256 => string) additionalRepositories;
53
56
  string referenceWebsite;
54
57
  // mapping from script index to address storing script in bytecode
@@ -58,9 +61,14 @@ contract DependencyRegistryV0 is
58
61
  uint24 scriptCount;
59
62
  }
60
63
 
64
+ // dependency types, i.e. "type@version"
61
65
  EnumerableSet.Bytes32Set private _dependencyTypes;
66
+ // mapping from dependencyTypes to Dependency, which stores the properties of each dependency
62
67
  mapping(bytes32 => Dependency) dependencyDetails;
68
+ // source code license types, MIT, GPL, etc.
69
+ EnumerableSet.Bytes32Set private _licenseTypes;
63
70
 
71
+ // set of supported core ArtBlocks contracts
64
72
  EnumerableSet.AddressSet private _supportedCoreContracts;
65
73
  mapping(address => mapping(uint256 => bytes32)) projectDependencyTypeOverrides;
66
74
 
@@ -97,6 +105,17 @@ contract DependencyRegistryV0 is
97
105
  );
98
106
  }
99
107
 
108
+ function _onlyInRangeIndex(uint256 _index, uint256 _length) internal pure {
109
+ require(_index < _length, "Index out of range");
110
+ }
111
+
112
+ function _onlyExistingLicenseType(bytes32 _licenseType) internal view {
113
+ require(
114
+ _licenseTypes.contains(_licenseType),
115
+ "License type does not exist"
116
+ );
117
+ }
118
+
100
119
  /**
101
120
  * @notice Initializes contract.
102
121
  * @param _adminACLContract Address of admin access control contract, to be
@@ -108,23 +127,36 @@ contract DependencyRegistryV0 is
108
127
  _transferOwnership(_adminACLContract);
109
128
  }
110
129
 
130
+ /**
131
+ * @notice Adds a new license type that can be used by dependencies.
132
+ */
133
+ function addLicenseType(bytes32 _licenseType) external {
134
+ _onlyAdminACL(this.addLicenseType.selector);
135
+ // @dev the add function returns false if set already contains value
136
+ require(_licenseTypes.add(_licenseType), "License type already exists");
137
+ require(
138
+ _licenseType != bytes32(""),
139
+ "License type cannot be empty string"
140
+ );
141
+ emit LicenseTypeAdded(_licenseType);
142
+ }
143
+
111
144
  /**
112
145
  * @notice Adds a new dependency.
113
146
  * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
147
+ * @param _licenseType License type for dependency, must be a registered license type.
114
148
  * @param _preferredCDN Preferred CDN for dependency.
115
149
  * @param _preferredRepository Preferred repository for dependency.
116
150
  */
117
151
  function addDependency(
118
152
  bytes32 _dependencyType,
153
+ bytes32 _licenseType,
119
154
  string memory _preferredCDN,
120
155
  string memory _preferredRepository,
121
156
  string memory _referenceWebsite
122
157
  ) external {
123
158
  _onlyAdminACL(this.addDependency.selector);
124
- require(
125
- !_dependencyTypes.contains(_dependencyType),
126
- "Dependency type already exists"
127
- );
159
+ _onlyExistingLicenseType(_licenseType);
128
160
  require(
129
161
  _dependencyType.containsExactCharacterQty(
130
162
  AT_CHARACTER_CODE,
@@ -132,15 +164,21 @@ contract DependencyRegistryV0 is
132
164
  ),
133
165
  "must contain exactly one @"
134
166
  );
167
+ require(
168
+ // @dev the add function returns false if set already contains value
169
+ _dependencyTypes.add(_dependencyType),
170
+ "Dependency type already exists"
171
+ );
135
172
 
136
- _dependencyTypes.add(_dependencyType);
137
- Dependency storage dependencyType = dependencyDetails[_dependencyType];
138
- dependencyType.preferredCDN = _preferredCDN;
139
- dependencyType.preferredRepository = _preferredRepository;
140
- dependencyType.referenceWebsite = _referenceWebsite;
173
+ Dependency storage dependency = dependencyDetails[_dependencyType];
174
+ dependency.licenseType = _licenseType;
175
+ dependency.preferredCDN = _preferredCDN;
176
+ dependency.preferredRepository = _preferredRepository;
177
+ dependency.referenceWebsite = _referenceWebsite;
141
178
 
142
179
  emit DependencyAdded(
143
180
  _dependencyType,
181
+ _licenseType,
144
182
  _preferredCDN,
145
183
  _preferredRepository,
146
184
  _referenceWebsite
@@ -149,7 +187,7 @@ contract DependencyRegistryV0 is
149
187
 
150
188
  /**
151
189
  * @notice Removes a dependency.
152
- * @param _dependencyType Name of dependency type (i.e. "type@version")
190
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
153
191
  */
154
192
  function removeDependency(bytes32 _dependencyType) external {
155
193
  _onlyAdminACL(this.removeDependency.selector);
@@ -169,10 +207,11 @@ contract DependencyRegistryV0 is
169
207
  }
170
208
 
171
209
  /**
172
- * @notice Adds a script to dependency `_dependencyType`.
173
- * @param _dependencyType dependency to be updated.
210
+ * @notice Adds a script to dependency `_dependencyType`, by way of
211
+ * providing a string to write to bytecode storage.
212
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
174
213
  * @param _script Script to be added. Required to be a non-empty string,
175
- * but no further validation is performed.
214
+ * but no further validation is performed.
176
215
  */
177
216
  function addDependencyScript(
178
217
  bytes32 _dependencyType,
@@ -191,36 +230,80 @@ contract DependencyRegistryV0 is
191
230
  }
192
231
 
193
232
  /**
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.
233
+ * @notice Updates script for dependencyType `_dependencyType` at script `_index`,
234
+ * by way of providing a string to write to bytecode storage.
235
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
236
+ * @param _index The index of a given script, relative to the overall `scriptCount`.
197
237
  * @param _script The updated script value. Required to be a non-empty
198
- * string, but no further validation is performed.
238
+ * string, but no further validation is performed.
199
239
  */
200
240
  function updateDependencyScript(
201
241
  bytes32 _dependencyType,
202
- uint256 _scriptId,
242
+ uint256 _index,
203
243
  string memory _script
204
244
  ) external {
205
245
  _onlyAdminACL(this.updateDependencyScript.selector);
206
246
  _onlyNonEmptyString(_script);
207
247
  _onlyExistingDependencyType(_dependencyType);
208
- Dependency storage dependencyType = dependencyDetails[_dependencyType];
209
- require(
210
- _scriptId < dependencyType.scriptCount,
211
- "scriptId out of range"
212
- );
248
+ Dependency storage dependency = dependencyDetails[_dependencyType];
249
+ _onlyInRangeIndex({_index: _index, _length: dependency.scriptCount});
213
250
  // store script in contract bytecode, replacing reference address from
214
251
  // the contract that no longer exists with the newly created one
215
- dependencyType.scriptBytecodeAddresses[_scriptId] = _script
216
- .writeToBytecode();
252
+ dependency.scriptBytecodeAddresses[_index] = _script.writeToBytecode();
253
+
254
+ emit DependencyScriptUpdated(_dependencyType);
255
+ }
256
+
257
+ /**
258
+ * @notice Adds a script to dependency `_dependencyType`, by way of
259
+ * providing an already written chunk of bytecode storage.
260
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
261
+ * @param _scriptPointer Address of script to be added. Required to be a non-zero address,
262
+ * but no further validation is performed.
263
+ */
264
+ function addDependencyScriptPointer(
265
+ bytes32 _dependencyType,
266
+ address _scriptPointer
267
+ ) external {
268
+ _onlyAdminACL(this.addDependencyScriptPointer.selector);
269
+ _onlyNonZeroAddress(_scriptPointer);
270
+ _onlyExistingDependencyType(_dependencyType);
271
+ Dependency storage dependency = dependencyDetails[_dependencyType];
272
+ // store script in contract bytecode
273
+ dependency.scriptBytecodeAddresses[
274
+ dependency.scriptCount
275
+ ] = _scriptPointer;
276
+ dependency.scriptCount = dependency.scriptCount + 1;
277
+
278
+ emit DependencyScriptUpdated(_dependencyType);
279
+ }
280
+
281
+ /**
282
+ * @notice Updates script for dependencyType `_dependencyType` at script `_index`,
283
+ * by way of providing an already written chunk of bytecode storage.
284
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
285
+ * @param _index The index of a given script, relative to the overall `scriptCount`.
286
+ * @param _scriptPointer The updated script pointer (address of bytecode storage).
287
+ * Required to be a non-zero address, but no further validation is performed.
288
+ */
289
+ function updateDependencyScriptPointer(
290
+ bytes32 _dependencyType,
291
+ uint256 _index,
292
+ address _scriptPointer
293
+ ) external {
294
+ _onlyAdminACL(this.updateDependencyScriptPointer.selector);
295
+ _onlyNonZeroAddress(_scriptPointer);
296
+ _onlyExistingDependencyType(_dependencyType);
297
+ Dependency storage dependency = dependencyDetails[_dependencyType];
298
+ _onlyInRangeIndex({_index: _index, _length: dependency.scriptCount});
299
+ dependency.scriptBytecodeAddresses[_index] = _scriptPointer;
217
300
 
218
301
  emit DependencyScriptUpdated(_dependencyType);
219
302
  }
220
303
 
221
304
  /**
222
305
  * @notice Removes last script from dependency `_dependencyType`.
223
- * @param _dependencyType dependency to be updated.
306
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
224
307
  */
225
308
  function removeDependencyLastScript(bytes32 _dependencyType) external {
226
309
  _onlyAdminACL(this.removeDependencyLastScript.selector);
@@ -238,7 +321,7 @@ contract DependencyRegistryV0 is
238
321
 
239
322
  /**
240
323
  * @notice Updates preferred CDN for dependency `_dependencyType`.
241
- * @param _dependencyType dependency to be updated.
324
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
242
325
  * @param _preferredCDN URL for preferred CDN.
243
326
  */
244
327
  function updateDependencyPreferredCDN(
@@ -254,7 +337,7 @@ contract DependencyRegistryV0 is
254
337
 
255
338
  /**
256
339
  * @notice Updates preferred repository for dependency `_dependencyType`.
257
- * @param _dependencyType dependency to be updated.
340
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
258
341
  * @param _preferredRepository URL for preferred repository.
259
342
  */
260
343
  function updateDependencyPreferredRepository(
@@ -274,7 +357,7 @@ contract DependencyRegistryV0 is
274
357
 
275
358
  /**
276
359
  * @notice Updates project website for dependency `_dependencyType`.
277
- * @param _dependencyType dependency to be updated.
360
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
278
361
  * @param _referenceWebsite URL for project website.
279
362
  */
280
363
  function updateDependencyReferenceWebsite(
@@ -293,9 +376,9 @@ contract DependencyRegistryV0 is
293
376
 
294
377
  /**
295
378
  * @notice Adds a new CDN url to `_dependencyType`.
296
- * @param _dependencyType dependency to be updated.
379
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
297
380
  * @param _additionalCDN CDN URL to be added. Required to be a non-empty string,
298
- * but no further validation is performed.
381
+ * but no further validation is performed.
299
382
  */
300
383
  function addDependencyAdditionalCDN(
301
384
  bytes32 _dependencyType,
@@ -321,19 +404,19 @@ contract DependencyRegistryV0 is
321
404
  * @notice Removes additional CDN for dependency `_dependencyId` at index `_index`.
322
405
  * Removal is done by swapping the element to be removed with the last element in the array, then deleting this last element.
323
406
  * 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
407
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
408
+ * @param _index The index of an additional CDN, relative to the overall `additionalCDNCount`.
326
409
  */
327
- function removeDependencyAdditionalCDNAtIndex(
410
+ function removeDependencyAdditionalCDN(
328
411
  bytes32 _dependencyType,
329
412
  uint256 _index
330
413
  ) external {
331
- _onlyAdminACL(this.removeDependencyAdditionalCDNAtIndex.selector);
414
+ _onlyAdminACL(this.removeDependencyAdditionalCDN.selector);
332
415
  _onlyExistingDependencyType(_dependencyType);
333
416
  Dependency storage dependency = dependencyDetails[_dependencyType];
334
417
 
335
418
  uint256 additionalCDNCount = dependency.additionalCDNCount;
336
- require(_index < additionalCDNCount, "Asset index out of range");
419
+ _onlyInRangeIndex({_index: _index, _length: additionalCDNCount});
337
420
 
338
421
  uint256 lastElementIndex = additionalCDNCount - 1;
339
422
 
@@ -349,21 +432,23 @@ contract DependencyRegistryV0 is
349
432
 
350
433
  /**
351
434
  * @notice Updates additional CDN for dependency `_dependencyType` at `_index`.
352
- * @param _dependencyType dependency to be updated.
353
- * @param _index Additional CDN index.
435
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
436
+ * @param _index The index of an additional CDN, relative to the overall `additionalCDNCount`.
354
437
  * @param _additionalCDN New CDN URL.
355
438
  */
356
- function updateDependencyAdditionalCDNAtIndex(
439
+ function updateDependencyAdditionalCDN(
357
440
  bytes32 _dependencyType,
358
441
  uint256 _index,
359
442
  string memory _additionalCDN
360
443
  ) external {
361
- _onlyAdminACL(this.updateDependencyAdditionalCDNAtIndex.selector);
444
+ _onlyAdminACL(this.updateDependencyAdditionalCDN.selector);
362
445
  _onlyNonEmptyString(_additionalCDN);
363
446
  _onlyExistingDependencyType(_dependencyType);
364
447
  Dependency storage dependency = dependencyDetails[_dependencyType];
365
- uint24 additionalCDNCount = dependency.additionalCDNCount;
366
- require(_index < additionalCDNCount, "Asset index out of range");
448
+ _onlyInRangeIndex({
449
+ _index: _index,
450
+ _length: dependency.additionalCDNCount
451
+ });
367
452
 
368
453
  dependency.additionalCDNs[_index] = _additionalCDN;
369
454
 
@@ -376,7 +461,7 @@ contract DependencyRegistryV0 is
376
461
 
377
462
  /**
378
463
  * @notice Adds a new repository URL to dependency `_dependencyType`.
379
- * @param _dependencyType dependency to be updated.
464
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
380
465
  * @param _additionalRepository Repository URL to be added. Required to be a non-empty string,
381
466
  * but no further validation is performed.
382
467
  */
@@ -409,22 +494,19 @@ contract DependencyRegistryV0 is
409
494
  * @notice Removes additional repository for depenency `_dependencyId` at index `_index`.
410
495
  * Removal is done by swapping the element to be removed with the last element in the array, then deleting this last element.
411
496
  * 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.
497
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
498
+ * @param _index The index of an additional repository, relative to the overall `additionalRepositoryCount`.
414
499
  */
415
- function removeDependencyAdditionalRepositoryAtIndex(
500
+ function removeDependencyAdditionalRepository(
416
501
  bytes32 _dependencyType,
417
502
  uint256 _index
418
503
  ) external {
419
- _onlyAdminACL(
420
- this.removeDependencyAdditionalRepositoryAtIndex.selector
421
- );
504
+ _onlyAdminACL(this.removeDependencyAdditionalRepository.selector);
422
505
  _onlyExistingDependencyType(_dependencyType);
423
506
  Dependency storage dependency = dependencyDetails[_dependencyType];
424
- uint256 additionalRepositoryCount = uint256(
425
- dependency.additionalRepositoryCount
426
- );
427
- require(_index < additionalRepositoryCount, "Asset index out of range");
507
+ uint256 additionalRepositoryCount = dependency
508
+ .additionalRepositoryCount;
509
+ _onlyInRangeIndex({_index: _index, _length: additionalRepositoryCount});
428
510
 
429
511
  uint256 lastElementIndex = additionalRepositoryCount - 1;
430
512
 
@@ -440,23 +522,23 @@ contract DependencyRegistryV0 is
440
522
 
441
523
  /**
442
524
  * @notice Updates additional repository for dependency `_dependencyType` at `_index`.
443
- * @param _dependencyType dependency to be updated.
444
- * @param _index Additional repository index.
525
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
526
+ * @param _index The index of an additional repository, relative to the overall `additionalRepositoryCount`.
445
527
  * @param _additionalRepository New Repository URL.
446
528
  */
447
- function updateDependencyAdditionalRepositoryAtIndex(
529
+ function updateDependencyAdditionalRepository(
448
530
  bytes32 _dependencyType,
449
531
  uint256 _index,
450
532
  string memory _additionalRepository
451
533
  ) external {
452
- _onlyAdminACL(
453
- this.updateDependencyAdditionalRepositoryAtIndex.selector
454
- );
534
+ _onlyAdminACL(this.updateDependencyAdditionalRepository.selector);
455
535
  _onlyNonEmptyString(_additionalRepository);
456
536
  _onlyExistingDependencyType(_dependencyType);
457
537
  Dependency storage dependency = dependencyDetails[_dependencyType];
458
- uint24 additionalRepositoryCount = dependency.additionalRepositoryCount;
459
- require(_index < additionalRepositoryCount, "Asset index out of range");
538
+ _onlyInRangeIndex({
539
+ _index: _index,
540
+ _length: dependency.additionalRepositoryCount
541
+ });
460
542
 
461
543
  dependency.additionalRepositories[_index] = _additionalRepository;
462
544
 
@@ -475,12 +557,10 @@ contract DependencyRegistryV0 is
475
557
  _onlyAdminACL(this.addSupportedCoreContract.selector);
476
558
  _onlyNonZeroAddress(_contractAddress);
477
559
  require(
478
- !_supportedCoreContracts.contains(_contractAddress),
560
+ // @dev the add function returns false if set already contains value
561
+ _supportedCoreContracts.add(_contractAddress),
479
562
  "Contract already supported"
480
563
  );
481
-
482
- _supportedCoreContracts.add(_contractAddress);
483
-
484
564
  emit SupportedCoreContractAdded(_contractAddress);
485
565
  }
486
566
 
@@ -490,9 +570,11 @@ contract DependencyRegistryV0 is
490
570
  */
491
571
  function removeSupportedCoreContract(address _contractAddress) external {
492
572
  _onlyAdminACL(this.removeSupportedCoreContract.selector);
493
- _onlySupportedCoreContract(_contractAddress);
494
- _supportedCoreContracts.remove(_contractAddress);
495
-
573
+ require(
574
+ // @dev the remove function returns false if set does not contain value
575
+ _supportedCoreContracts.remove(_contractAddress),
576
+ "Core contract already removed or not in set"
577
+ );
496
578
  emit SupportedCoreContractRemoved(_contractAddress);
497
579
  }
498
580
 
@@ -503,7 +585,7 @@ contract DependencyRegistryV0 is
503
585
  * type (`_dependencyType`).
504
586
  * @param _contractAddress Core contract address.
505
587
  * @param _projectId Project to override script type and version for.
506
- * @param _dependencyType Dependency type to return for project.
588
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
507
589
  */
508
590
  function addProjectDependencyTypeOverride(
509
591
  address _contractAddress,
@@ -553,10 +635,8 @@ contract DependencyRegistryV0 is
553
635
  * execution where there is no gas limit.
554
636
  */
555
637
  function getDependencyTypes() external view returns (string[] memory) {
556
- string[] memory dependencyTypes = new string[](
557
- _dependencyTypes.length()
558
- );
559
638
  uint256 numDependencyTypes = _dependencyTypes.length();
639
+ string[] memory dependencyTypes = new string[](numDependencyTypes);
560
640
 
561
641
  for (uint256 i = 0; i < numDependencyTypes; i++) {
562
642
  dependencyTypes[i] = _dependencyTypes.at(i).toString();
@@ -574,20 +654,56 @@ contract DependencyRegistryV0 is
574
654
 
575
655
  /**
576
656
  * @notice Returns registered depenedency type at index `_index`.
577
- * @return Registered dependency at `_index`.
657
+ * @return Registered dependency at `_index`, relative to the overall length of the dependency type set.
578
658
  */
579
- function getDependencyTypeAtIndex(
659
+ function getDependencyType(
580
660
  uint256 _index
581
661
  ) external view returns (string memory) {
582
- require(_dependencyTypes.length() > _index, "Index out of range");
662
+ _onlyInRangeIndex({_index: _index, _length: _dependencyTypes.length()});
583
663
  return _dependencyTypes.at(_index).toString();
584
664
  }
585
665
 
586
666
  /**
587
- * @notice Returns details for depedency type `_dependencyType`.
588
- * @param _dependencyType Dependency type to be queried.
667
+ * @notice Returns number of registered license types
668
+ * @return Number of registered license types.
669
+ * @dev This is only intended to be called outside of block
670
+ * execution where there is no gas limit.
671
+ */
672
+ function getLicenseTypes() external view returns (string[] memory) {
673
+ uint256 numLicenseTypes = _licenseTypes.length();
674
+ string[] memory licenseTypes = new string[](numLicenseTypes);
675
+
676
+ for (uint256 i = 0; i < numLicenseTypes; i++) {
677
+ licenseTypes[i] = _licenseTypes.at(i).toString();
678
+ }
679
+ return licenseTypes;
680
+ }
681
+
682
+ /**
683
+ * @notice Returns number of registered license types
684
+ * @return Number of registered license types.
685
+ */
686
+ function getLicenseTypeCount() external view returns (uint256) {
687
+ return _licenseTypes.length();
688
+ }
689
+
690
+ /**
691
+ * @notice Returns registered license type at index `_index`.
692
+ * @return Registered license type at `_index`, relative to the overall length of the license type set.
693
+ */
694
+ function getLicenseType(
695
+ uint256 _index
696
+ ) external view returns (string memory) {
697
+ _onlyInRangeIndex({_index: _index, _length: _licenseTypes.length()});
698
+ return _licenseTypes.at(_index).toString();
699
+ }
700
+
701
+ /**
702
+ * @notice Returns details for a given depedency type `_dependencyType`.
703
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
589
704
  * @return typeAndVersion String representation of `_dependencyType`.
590
- * (e.g. "p5js(atSymbol)1.0.0")
705
+ * (e.g. "p5js(atSymbol)1.0.0")
706
+ * @return licenseType License type for dependency
591
707
  * @return preferredCDN Preferred CDN URL for dependency
592
708
  * @return additionalCDNCount Count of additional CDN URLs for dependency
593
709
  * @return preferredRepository Preferred repository URL for dependency
@@ -603,6 +719,7 @@ contract DependencyRegistryV0 is
603
719
  view
604
720
  returns (
605
721
  string memory typeAndVersion,
722
+ string memory licenseType,
606
723
  string memory preferredCDN,
607
724
  uint24 additionalCDNCount,
608
725
  string memory preferredRepository,
@@ -616,6 +733,7 @@ contract DependencyRegistryV0 is
616
733
 
617
734
  return (
618
735
  _dependencyType.toString(),
736
+ dependency.licenseType.toString(),
619
737
  dependency.preferredCDN,
620
738
  dependency.additionalCDNCount,
621
739
  dependency.preferredRepository,
@@ -636,19 +754,31 @@ contract DependencyRegistryV0 is
636
754
 
637
755
  /**
638
756
  * @notice Returns the address of the supported core contract at index `_index`.
639
- * @param _index Index of the core contract to be returned.
757
+ * @param _index Index of the core contract to be returned, relative to the overall
758
+ * list of supported core contracts.
640
759
  * @return address of the core contract.
641
760
  */
642
- function getSupportedCoreContractAtIndex(
761
+ function getSupportedCoreContract(
643
762
  uint256 _index
644
763
  ) external view returns (address) {
645
- require(
646
- _supportedCoreContracts.length() > _index,
647
- "Index out of bounds"
648
- );
764
+ _onlyInRangeIndex({
765
+ _index: _index,
766
+ _length: _supportedCoreContracts.length()
767
+ });
649
768
  return _supportedCoreContracts.at(_index);
650
769
  }
651
770
 
771
+ /**
772
+ * @notice Returns whether the given contract address is a supported core contract.
773
+ * @param coreContractAddress Address of the core contract to be queried.
774
+ * @return True if the given contract address is a supported core contract.
775
+ */
776
+ function isSupportedCoreContract(
777
+ address coreContractAddress
778
+ ) external view returns (bool) {
779
+ return _supportedCoreContracts.contains(coreContractAddress);
780
+ }
781
+
652
782
  /**
653
783
  * @notice Returns a list of supported core contracts.
654
784
  * @return List of supported core contracts.
@@ -674,32 +804,41 @@ contract DependencyRegistryV0 is
674
804
 
675
805
  /**
676
806
  * @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.
807
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
808
+ * @param _index The index of an additional CDN, relative to the overall `additionalCDNCount`.
679
809
  */
680
- function getDependencyAdditionalCDNAtIndex(
810
+ function getDependencyAdditionalCDN(
681
811
  bytes32 _dependencyType,
682
812
  uint256 _index
683
813
  ) external view returns (string memory) {
684
- return dependencyDetails[_dependencyType].additionalCDNs[_index];
814
+ Dependency storage dependency = dependencyDetails[_dependencyType];
815
+ _onlyInRangeIndex({
816
+ _index: _index,
817
+ _length: dependency.additionalCDNCount
818
+ });
819
+ return dependency.additionalCDNs[_index];
685
820
  }
686
821
 
687
822
  /**
688
823
  * @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.
824
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
825
+ * @param _index The index of an additional repository, relative to the overall `additionalRepositoryCount`.
691
826
  */
692
- function getDependencyAdditionalRepositoryAtIndex(
827
+ function getDependencyAdditionalRepository(
693
828
  bytes32 _dependencyType,
694
829
  uint256 _index
695
830
  ) external view returns (string memory) {
696
- return
697
- dependencyDetails[_dependencyType].additionalRepositories[_index];
831
+ Dependency storage dependency = dependencyDetails[_dependencyType];
832
+ _onlyInRangeIndex({
833
+ _index: _index,
834
+ _length: dependency.additionalRepositoryCount
835
+ });
836
+ return dependency.additionalRepositories[_index];
698
837
  }
699
838
 
700
839
  /**
701
840
  * @notice Returns the count of scripts for dependency `_dependencyType`.
702
- * @param _dependencyType Dependency type to be queried.
841
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
703
842
  */
704
843
  function getDependencyScriptCount(
705
844
  bytes32 _dependencyType
@@ -709,32 +848,80 @@ contract DependencyRegistryV0 is
709
848
 
710
849
  /**
711
850
  * @notice Returns address with bytecode containing script for
712
- * dependency `_dependencyTypes` at script index `_index`.
851
+ * dependency `_dependencyTypes` at script index `_index`.
852
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
853
+ * @param _index The index of a given script, relative to the overall `scriptCount`.
854
+ * @return The address of the bytecode storage for the script at the given index, if it can be determined.
713
855
  */
714
- function getDependencyScriptBytecodeAddressAtIndex(
856
+ function getDependencyScriptBytecodeAddress(
715
857
  bytes32 _dependencyType,
716
858
  uint256 _index
717
859
  ) external view returns (address) {
860
+ Dependency storage dependency = dependencyDetails[_dependencyType];
861
+ _onlyInRangeIndex({_index: _index, _length: dependency.scriptCount});
862
+ return dependency.scriptBytecodeAddresses[_index];
863
+ }
864
+
865
+ /**
866
+ * @notice Returns the storage library version for
867
+ * dependency `_dependencyTypes` at script index `_index`.
868
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
869
+ * @param _index The index of a given script, relative to the overall `scriptCount`.
870
+ * @return The storage library version for the script at the given index, if it can be determined.
871
+ * @dev Note that we only expect this to be determinable if the script was written using a version
872
+ * of the Art Blocks `BytecodeStorage` library, and in other cases the fallback will be the
873
+ * unknown version string, as defined by the `BytecodeStorage` UNKNOWN_VERSION_STRING – this
874
+ * is inclusive of the in the case of `SSTORE2` written data blobs, which are an unknown version
875
+ * that can be fallback-read optimistically.
876
+ */
877
+ function getDependencyScriptBytecodeStorageVersion(
878
+ bytes32 _dependencyType,
879
+ uint256 _index
880
+ ) external view returns (bytes32) {
881
+ Dependency storage dependency = dependencyDetails[_dependencyType];
882
+ _onlyInRangeIndex({_index: _index, _length: dependency.scriptCount});
718
883
  return
719
- dependencyDetails[_dependencyType].scriptBytecodeAddresses[_index];
884
+ BytecodeStorageReader.getLibraryVersionForBytecode(
885
+ dependencyDetails[_dependencyType].scriptBytecodeAddresses[
886
+ _index
887
+ ]
888
+ );
720
889
  }
721
890
 
722
891
  /**
723
892
  * @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(
893
+ * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
894
+ * @param _index The index of a given script, relative to the overall `scriptCount`.
895
+ * @return A string containing the script content at the given script chunk index for a given dependency.
896
+ * @dev This method attempts to introspectively determine which library version of
897
+ * `BytecodeStorage` was used to write the stored script string that is being
898
+ * read back, in order to use the proper read approach. If the version is
899
+ * non-determinate, a fall-back to reading using the assumption that the bytes
900
+ * were written with `SSTORE2` is used.
901
+ * Also note that in this `SSTORE2` fallback handling, the approach of casting bytes to string
902
+ * can cause failure (e.g. unexpected continuation byte).
903
+ */
904
+ function getDependencyScript(
728
905
  bytes32 _dependencyType,
729
906
  uint256 _index
730
907
  ) external view returns (string memory) {
731
908
  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 "";
909
+ _onlyInRangeIndex({_index: _index, _length: dependency.scriptCount});
910
+
911
+ address scriptAddress = dependency.scriptBytecodeAddresses[_index];
912
+ bytes32 storageVersion = BytecodeStorageReader
913
+ .getLibraryVersionForBytecode(scriptAddress);
914
+
915
+ if (storageVersion == BytecodeStorageReader.UNKNOWN_VERSION_STRING) {
916
+ return
917
+ string(
918
+ BytecodeStorageReader.readBytesFromSSTORE2Bytecode(
919
+ scriptAddress
920
+ )
921
+ );
922
+ } else {
923
+ return BytecodeStorageReader.readFromBytecode(scriptAddress);
735
924
  }
736
-
737
- return _readFromBytecode(dependency.scriptBytecodeAddresses[_index]);
738
925
  }
739
926
 
740
927
  /**
@@ -745,7 +932,7 @@ contract DependencyRegistryV0 is
745
932
  * an override set, this will revert.
746
933
  * @param _contractAddress Core contract address.
747
934
  * @param _projectId Project to return dependency type for.
748
- * @return dependencyType Dependency type used by project.
935
+ * @return dependencyType Identifier for the dependency (i.e. "type@version") used by project.
749
936
  */
750
937
  function getDependencyTypeForProject(
751
938
  address _contractAddress,
@@ -828,14 +1015,4 @@ contract DependencyRegistryV0 is
828
1015
  OwnableUpgradeable._transferOwnership(newOwner);
829
1016
  adminACLContract = IAdminACLV0(newOwner);
830
1017
  }
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
1018
  }