@artblocks/contracts 1.0.4 → 1.2.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 (289) hide show
  1. package/README.md +75 -7
  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 +336 -131
  5. package/artifacts/contracts/archive/GenArt721CoreV3.sol/GenArt721CoreV3.json +2047 -0
  6. package/artifacts/contracts/archive/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +2021 -0
  7. package/artifacts/contracts/{minter-suite → archive/minter-suite}/Minters/MinterBase_v0_1_1.sol/MinterBase.json +1 -1
  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/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExp}/MinterDAExpV4.sol/MinterDAExpV4.json +3 -3
  11. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  12. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  13. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +1109 -0
  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/{minter-suite/Minters → archive/minter-suite/Minters/MinterDALin}/MinterDALinV4.sol/MinterDALinV4.json +3 -3
  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/{minter-suite/Minters → archive/minter-suite/Minters/MinterHolder}/MinterHolderV4.sol/MinterHolderV4.json +3 -3
  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/{minter-suite/Minters → archive/minter-suite/Minters/MinterMerkle}/MinterMerkleV5.sol/MinterMerkleV5.json +3 -3
  26. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +31 -63
  27. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol/MinterPolyptychV0.json +3 -3
  28. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSEA}/MinterSEAV0.sol/MinterSEAV0.json +3 -3
  29. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  30. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  31. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPrice}/MinterSetPriceV4.sol/MinterSetPriceV4.json +3 -3
  32. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol/MinterSetPriceERC20V0.json +65 -2
  33. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol/MinterSetPriceERC20V1.json +65 -2
  34. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  35. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  36. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +807 -0
  37. package/artifacts/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol/GenArt721MinterBurner_PBAB.json +65 -2
  38. package/artifacts/contracts/engine/V2/GenArt721Minter_PBAB.sol/GenArt721Minter_PBAB.json +65 -2
  39. package/artifacts/contracts/engine/V3/EngineFactoryV0.sol/EngineFactoryV0.json +606 -0
  40. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +565 -209
  41. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +785 -227
  42. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +40 -15
  43. package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +2 -2
  44. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +40 -15
  45. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +36 -68
  46. package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +12 -12
  47. package/artifacts/contracts/interfaces/v0.8.x/IAdminACLV0_Extended.sol/IAdminACLV0_Extended.json +140 -0
  48. package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol/IBytecodeStorageReaderV2.json +130 -0
  49. package/artifacts/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol/ICoreRegistryV1.json +6 -6
  50. package/artifacts/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +71 -39
  51. package/artifacts/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol/IEngineFactoryV0.json +283 -0
  52. package/artifacts/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV0.sol/IFilteredMinterDAExpSettlementV0.json +12 -12
  53. package/artifacts/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV1.sol/IFilteredMinterDAExpSettlementV1.json +12 -12
  54. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +30 -62
  55. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +30 -62
  56. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +170 -104
  57. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +170 -104
  58. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.json +1028 -0
  59. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol/IGenArt721CoreContractV3_Engine_PreV3p2.json +741 -0
  60. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_ProjectFinance.sol/IGenArt721CoreContractV3_ProjectFinance.json +87 -0
  61. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721Minter_PBAB.sol/IGenArt721Minter_PBAB.json +279 -0
  62. package/artifacts/contracts/interfaces/v0.8.x/IMinterFilterV1.sol/IMinterFilterV1.json +22 -22
  63. package/artifacts/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol/IPseudorandomAtomic.json +1 -1
  64. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol/ISharedMinterDAExpSettlementV0.json +26 -101
  65. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol/ISharedMinterDAExpV0.json +1 -57
  66. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol/ISharedMinterDALinV0.json +1 -57
  67. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol/ISharedMinterDAV0.json +2 -21
  68. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol/ISharedMinterHolderERC20V0.json +158 -0
  69. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol/ISharedMinterHolderV0.json +15 -90
  70. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol/ISharedMinterMerkleV0.json +10 -36
  71. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterRAMV0.sol/ISharedMinterRAMV0.json +62 -0
  72. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterRequired.sol/ISharedMinterRequired.json +37 -0
  73. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol/ISharedMinterSEAV0.json +4 -236
  74. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol/ISharedMinterSimplePurchaseV0.json +5 -5
  75. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterV0.sol/ISharedMinterV0.json +7 -423
  76. package/artifacts/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol/ISharedRandomizerV0.json +17 -17
  77. package/artifacts/contracts/interfaces/v0.8.x/ISplitAtomicFactoryV0.sol/ISplitAtomicFactoryV0.json +170 -0
  78. package/artifacts/contracts/interfaces/v0.8.x/ISplitAtomicV0.sol/ISplitAtomicV0.json +126 -0
  79. package/artifacts/contracts/interfaces/v0.8.x/ISplitProviderV0.sol/ISplitProviderV0.json +98 -0
  80. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/splits-0x-v2/ISplitFactoryV2.sol/ISplitFactoryV2.json +123 -0
  81. package/artifacts/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol/DelegationRegistry.json +2 -2
  82. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeMock.sol/GnosisSafeMock.json +2 -2
  83. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeProxyFactoryMock.sol/GnosisSafeProxyFactoryMock.json +2 -2
  84. package/artifacts/contracts/libs/integration-refs/gnosis-safe/MultiSendMock.sol/MultiSendMock.json +2 -2
  85. package/artifacts/contracts/libs/integration-refs/weth9/weth9.sol/WETH9_.json +2 -2
  86. package/artifacts/contracts/libs/v0.8.x/ABHelpers.sol/ABHelpers.json +2 -2
  87. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +2 -2
  88. package/artifacts/contracts/libs/v0.8.x/BitMap.sol/BitMaps256.json +10 -0
  89. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV0.sol/BytecodeStorage.json +2 -2
  90. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageReader.json +2 -2
  91. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageWriter.json +2 -2
  92. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageReader.json +214 -0
  93. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageWriter.json +10 -0
  94. package/artifacts/contracts/libs/v0.8.x/Bytes32Strings.sol/Bytes32Strings.json +2 -2
  95. package/artifacts/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol/DependencyRegistryStorageLib.json +10 -0
  96. package/artifacts/contracts/libs/v0.8.x/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +2 -2
  97. package/artifacts/contracts/libs/v0.8.x/ERC721_PackedHashSeedV1.sol/ERC721_PackedHashSeedV1.json +444 -0
  98. package/artifacts/contracts/libs/v0.8.x/PackedBools.sol/PackedBools.json +10 -0
  99. package/artifacts/contracts/libs/v0.8.x/SSTORE2.sol/SSTORE2.json +2 -2
  100. package/artifacts/contracts/libs/v0.8.x/V3FlexLib.sol/V3FlexLib.json +208 -0
  101. package/artifacts/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol/DAExpLib.json +60 -3
  102. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALib.sol/DALib.json +30 -0
  103. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +60 -3
  104. package/artifacts/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol/GenericMinterEventsLib.json +346 -0
  105. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +29 -3
  106. package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +30 -3
  107. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +2 -2
  108. package/artifacts/contracts/libs/v0.8.x/minter-libs/RAMLib.sol/RAMLib.json +398 -0
  109. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +254 -3
  110. package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +48 -3
  111. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +41 -3
  112. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +35 -3
  113. package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +79 -3
  114. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  115. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +41 -41
  116. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +66 -632
  117. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +67 -594
  118. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +33 -524
  119. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +66 -632
  120. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +33 -524
  121. package/artifacts/contracts/minter-suite/Minters/MinterRAMV0.sol/MinterRAMV0.json +1374 -0
  122. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +56 -722
  123. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +58 -454
  124. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +61 -552
  125. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +55 -497
  126. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +110 -571
  127. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +69 -560
  128. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +28 -444
  129. package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol/MinterSetPriceV5_SingleCore.json +417 -0
  130. package/artifacts/contracts/mock/BytecodeV2LibCallsMock.sol/BytecodeV2LibCallsMock.json +154 -0
  131. package/artifacts/contracts/mock/BytecodeV2TextCR_DMock.sol/BytecodeV2TextCR_DMock.json +428 -0
  132. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
  133. package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +2 -2
  134. package/artifacts/contracts/mock/ForceSendMock.sol/ForceSendMock.json +24 -0
  135. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +4 -9
  136. package/artifacts/contracts/mock/Mock0xSplitsV2PullFactory.sol/Mock0xSplitsV2PullFactory.json +149 -0
  137. package/artifacts/contracts/mock/Mock0xSplitsV2Splitter.sol/Mock0xSplitsV2Splitter.json +99 -0
  138. package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +20 -2
  139. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +20 -2
  140. package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +2 -2
  141. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  142. package/artifacts/contracts/mock/ReentrancyGenArt721MinterMock.sol/ReentrancyGenArt721MinterMock.json +100 -0
  143. package/artifacts/contracts/mock/ReentrancyHolderMock.sol/ReentrancyHolderMock.json +2 -2
  144. package/artifacts/contracts/mock/ReentrancyHolderMockShared.sol/ReentrancyHolderMockShared.json +136 -0
  145. package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
  146. package/artifacts/contracts/mock/ReentrancyMerkleMockShared.sol/ReentrancyMerkleMockShared.json +105 -0
  147. package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
  148. package/artifacts/contracts/mock/ReentrancyMockShared.sol/ReentrancyMockShared.json +100 -0
  149. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +2 -2
  150. package/artifacts/contracts/mock/ReentrancySEAMockShared.sol/ReentrancySEAAutoBidderMockShared.json +69 -0
  151. package/artifacts/contracts/mock/ReentrancySplitterMocks.sol/ReentrancySplitterDrainETHMock.json +54 -0
  152. package/artifacts/contracts/mock/ReentrancySplitterMocks.sol/ReentrancySplitterSendETHMock.json +54 -0
  153. package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +2 -2
  154. package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +2 -2
  155. package/artifacts/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol/PseudorandomAtomic.json +2 -2
  156. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +19 -19
  157. package/artifacts/contracts/split/SplitAtomicFactoryV0.sol/SplitAtomicFactoryV0.json +203 -0
  158. package/artifacts/contracts/split/SplitAtomicV0.sol/SplitAtomicV0.json +168 -0
  159. package/artifacts/contracts/split/split-provider/SplitProviderV0.sol/SplitProviderV0.json +141 -0
  160. package/contracts/AdminACLV0.sol +6 -2
  161. package/contracts/AdminACLV1.sol +2 -2
  162. package/contracts/DependencyRegistryV0.sol +737 -390
  163. package/contracts/{GenArt721CoreV3.sol → archive/GenArt721CoreV3.sol} +56 -20
  164. package/contracts/{explorations → archive}/GenArt721CoreV3_Explorations.sol +49 -13
  165. package/contracts/{minter-suite → archive/minter-suite}/Minters/MinterBase_v0_1_1.sol +4 -4
  166. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExp}/MinterDAExpV4.sol +4 -4
  167. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +4 -4
  168. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol +5 -5
  169. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExpSettlement}/MinterDAExpSettlementV2.sol +9 -62
  170. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDALin}/MinterDALinV4.sol +4 -4
  171. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterHolder}/MinterHolderV4.sol +5 -5
  172. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterMerkle}/MinterMerkleV5.sol +5 -5
  173. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol +7 -7
  174. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSEA}/MinterSEAV0.sol +13 -13
  175. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPrice}/MinterSetPriceV4.sol +4 -4
  176. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol +82 -10
  177. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol +82 -10
  178. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPriceERC20}/MinterSetPriceERC20V4.sol +88 -21
  179. package/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol +81 -22
  180. package/contracts/engine/V2/GenArt721Minter_PBAB.sol +80 -22
  181. package/contracts/engine/V3/EngineFactoryV0.sol +419 -0
  182. package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +893 -493
  183. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +1053 -655
  184. package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +7 -13
  185. package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +5 -11
  186. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +2 -2
  187. package/contracts/engine-registry/CoreRegistryV1.sol +58 -65
  188. package/contracts/interfaces/v0.8.x/IAdminACLV0_Extended.sol +20 -0
  189. package/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol +23 -0
  190. package/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol +6 -8
  191. package/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol +48 -43
  192. package/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol +124 -0
  193. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV0.sol +1 -3
  194. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV1.sol +1 -3
  195. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpV1.sol +1 -3
  196. package/contracts/interfaces/v0.8.x/IFilteredMinterDALinV1.sol +1 -3
  197. package/contracts/interfaces/v0.8.x/IFilteredMinterHolderV2.sol +1 -3
  198. package/contracts/interfaces/v0.8.x/IFilteredMinterMerkleV2.sol +1 -3
  199. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol +115 -11
  200. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol +84 -8
  201. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol +26 -8
  202. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol +141 -0
  203. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol +78 -0
  204. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_ProjectFinance.sol +47 -0
  205. package/contracts/interfaces/v0.8.x/IGenArt721Minter_PBAB.sol +91 -0
  206. package/contracts/interfaces/v0.8.x/IMinterFilterV1.sol +25 -25
  207. package/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol +1 -3
  208. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +30 -20
  209. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol +1 -14
  210. package/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol +1 -15
  211. package/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol +2 -8
  212. package/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol +47 -0
  213. package/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol +15 -43
  214. package/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol +10 -20
  215. package/contracts/interfaces/v0.8.x/ISharedMinterRAMV0.sol +23 -0
  216. package/contracts/interfaces/v0.8.x/ISharedMinterRequired.sol +20 -0
  217. package/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol +1 -67
  218. package/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol +5 -5
  219. package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +18 -160
  220. package/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol +37 -37
  221. package/contracts/interfaces/v0.8.x/ISplitAtomicFactoryV0.sol +81 -0
  222. package/contracts/interfaces/v0.8.x/ISplitAtomicV0.sol +72 -0
  223. package/contracts/interfaces/v0.8.x/ISplitProviderV0.sol +49 -0
  224. package/contracts/interfaces/v0.8.x/integration-refs/splits-0x-v2/ISplitFactoryV2.sol +62 -0
  225. package/contracts/libs/v0.8.x/ABHelpers.sol +31 -17
  226. package/contracts/libs/v0.8.x/AuthLib.sol +101 -102
  227. package/contracts/libs/v0.8.x/BitMap.sol +112 -0
  228. package/contracts/libs/v0.8.x/BytecodeStorageV2.sol +593 -0
  229. package/contracts/libs/v0.8.x/Bytes32Strings.sol +5 -5
  230. package/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol +90 -0
  231. package/contracts/libs/v0.8.x/ERC721_PackedHashSeedV1.sol +591 -0
  232. package/contracts/libs/v0.8.x/PackedBools.sol +42 -0
  233. package/contracts/libs/v0.8.x/V3FlexLib.sol +591 -0
  234. package/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol +162 -39
  235. package/contracts/libs/v0.8.x/minter-libs/DALib.sol +26 -0
  236. package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +139 -37
  237. package/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol +171 -0
  238. package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +299 -158
  239. package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +268 -55
  240. package/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol +138 -58
  241. package/contracts/libs/v0.8.x/minter-libs/RAMLib.sol +2927 -0
  242. package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +796 -123
  243. package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +131 -13
  244. package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +607 -224
  245. package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +494 -330
  246. package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +217 -78
  247. package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +358 -309
  248. package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +391 -491
  249. package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +396 -632
  250. package/contracts/minter-suite/Minters/MinterDAExpV5.sol +212 -273
  251. package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +393 -488
  252. package/contracts/minter-suite/Minters/MinterDALinV5.sol +220 -277
  253. package/contracts/minter-suite/Minters/MinterRAMV0.sol +1205 -0
  254. package/contracts/minter-suite/Minters/MinterSEAV1.sol +329 -677
  255. package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +287 -303
  256. package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +355 -446
  257. package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +328 -416
  258. package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +552 -622
  259. package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +429 -553
  260. package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +180 -227
  261. package/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol +446 -0
  262. package/contracts/mock/BytecodeV2LibCallsMock.sol +128 -0
  263. package/contracts/mock/BytecodeV2TextCR_DMock.sol +316 -0
  264. package/contracts/mock/ForceSendMock.sol +22 -0
  265. package/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol +3 -10
  266. package/contracts/mock/Mock0xSplitsV2PullFactory.sol +75 -0
  267. package/contracts/mock/Mock0xSplitsV2Splitter.sol +47 -0
  268. package/contracts/mock/MockAdminACLV0.sol +21 -0
  269. package/contracts/mock/MockAdminACLV0_PROHIBITION.sol +21 -0
  270. package/contracts/mock/ReentrancyGenArt721MinterMock.sol +47 -0
  271. package/contracts/mock/ReentrancyHolderMockShared.sol +59 -0
  272. package/contracts/mock/ReentrancyMerkleMockShared.sol +58 -0
  273. package/contracts/mock/ReentrancyMockShared.sol +48 -0
  274. package/contracts/mock/ReentrancySEAMockShared.sol +40 -0
  275. package/contracts/mock/ReentrancySplitterMocks.sol +67 -0
  276. package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +1 -1
  277. package/contracts/randomizer/shared/SharedRandomizerV0.sol +79 -71
  278. package/contracts/split/SplitAtomicFactoryV0.sol +121 -0
  279. package/contracts/split/SplitAtomicV0.sol +265 -0
  280. package/contracts/split/split-provider/SplitProviderV0.sol +201 -0
  281. package/package.json +79 -45
  282. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +0 -1965
  283. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +0 -1939
  284. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +0 -1127
  285. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +0 -768
  286. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +0 -208
  287. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol/GenArt721RoyaltyOverride_PBAB.json +0 -301
  288. package/contracts/royalty-registry/GenArt721RoyaltyOverride.sol +0 -168
  289. package/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol +0 -221
@@ -13,6 +13,7 @@ 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/v0.8.x/DependencyRegistryStorageLib.sol";
16
17
  import "./libs/v0.8.x/BytecodeStorageV1.sol";
17
18
  import "./libs/v0.8.x/Bytes32Strings.sol";
18
19
 
@@ -21,9 +22,9 @@ import "./libs/v0.8.x/Bytes32Strings.sol";
21
22
  * @author Art Blocks Inc.
22
23
  * @notice Privileged Roles and Ownership:
23
24
  * Permissions managed by ACL contract. If/when we ever call
24
- * renounceOwnership() this will becom a frozen, immutable registry
25
+ * renounceOwnership() this will become a frozen, immutable registry
25
26
  * as no upgrades will be possible.
26
- * This contract This contract is intended to be an auxiliary reference registry
27
+ * This contract is intended to be an auxiliary reference registry
27
28
  * to our non-upgradeable and immutable ERC-721 conforming core contracts,
28
29
  * and has been made upgradeable as we expect its required functionality in
29
30
  * relation to the Art Blocks ecosystem to evolve over time.
@@ -42,125 +43,152 @@ contract DependencyRegistryV0 is
42
43
 
43
44
  uint8 constant AT_CHARACTER_CODE = uint8(bytes1("@")); // 0x40
44
45
 
45
- /// admin ACL contract
46
- IAdminACLV0 public adminACLContract;
47
-
48
- struct Dependency {
49
- string preferredCDN;
50
- // mapping from additional CDN index to CDN URLr
51
- mapping(uint256 => string) additionalCDNs;
52
- string preferredRepository;
53
- // mapping from additional repository index to repository URL
54
- mapping(uint256 => string) additionalRepositories;
55
- string referenceWebsite;
56
- // mapping from script index to address storing script in bytecode
57
- mapping(uint256 => address) scriptBytecodeAddresses;
58
- uint24 additionalCDNCount;
59
- uint24 additionalRepositoryCount;
60
- uint24 scriptCount;
61
- }
62
-
63
- EnumerableSet.Bytes32Set private _dependencyTypes;
64
- mapping(bytes32 => Dependency) dependencyDetails;
65
-
66
- EnumerableSet.AddressSet private _supportedCoreContracts;
67
- mapping(address => mapping(uint256 => bytes32)) projectDependencyTypeOverrides;
68
-
69
- function _onlyNonZeroAddress(address _address) internal pure {
70
- require(_address != address(0), "Must input non-zero address");
46
+ function _onlyNonZeroAddress(address address_) internal pure {
47
+ require(address_ != address(0), "Must input non-zero address");
71
48
  }
72
49
 
73
- function _onlyNonEmptyString(string memory _string) internal pure {
74
- require(bytes(_string).length != 0, "Must input non-empty string");
50
+ function _onlyNonEmptyString(string memory string_) internal pure {
51
+ require(bytes(string_).length != 0, "Must input non-empty string");
75
52
  }
76
53
 
77
- function _onlyAdminACL(bytes4 _selector) internal {
54
+ function _onlyAdminACL(bytes4 selector) internal {
78
55
  require(
79
- adminACLAllowed(msg.sender, address(this), _selector),
56
+ adminACLAllowed({
57
+ sender: msg.sender,
58
+ contract_: address(this),
59
+ selector: selector
60
+ }),
80
61
  "Only Admin ACL allowed"
81
62
  );
82
63
  }
83
64
 
84
65
  function _onlySupportedCoreContract(
85
- address _coreContractAddress
66
+ address coreContractAddress
86
67
  ) internal view {
87
68
  require(
88
- _supportedCoreContracts.contains(_coreContractAddress),
69
+ DependencyRegistryStorageLib.s().supportedCoreContracts.contains(
70
+ coreContractAddress
71
+ ),
89
72
  "Core contract not supported"
90
73
  );
91
74
  }
92
75
 
93
- function _onlyExistingDependencyType(
94
- bytes32 _dependencyType
76
+ function _onlyExistingDependency(
77
+ bytes32 dependencyNameAndVersion
95
78
  ) internal view {
96
79
  require(
97
- _dependencyTypes.contains(_dependencyType),
98
- "Dependency type does not exist"
80
+ DependencyRegistryStorageLib.s().dependencyNameVersionIds.contains(
81
+ dependencyNameAndVersion
82
+ ),
83
+ "Dependency does not exist"
99
84
  );
100
85
  }
101
86
 
102
- function _onlyInRangeIndex(uint256 _index, uint256 _length) internal pure {
103
- require(_index < _length, "Index out of range");
87
+ function _onlyInRangeIndex(uint256 index, uint256 length) internal pure {
88
+ require(index < length, "Index out of range");
89
+ }
90
+
91
+ function _onlyExistingLicenseType(bytes32 licenseType) internal view {
92
+ require(
93
+ DependencyRegistryStorageLib.s().licenseTypes.contains(licenseType),
94
+ "License type does not exist"
95
+ );
104
96
  }
105
97
 
106
98
  /**
107
99
  * @notice Initializes contract.
108
- * @param _adminACLContract Address of admin access control contract, to be
100
+ * @param adminACLContract_ Address of admin access control contract, to be
109
101
  * set as contract owner.
110
102
  */
111
- function initialize(address _adminACLContract) public initializer {
103
+ function initialize(address adminACLContract_) public initializer {
112
104
  __Ownable_init();
105
+
113
106
  // set AdminACL management contract as owner
114
- _transferOwnership(_adminACLContract);
107
+ _transferOwnership(adminACLContract_);
108
+ }
109
+
110
+ /**
111
+ * @notice Adds a new license type that can be used by dependencies.
112
+ * @param licenseType License type to be added.
113
+ */
114
+ function addLicenseType(bytes32 licenseType) external {
115
+ _onlyAdminACL(this.addLicenseType.selector);
116
+ require(
117
+ licenseType != bytes32(""),
118
+ "License type cannot be empty string"
119
+ );
120
+
121
+ // @dev the add function returns false if set already contains value
122
+ require(
123
+ DependencyRegistryStorageLib.s().licenseTypes.add(licenseType),
124
+ "License type already exists"
125
+ );
126
+ emit LicenseTypeAdded(licenseType);
115
127
  }
116
128
 
117
129
  /**
118
130
  * @notice Adds a new dependency.
119
- * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
120
- * @param _preferredCDN Preferred CDN for dependency.
121
- * @param _preferredRepository Preferred repository for dependency.
131
+ * @param dependencyNameAndVersion A unique identifier for the dependency, composed of its name and version in the format "name@version".
132
+ * @param licenseType License type for dependency, must be a registered license type.
133
+ * @param preferredCDN Preferred CDN for dependency.
134
+ * @param preferredRepository Preferred repository for dependency.
122
135
  */
123
136
  function addDependency(
124
- bytes32 _dependencyType,
125
- string memory _preferredCDN,
126
- string memory _preferredRepository,
127
- string memory _referenceWebsite
137
+ bytes32 dependencyNameAndVersion,
138
+ bytes32 licenseType,
139
+ string memory preferredCDN,
140
+ string memory preferredRepository,
141
+ string memory dependencyWebsite
128
142
  ) external {
129
143
  _onlyAdminACL(this.addDependency.selector);
144
+ _onlyExistingLicenseType(licenseType);
130
145
  require(
131
- !_dependencyTypes.contains(_dependencyType),
132
- "Dependency type already exists"
133
- );
134
- require(
135
- _dependencyType.containsExactCharacterQty(
146
+ dependencyNameAndVersion.containsExactCharacterQty(
136
147
  AT_CHARACTER_CODE,
137
148
  uint8(1)
138
149
  ),
139
150
  "must contain exactly one @"
140
151
  );
141
152
 
142
- _dependencyTypes.add(_dependencyType);
143
- Dependency storage dependency = dependencyDetails[_dependencyType];
144
- dependency.preferredCDN = _preferredCDN;
145
- dependency.preferredRepository = _preferredRepository;
146
- dependency.referenceWebsite = _referenceWebsite;
153
+ DependencyRegistryStorageLib.Storage
154
+ storage ds = DependencyRegistryStorageLib.s();
155
+
156
+ require(
157
+ // @dev the add function returns false if set already contains value
158
+ ds.dependencyNameVersionIds.add(dependencyNameAndVersion),
159
+ "Dependency already exists"
160
+ );
161
+
162
+ DependencyRegistryStorageLib.Dependency storage dependency = ds
163
+ .dependencyRecords[dependencyNameAndVersion];
164
+ dependency.licenseType = licenseType;
165
+ dependency.preferredCDN = preferredCDN;
166
+ dependency.preferredRepository = preferredRepository;
167
+ dependency.website = dependencyWebsite;
147
168
 
148
169
  emit DependencyAdded(
149
- _dependencyType,
150
- _preferredCDN,
151
- _preferredRepository,
152
- _referenceWebsite
170
+ dependencyNameAndVersion,
171
+ licenseType,
172
+ preferredCDN,
173
+ preferredRepository,
174
+ dependencyWebsite
153
175
  );
154
176
  }
155
177
 
156
178
  /**
157
179
  * @notice Removes a dependency.
158
- * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
180
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
159
181
  */
160
- function removeDependency(bytes32 _dependencyType) external {
182
+ function removeDependency(bytes32 dependencyNameAndVersion) external {
161
183
  _onlyAdminACL(this.removeDependency.selector);
162
- _onlyExistingDependencyType(_dependencyType);
163
- Dependency storage dependency = dependencyDetails[_dependencyType];
184
+ _onlyExistingDependency(dependencyNameAndVersion);
185
+
186
+ DependencyRegistryStorageLib.Storage
187
+ storage ds = DependencyRegistryStorageLib.s();
188
+
189
+ DependencyRegistryStorageLib.Dependency storage dependency = ds
190
+ .dependencyRecords[dependencyNameAndVersion];
191
+
164
192
  require(
165
193
  dependency.additionalCDNCount == 0 &&
166
194
  dependency.additionalRepositoryCount == 0 &&
@@ -168,115 +196,139 @@ contract DependencyRegistryV0 is
168
196
  "Cannot remove dependency with additional CDNs, repositories, or scripts"
169
197
  );
170
198
 
171
- _dependencyTypes.remove(_dependencyType);
172
- delete dependencyDetails[_dependencyType];
199
+ ds.dependencyNameVersionIds.remove(dependencyNameAndVersion);
200
+ // @dev all of the arrays in the dependency struct are required to be empty
201
+ // before this function can be called, so we don't need to delete them here
202
+ delete ds.dependencyRecords[dependencyNameAndVersion];
173
203
 
174
- emit DependencyRemoved(_dependencyType);
204
+ emit DependencyRemoved(dependencyNameAndVersion);
175
205
  }
176
206
 
177
207
  /**
178
- * @notice Adds a script to dependency `_dependencyType`, by way of
208
+ * @notice Adds a script to dependency `dependencyNameAndVersion`, by way of
179
209
  * providing a string to write to bytecode storage.
180
- * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
181
- * @param _script Script to be added. Required to be a non-empty string,
210
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
211
+ * @param script Script to be added. Required to be a non-empty string,
182
212
  * but no further validation is performed.
183
213
  */
184
214
  function addDependencyScript(
185
- bytes32 _dependencyType,
186
- string memory _script
215
+ bytes32 dependencyNameAndVersion,
216
+ string memory script
187
217
  ) external {
188
218
  _onlyAdminACL(this.addDependencyScript.selector);
189
- _onlyNonEmptyString(_script);
190
- _onlyExistingDependencyType(_dependencyType);
191
- Dependency storage dependency = dependencyDetails[_dependencyType];
219
+ _onlyNonEmptyString(script);
220
+ _onlyExistingDependency(dependencyNameAndVersion);
221
+
222
+ DependencyRegistryStorageLib.Dependency
223
+ storage dependency = DependencyRegistryStorageLib
224
+ .s()
225
+ .dependencyRecords[dependencyNameAndVersion];
192
226
  // store script in contract bytecode
193
- dependency.scriptBytecodeAddresses[dependency.scriptCount] = _script
227
+ dependency.scriptBytecodeAddresses[dependency.scriptCount] = script
194
228
  .writeToBytecode();
195
229
  dependency.scriptCount = dependency.scriptCount + 1;
196
230
 
197
- emit DependencyScriptUpdated(_dependencyType);
231
+ emit DependencyScriptUpdated(dependencyNameAndVersion);
198
232
  }
199
233
 
200
234
  /**
201
- * @notice Updates script for dependencyType `_dependencyType` at script `_index`,
235
+ * @notice Updates script for dependencyType `dependencyNameAndVersion` at script `index`,
202
236
  * 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`.
205
- * @param _script The updated script value. Required to be a non-empty
237
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
238
+ * @param index The index of a given script, relative to the overall `scriptCount`.
239
+ * @param script The updated script value. Required to be a non-empty
206
240
  * string, but no further validation is performed.
207
241
  */
208
242
  function updateDependencyScript(
209
- bytes32 _dependencyType,
210
- uint256 _index,
211
- string memory _script
243
+ bytes32 dependencyNameAndVersion,
244
+ uint256 index,
245
+ string memory script
212
246
  ) external {
213
247
  _onlyAdminACL(this.updateDependencyScript.selector);
214
- _onlyNonEmptyString(_script);
215
- _onlyExistingDependencyType(_dependencyType);
216
- Dependency storage dependency = dependencyDetails[_dependencyType];
217
- _onlyInRangeIndex({_index: _index, _length: dependency.scriptCount});
248
+ _onlyNonEmptyString(script);
249
+ _onlyExistingDependency(dependencyNameAndVersion);
250
+
251
+ DependencyRegistryStorageLib.Dependency
252
+ storage dependency = DependencyRegistryStorageLib
253
+ .s()
254
+ .dependencyRecords[dependencyNameAndVersion];
255
+ _onlyInRangeIndex({index: index, length: dependency.scriptCount});
218
256
  // store script in contract bytecode, replacing reference address from
219
257
  // the contract that no longer exists with the newly created one
220
- dependency.scriptBytecodeAddresses[_index] = _script.writeToBytecode();
258
+ dependency.scriptBytecodeAddresses[index] = script.writeToBytecode();
221
259
 
222
- emit DependencyScriptUpdated(_dependencyType);
260
+ emit DependencyScriptUpdated(dependencyNameAndVersion);
223
261
  }
224
262
 
225
263
  /**
226
- * @notice Adds a script to dependency `_dependencyType`, by way of
264
+ * @notice Adds a script to dependency `dependencyNameAndVersion`, by way of
227
265
  * 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,
266
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
267
+ * @param scriptPointer Address of script to be added. Required to be a non-zero address,
230
268
  * but no further validation is performed.
231
269
  */
232
270
  function addDependencyScriptPointer(
233
- bytes32 _dependencyType,
234
- address _scriptPointer
271
+ bytes32 dependencyNameAndVersion,
272
+ address scriptPointer
235
273
  ) external {
236
274
  _onlyAdminACL(this.addDependencyScriptPointer.selector);
237
- _onlyNonZeroAddress(_scriptPointer);
238
- _onlyExistingDependencyType(_dependencyType);
239
- Dependency storage dependency = dependencyDetails[_dependencyType];
275
+ _onlyNonZeroAddress(scriptPointer);
276
+ _onlyExistingDependency(dependencyNameAndVersion);
277
+
278
+ DependencyRegistryStorageLib.Dependency
279
+ storage dependency = DependencyRegistryStorageLib
280
+ .s()
281
+ .dependencyRecords[dependencyNameAndVersion];
240
282
  // store script in contract bytecode
241
283
  dependency.scriptBytecodeAddresses[
242
284
  dependency.scriptCount
243
- ] = _scriptPointer;
285
+ ] = scriptPointer;
244
286
  dependency.scriptCount = dependency.scriptCount + 1;
245
287
 
246
- emit DependencyScriptUpdated(_dependencyType);
288
+ emit DependencyScriptUpdated(dependencyNameAndVersion);
247
289
  }
248
290
 
249
291
  /**
250
- * @notice Updates script for dependencyType `_dependencyType` at script `_index`,
292
+ * @notice Updates script for dependency id `dependencyNameAndVersion` at script `index`,
251
293
  * 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).
294
+ * @param dependencyNameAndVersion Name of dependency (i.e. "name@version") used to identify dependency.
295
+ * @param index The index of a given script, relative to the overall `scriptCount`.
296
+ * @param scriptPointer The updated script pointer (address of bytecode storage).
255
297
  * Required to be a non-zero address, but no further validation is performed.
256
298
  */
257
299
  function updateDependencyScriptPointer(
258
- bytes32 _dependencyType,
259
- uint256 _index,
260
- address _scriptPointer
300
+ bytes32 dependencyNameAndVersion,
301
+ uint256 index,
302
+ address scriptPointer
261
303
  ) external {
262
304
  _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;
305
+ _onlyNonZeroAddress(scriptPointer);
306
+ _onlyExistingDependency(dependencyNameAndVersion);
268
307
 
269
- emit DependencyScriptUpdated(_dependencyType);
308
+ DependencyRegistryStorageLib.Dependency
309
+ storage dependency = DependencyRegistryStorageLib
310
+ .s()
311
+ .dependencyRecords[dependencyNameAndVersion];
312
+ _onlyInRangeIndex({index: index, length: dependency.scriptCount});
313
+ dependency.scriptBytecodeAddresses[index] = scriptPointer;
314
+
315
+ emit DependencyScriptUpdated(dependencyNameAndVersion);
270
316
  }
271
317
 
272
318
  /**
273
- * @notice Removes last script from dependency `_dependencyType`.
274
- * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
319
+ * @notice Removes last script from dependency `dependencyNameAndVersion`.
320
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
275
321
  */
276
- function removeDependencyLastScript(bytes32 _dependencyType) external {
322
+ function removeDependencyLastScript(
323
+ bytes32 dependencyNameAndVersion
324
+ ) external {
277
325
  _onlyAdminACL(this.removeDependencyLastScript.selector);
278
- _onlyExistingDependencyType(_dependencyType);
279
- Dependency storage dependency = dependencyDetails[_dependencyType];
326
+ _onlyExistingDependency(dependencyNameAndVersion);
327
+
328
+ DependencyRegistryStorageLib.Dependency
329
+ storage dependency = DependencyRegistryStorageLib
330
+ .s()
331
+ .dependencyRecords[dependencyNameAndVersion];
280
332
  require(dependency.scriptCount > 0, "there are no scripts to remove");
281
333
  // delete reference to old storage contract address
282
334
  delete dependency.scriptBytecodeAddresses[dependency.scriptCount - 1];
@@ -284,393 +336,643 @@ contract DependencyRegistryV0 is
284
336
  dependency.scriptCount = dependency.scriptCount - 1;
285
337
  }
286
338
 
287
- emit DependencyScriptUpdated(_dependencyType);
339
+ emit DependencyScriptUpdated(dependencyNameAndVersion);
288
340
  }
289
341
 
290
342
  /**
291
- * @notice Updates preferred CDN for dependency `_dependencyType`.
292
- * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
293
- * @param _preferredCDN URL for preferred CDN.
343
+ * @notice Updates preferred CDN for dependency `dependencyNameAndVersion`.
344
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
345
+ * @param preferredCDN URL for preferred CDN.
294
346
  */
295
347
  function updateDependencyPreferredCDN(
296
- bytes32 _dependencyType,
297
- string memory _preferredCDN
348
+ bytes32 dependencyNameAndVersion,
349
+ string memory preferredCDN
298
350
  ) external {
299
351
  _onlyAdminACL(this.updateDependencyPreferredCDN.selector);
300
- _onlyExistingDependencyType(_dependencyType);
301
- dependencyDetails[_dependencyType].preferredCDN = _preferredCDN;
352
+ _onlyExistingDependency(dependencyNameAndVersion);
353
+
354
+ DependencyRegistryStorageLib
355
+ .s()
356
+ .dependencyRecords[dependencyNameAndVersion]
357
+ .preferredCDN = preferredCDN;
302
358
 
303
- emit DependencyPreferredCDNUpdated(_dependencyType, _preferredCDN);
359
+ emit DependencyPreferredCDNUpdated(
360
+ dependencyNameAndVersion,
361
+ preferredCDN
362
+ );
304
363
  }
305
364
 
306
365
  /**
307
- * @notice Updates preferred repository for dependency `_dependencyType`.
308
- * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
309
- * @param _preferredRepository URL for preferred repository.
366
+ * @notice Updates preferred repository for dependency `dependencyNameAndVersion`.
367
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
368
+ * @param preferredRepository URL for preferred repository.
310
369
  */
311
370
  function updateDependencyPreferredRepository(
312
- bytes32 _dependencyType,
313
- string memory _preferredRepository
371
+ bytes32 dependencyNameAndVersion,
372
+ string memory preferredRepository
314
373
  ) external {
315
374
  _onlyAdminACL(this.updateDependencyPreferredRepository.selector);
316
- _onlyExistingDependencyType(_dependencyType);
317
- dependencyDetails[_dependencyType]
318
- .preferredRepository = _preferredRepository;
375
+ _onlyExistingDependency(dependencyNameAndVersion);
376
+
377
+ DependencyRegistryStorageLib
378
+ .s()
379
+ .dependencyRecords[dependencyNameAndVersion]
380
+ .preferredRepository = preferredRepository;
319
381
 
320
382
  emit DependencyPreferredRepositoryUpdated(
321
- _dependencyType,
322
- _preferredRepository
383
+ dependencyNameAndVersion,
384
+ preferredRepository
323
385
  );
324
386
  }
325
387
 
326
388
  /**
327
- * @notice Updates project website for dependency `_dependencyType`.
328
- * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
329
- * @param _referenceWebsite URL for project website.
389
+ * @notice Updates project website for dependency `dependencyNameAndVersion`.
390
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
391
+ * @param dependencyWebsite URL for project website.
330
392
  */
331
- function updateDependencyReferenceWebsite(
332
- bytes32 _dependencyType,
333
- string memory _referenceWebsite
393
+ function updateDependencyWebsite(
394
+ bytes32 dependencyNameAndVersion,
395
+ string memory dependencyWebsite
334
396
  ) external {
335
- _onlyAdminACL(this.updateDependencyReferenceWebsite.selector);
336
- _onlyExistingDependencyType(_dependencyType);
337
- dependencyDetails[_dependencyType].referenceWebsite = _referenceWebsite;
397
+ _onlyAdminACL(this.updateDependencyWebsite.selector);
398
+ _onlyExistingDependency(dependencyNameAndVersion);
338
399
 
339
- emit DependencyReferenceWebsiteUpdated(
340
- _dependencyType,
341
- _referenceWebsite
400
+ DependencyRegistryStorageLib
401
+ .s()
402
+ .dependencyRecords[dependencyNameAndVersion]
403
+ .website = dependencyWebsite;
404
+
405
+ emit DependencyWebsiteUpdated(
406
+ dependencyNameAndVersion,
407
+ dependencyWebsite
342
408
  );
343
409
  }
344
410
 
345
411
  /**
346
- * @notice Adds a new CDN url to `_dependencyType`.
347
- * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
348
- * @param _additionalCDN CDN URL to be added. Required to be a non-empty string,
412
+ * @notice Adds a new CDN url to `dependencyNameAndVersion`.
413
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
414
+ * @param additionalCDN CDN URL to be added. Required to be a non-empty string,
349
415
  * but no further validation is performed.
350
416
  */
351
417
  function addDependencyAdditionalCDN(
352
- bytes32 _dependencyType,
353
- string memory _additionalCDN
418
+ bytes32 dependencyNameAndVersion,
419
+ string memory additionalCDN
354
420
  ) external {
355
421
  _onlyAdminACL(this.addDependencyAdditionalCDN.selector);
356
- _onlyNonEmptyString(_additionalCDN);
357
- _onlyExistingDependencyType(_dependencyType);
358
- Dependency storage dependency = dependencyDetails[_dependencyType];
422
+ _onlyNonEmptyString(additionalCDN);
423
+ _onlyExistingDependency(dependencyNameAndVersion);
424
+
425
+ DependencyRegistryStorageLib.Dependency
426
+ storage dependency = DependencyRegistryStorageLib
427
+ .s()
428
+ .dependencyRecords[dependencyNameAndVersion];
359
429
 
360
430
  uint256 additionalCDNCount = uint256(dependency.additionalCDNCount);
361
- dependency.additionalCDNs[additionalCDNCount] = _additionalCDN;
431
+ dependency.additionalCDNs[additionalCDNCount] = additionalCDN;
362
432
  dependency.additionalCDNCount = uint24(additionalCDNCount + 1);
363
433
 
364
434
  emit DependencyAdditionalCDNUpdated(
365
- _dependencyType,
366
- _additionalCDN,
435
+ dependencyNameAndVersion,
436
+ additionalCDN,
367
437
  additionalCDNCount
368
438
  );
369
439
  }
370
440
 
371
441
  /**
372
- * @notice Removes additional CDN for dependency `_dependencyId` at index `_index`.
442
+ * @notice Removes additional CDN for dependency `_dependencyId` at index `index`.
373
443
  * Removal is done by swapping the element to be removed with the last element in the array, then deleting this last element.
374
- * Assets with indices higher than `_index` can have their indices adjusted as a result of this operation.
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`.
444
+ * Assets with indices higher than `index` can have their indices adjusted as a result of this operation.
445
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
446
+ * @param index The index of an additional CDN, relative to the overall `additionalCDNCount`.
377
447
  */
378
448
  function removeDependencyAdditionalCDN(
379
- bytes32 _dependencyType,
380
- uint256 _index
449
+ bytes32 dependencyNameAndVersion,
450
+ uint256 index
381
451
  ) external {
382
452
  _onlyAdminACL(this.removeDependencyAdditionalCDN.selector);
383
- _onlyExistingDependencyType(_dependencyType);
384
- Dependency storage dependency = dependencyDetails[_dependencyType];
453
+ _onlyExistingDependency(dependencyNameAndVersion);
454
+
455
+ DependencyRegistryStorageLib.Dependency
456
+ storage dependency = DependencyRegistryStorageLib
457
+ .s()
458
+ .dependencyRecords[dependencyNameAndVersion];
385
459
 
386
460
  uint256 additionalCDNCount = dependency.additionalCDNCount;
387
- _onlyInRangeIndex({_index: _index, _length: additionalCDNCount});
461
+ _onlyInRangeIndex({index: index, length: additionalCDNCount});
388
462
 
389
463
  uint256 lastElementIndex = additionalCDNCount - 1;
390
464
 
391
- dependency.additionalCDNs[_index] = dependency.additionalCDNs[
465
+ dependency.additionalCDNs[index] = dependency.additionalCDNs[
392
466
  lastElementIndex
393
467
  ];
394
468
  delete dependency.additionalCDNs[lastElementIndex];
395
469
 
396
470
  dependency.additionalCDNCount = uint24(lastElementIndex);
397
471
 
398
- emit DependencyAdditionalCDNRemoved(_dependencyType, _index);
472
+ emit DependencyAdditionalCDNRemoved(dependencyNameAndVersion, index);
399
473
  }
400
474
 
401
475
  /**
402
- * @notice Updates additional CDN for dependency `_dependencyType` at `_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`.
405
- * @param _additionalCDN New CDN URL.
476
+ * @notice Updates additional CDN for dependency `dependencyNameAndVersion` at `index`.
477
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
478
+ * @param index The index of an additional CDN, relative to the overall `additionalCDNCount`.
479
+ * @param additionalCDN New CDN URL.
406
480
  */
407
481
  function updateDependencyAdditionalCDN(
408
- bytes32 _dependencyType,
409
- uint256 _index,
410
- string memory _additionalCDN
482
+ bytes32 dependencyNameAndVersion,
483
+ uint256 index,
484
+ string memory additionalCDN
411
485
  ) external {
412
486
  _onlyAdminACL(this.updateDependencyAdditionalCDN.selector);
413
- _onlyNonEmptyString(_additionalCDN);
414
- _onlyExistingDependencyType(_dependencyType);
415
- Dependency storage dependency = dependencyDetails[_dependencyType];
487
+ _onlyNonEmptyString(additionalCDN);
488
+ _onlyExistingDependency(dependencyNameAndVersion);
489
+
490
+ DependencyRegistryStorageLib.Dependency
491
+ storage dependency = DependencyRegistryStorageLib
492
+ .s()
493
+ .dependencyRecords[dependencyNameAndVersion];
416
494
  _onlyInRangeIndex({
417
- _index: _index,
418
- _length: dependency.additionalCDNCount
495
+ index: index,
496
+ length: dependency.additionalCDNCount
419
497
  });
420
498
 
421
- dependency.additionalCDNs[_index] = _additionalCDN;
499
+ dependency.additionalCDNs[index] = additionalCDN;
422
500
 
423
501
  emit DependencyAdditionalCDNUpdated(
424
- _dependencyType,
425
- _additionalCDN,
426
- _index
502
+ dependencyNameAndVersion,
503
+ additionalCDN,
504
+ index
427
505
  );
428
506
  }
429
507
 
430
508
  /**
431
- * @notice Adds a new repository URL to dependency `_dependencyType`.
432
- * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
433
- * @param _additionalRepository Repository URL to be added. Required to be a non-empty string,
509
+ * @notice Adds a new repository URL to dependency `dependencyNameAndVersion`.
510
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
511
+ * @param additionalRepository Repository URL to be added. Required to be a non-empty string,
434
512
  * but no further validation is performed.
435
513
  */
436
514
  function addDependencyAdditionalRepository(
437
- bytes32 _dependencyType,
438
- string memory _additionalRepository
515
+ bytes32 dependencyNameAndVersion,
516
+ string memory additionalRepository
439
517
  ) external {
440
518
  _onlyAdminACL(this.addDependencyAdditionalRepository.selector);
441
- _onlyNonEmptyString(_additionalRepository);
442
- _onlyExistingDependencyType(_dependencyType);
443
- Dependency storage dependency = dependencyDetails[_dependencyType];
519
+ _onlyNonEmptyString(additionalRepository);
520
+ _onlyExistingDependency(dependencyNameAndVersion);
521
+
522
+ DependencyRegistryStorageLib.Dependency
523
+ storage dependency = DependencyRegistryStorageLib
524
+ .s()
525
+ .dependencyRecords[dependencyNameAndVersion];
444
526
  uint256 additionalRepositoryCount = uint256(
445
527
  dependency.additionalRepositoryCount
446
528
  );
447
529
  dependency.additionalRepositories[
448
530
  additionalRepositoryCount
449
- ] = _additionalRepository;
531
+ ] = additionalRepository;
450
532
  dependency.additionalRepositoryCount = uint24(
451
533
  additionalRepositoryCount + 1
452
534
  );
453
535
 
454
536
  emit DependencyAdditionalRepositoryUpdated(
455
- _dependencyType,
456
- _additionalRepository,
537
+ dependencyNameAndVersion,
538
+ additionalRepository,
457
539
  additionalRepositoryCount
458
540
  );
459
541
  }
460
542
 
461
543
  /**
462
- * @notice Removes additional repository for depenency `_dependencyId` at index `_index`.
544
+ * @notice Removes additional repository for depenency `_dependencyId` at index `index`.
463
545
  * Removal is done by swapping the element to be removed with the last element in the array, then deleting this last element.
464
- * Assets with indices higher than `_index` can have their indices adjusted as a result of this operation.
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`.
546
+ * Assets with indices higher than `index` can have their indices adjusted as a result of this operation.
547
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
548
+ * @param index The index of an additional repository, relative to the overall `additionalRepositoryCount`.
467
549
  */
468
550
  function removeDependencyAdditionalRepository(
469
- bytes32 _dependencyType,
470
- uint256 _index
551
+ bytes32 dependencyNameAndVersion,
552
+ uint256 index
471
553
  ) external {
472
554
  _onlyAdminACL(this.removeDependencyAdditionalRepository.selector);
473
- _onlyExistingDependencyType(_dependencyType);
474
- Dependency storage dependency = dependencyDetails[_dependencyType];
555
+ _onlyExistingDependency(dependencyNameAndVersion);
556
+
557
+ DependencyRegistryStorageLib.Storage
558
+ storage ds = DependencyRegistryStorageLib.s();
559
+
560
+ DependencyRegistryStorageLib.Dependency storage dependency = ds
561
+ .dependencyRecords[dependencyNameAndVersion];
475
562
  uint256 additionalRepositoryCount = dependency
476
563
  .additionalRepositoryCount;
477
- _onlyInRangeIndex({_index: _index, _length: additionalRepositoryCount});
564
+ _onlyInRangeIndex({index: index, length: additionalRepositoryCount});
478
565
 
479
566
  uint256 lastElementIndex = additionalRepositoryCount - 1;
480
567
 
481
- dependency.additionalRepositories[_index] = dependencyDetails[
482
- _dependencyType
483
- ].additionalRepositories[lastElementIndex];
568
+ dependency.additionalRepositories[index] = ds
569
+ .dependencyRecords[dependencyNameAndVersion]
570
+ .additionalRepositories[lastElementIndex];
484
571
  delete dependency.additionalRepositories[lastElementIndex];
485
572
 
486
573
  dependency.additionalRepositoryCount = uint24(lastElementIndex);
487
574
 
488
- emit DependencyAdditionalRepositoryRemoved(_dependencyType, _index);
575
+ emit DependencyAdditionalRepositoryRemoved(
576
+ dependencyNameAndVersion,
577
+ index
578
+ );
489
579
  }
490
580
 
491
581
  /**
492
- * @notice Updates additional repository for dependency `_dependencyType` at `_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`.
495
- * @param _additionalRepository New Repository URL.
582
+ * @notice Updates additional repository for dependency `dependencyNameAndVersion` at `index`.
583
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
584
+ * @param index The index of an additional repository, relative to the overall `additionalRepositoryCount`.
585
+ * @param additionalRepository New Repository URL.
496
586
  */
497
587
  function updateDependencyAdditionalRepository(
498
- bytes32 _dependencyType,
499
- uint256 _index,
500
- string memory _additionalRepository
588
+ bytes32 dependencyNameAndVersion,
589
+ uint256 index,
590
+ string memory additionalRepository
501
591
  ) external {
502
592
  _onlyAdminACL(this.updateDependencyAdditionalRepository.selector);
503
- _onlyNonEmptyString(_additionalRepository);
504
- _onlyExistingDependencyType(_dependencyType);
505
- Dependency storage dependency = dependencyDetails[_dependencyType];
593
+ _onlyNonEmptyString(additionalRepository);
594
+ _onlyExistingDependency(dependencyNameAndVersion);
595
+
596
+ DependencyRegistryStorageLib.Dependency
597
+ storage dependency = DependencyRegistryStorageLib
598
+ .s()
599
+ .dependencyRecords[dependencyNameAndVersion];
506
600
  _onlyInRangeIndex({
507
- _index: _index,
508
- _length: dependency.additionalRepositoryCount
601
+ index: index,
602
+ length: dependency.additionalRepositoryCount
509
603
  });
510
604
 
511
- dependency.additionalRepositories[_index] = _additionalRepository;
605
+ dependency.additionalRepositories[index] = additionalRepository;
512
606
 
513
607
  emit DependencyAdditionalRepositoryUpdated(
514
- _dependencyType,
515
- _additionalRepository,
516
- _index
608
+ dependencyNameAndVersion,
609
+ additionalRepository,
610
+ index
517
611
  );
518
612
  }
519
613
 
520
614
  /**
521
615
  * @notice Adds a new core contract to the list of supported core contracts.
522
- * @param _contractAddress Address of the core contract to be added.
616
+ * @param contractAddress Address of the core contract to be added.
523
617
  */
524
- function addSupportedCoreContract(address _contractAddress) external {
618
+ function addSupportedCoreContract(address contractAddress) external {
525
619
  _onlyAdminACL(this.addSupportedCoreContract.selector);
526
- _onlyNonZeroAddress(_contractAddress);
620
+ _onlyNonZeroAddress(contractAddress);
621
+
527
622
  require(
528
- !_supportedCoreContracts.contains(_contractAddress),
623
+ // @dev the add function returns false if set already contains value
624
+ DependencyRegistryStorageLib.s().supportedCoreContracts.add(
625
+ contractAddress
626
+ ),
529
627
  "Contract already supported"
530
628
  );
531
-
532
- _supportedCoreContracts.add(_contractAddress);
533
-
534
- emit SupportedCoreContractAdded(_contractAddress);
629
+ emit SupportedCoreContractAdded(contractAddress);
535
630
  }
536
631
 
537
632
  /**
538
633
  * @notice Removes a core contract from the list of supported core contracts.
539
- * @param _contractAddress Address of the core contract to be removed.
634
+ * @param contractAddress Address of the core contract to be removed.
540
635
  */
541
- function removeSupportedCoreContract(address _contractAddress) external {
636
+ function removeSupportedCoreContract(address contractAddress) external {
542
637
  _onlyAdminACL(this.removeSupportedCoreContract.selector);
543
- _onlySupportedCoreContract(_contractAddress);
544
- _supportedCoreContracts.remove(_contractAddress);
545
-
546
- emit SupportedCoreContractRemoved(_contractAddress);
638
+ require(
639
+ // @dev the remove function returns false if set does not contain value
640
+ DependencyRegistryStorageLib.s().supportedCoreContracts.remove(
641
+ contractAddress
642
+ ),
643
+ "Core contract already removed or not in set"
644
+ );
645
+ emit SupportedCoreContractRemoved(contractAddress);
547
646
  }
548
647
 
549
648
  /**
550
649
  * @notice Overrides the script type and version that
551
650
  * would be returned by the core contract (`_contractAddress`)
552
651
  * for a given project (`projectId`) with the given dependency
553
- * type (`_dependencyType`).
554
- * @param _contractAddress Core contract address.
555
- * @param _projectId Project to override script type and version for.
556
- * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
557
- */
558
- function addProjectDependencyTypeOverride(
559
- address _contractAddress,
560
- uint256 _projectId,
561
- bytes32 _dependencyType
652
+ * name and version (`dependencyNameAndVersion`).
653
+ * @param contractAddress Core contract address.
654
+ * @param projectId Project to override script type and version for.
655
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "type`@`version") used to identify dependency.
656
+ */
657
+ function addProjectDependencyOverride(
658
+ address contractAddress,
659
+ uint256 projectId,
660
+ bytes32 dependencyNameAndVersion
562
661
  ) external {
563
- _onlyAdminACL(this.addProjectDependencyTypeOverride.selector);
564
- _onlyExistingDependencyType(_dependencyType);
565
- _onlySupportedCoreContract(_contractAddress);
566
- projectDependencyTypeOverrides[_contractAddress][
567
- _projectId
568
- ] = _dependencyType;
569
-
570
- emit ProjectDependencyTypeOverrideAdded(
571
- _contractAddress,
572
- _projectId,
573
- _dependencyType
662
+ _onlyAdminACL(this.addProjectDependencyOverride.selector);
663
+ _onlyExistingDependency(dependencyNameAndVersion);
664
+ _onlySupportedCoreContract(contractAddress);
665
+
666
+ DependencyRegistryStorageLib.s().projectDependencyOverrides[
667
+ contractAddress
668
+ ][projectId] = dependencyNameAndVersion;
669
+
670
+ emit ProjectDependencyOverrideAdded(
671
+ contractAddress,
672
+ projectId,
673
+ dependencyNameAndVersion
574
674
  );
575
675
  }
576
676
 
577
677
  /**
578
678
  * @notice Removes the script type and version override for a given
579
679
  * project (`projectId`) on a given core contract (`_contractAddress`).
580
- * @param _contractAddress Core contract address.
581
- * @param _projectId Project to remove override for.
680
+ * @param contractAddress Core contract address.
681
+ * @param projectId Project to remove override for.
582
682
  */
583
- function removeProjectDependencyTypeOverride(
584
- address _contractAddress,
585
- uint256 _projectId
683
+ function removeProjectDependencyOverride(
684
+ address contractAddress,
685
+ uint256 projectId
586
686
  ) external {
587
- _onlyAdminACL(this.removeProjectDependencyTypeOverride.selector);
687
+ _onlyAdminACL(this.removeProjectDependencyOverride.selector);
688
+
689
+ DependencyRegistryStorageLib.Storage
690
+ storage ds = DependencyRegistryStorageLib.s();
691
+
588
692
  require(
589
- projectDependencyTypeOverrides[_contractAddress][_projectId] !=
693
+ ds.projectDependencyOverrides[contractAddress][projectId] !=
590
694
  bytes32(""),
591
695
  "No override set for project"
592
696
  );
593
697
 
594
- delete projectDependencyTypeOverrides[_contractAddress][_projectId];
698
+ delete ds.projectDependencyOverrides[contractAddress][projectId];
595
699
 
596
- emit ProjectDependencyTypeOverrideRemoved(_contractAddress, _projectId);
700
+ emit ProjectDependencyOverrideRemoved(contractAddress, projectId);
597
701
  }
598
702
 
599
703
  /**
600
- * @notice Returns a list of registered depenency types.
601
- * @return List of registered depenency types.
602
- * @dev This is only intended to be called outside of block
603
- * execution where there is no gas limit.
704
+ * @notice Returns an array of strings representing all registered dependencies in the contract.
705
+ * Each string is a combination of the dependency's name and version
706
+ * @dev This function is designed to be called outside of block execution where there is no gas limit,
707
+ * as it may consume a large amount of gas when there are many registered dependencies.
708
+ * @return A string array where each element is a registered dependency in the format "name@version".
604
709
  */
605
- function getDependencyTypes() external view returns (string[] memory) {
606
- string[] memory dependencyTypes = new string[](
607
- _dependencyTypes.length()
608
- );
609
- uint256 numDependencyTypes = _dependencyTypes.length();
710
+ function getDependencyNamesAndVersions()
711
+ external
712
+ view
713
+ returns (string[] memory)
714
+ {
715
+ DependencyRegistryStorageLib.Storage
716
+ storage ds = DependencyRegistryStorageLib.s();
717
+
718
+ uint256 numDependencies = ds.dependencyNameVersionIds.length();
719
+ string[] memory dependencyTypes = new string[](numDependencies);
610
720
 
611
- for (uint256 i = 0; i < numDependencyTypes; i++) {
612
- dependencyTypes[i] = _dependencyTypes.at(i).toString();
721
+ for (uint256 i = 0; i < numDependencies; i++) {
722
+ dependencyTypes[i] = ds.dependencyNameVersionIds.at(i).toString();
613
723
  }
614
724
  return dependencyTypes;
615
725
  }
616
726
 
617
727
  /**
618
- * @notice Returns number of registered dependency types
728
+ * @notice Returns number of registered dependencies
619
729
  * @return Number of registered dependencies.
620
730
  */
621
- function getDependencyTypeCount() external view returns (uint256) {
622
- return _dependencyTypes.length();
731
+ function getDependencyCount() external view returns (uint256) {
732
+ return
733
+ DependencyRegistryStorageLib.s().dependencyNameVersionIds.length();
734
+ }
735
+
736
+ /**
737
+ * @notice Returns registered depenedency name and version at index `index`.
738
+ * @return Registered dependency at `index`, relative to the overall length of the dependency type set.
739
+ */
740
+ function getDependencyNameAndVersion(
741
+ uint256 index
742
+ ) external view returns (string memory) {
743
+ DependencyRegistryStorageLib.Storage
744
+ storage ds = DependencyRegistryStorageLib.s();
745
+
746
+ _onlyInRangeIndex({
747
+ index: index,
748
+ length: ds.dependencyNameVersionIds.length()
749
+ });
750
+ return ds.dependencyNameVersionIds.at(index).toString();
751
+ }
752
+
753
+ /**
754
+ * @notice Returns array of registered license types
755
+ * @return Array of registered license types.
756
+ * @dev This is only intended to be called outside of block
757
+ * execution where there is no gas limit.
758
+ */
759
+ function getLicenseTypes() external view returns (string[] memory) {
760
+ DependencyRegistryStorageLib.Storage
761
+ storage ds = DependencyRegistryStorageLib.s();
762
+
763
+ uint256 numLicenseTypes = ds.licenseTypes.length();
764
+ string[] memory licenseTypes = new string[](numLicenseTypes);
765
+
766
+ for (uint256 i; i < numLicenseTypes; ) {
767
+ licenseTypes[i] = ds.licenseTypes.at(i).toString();
768
+ unchecked {
769
+ ++i;
770
+ }
771
+ }
772
+ return licenseTypes;
773
+ }
774
+
775
+ /**
776
+ * @notice Returns number of registered license types
777
+ * @return Number of registered license types.
778
+ */
779
+ function getLicenseTypeCount() external view returns (uint256) {
780
+ return DependencyRegistryStorageLib.s().licenseTypes.length();
623
781
  }
624
782
 
625
783
  /**
626
- * @notice Returns registered depenedency type at index `_index`.
627
- * @return Registered dependency at `_index`, relative to the overall length of the dependency type set.
784
+ * @notice Returns registered license type at index `index`.
785
+ * @return Registered license type at `index`, relative to the overall length of the license type set.
628
786
  */
629
- function getDependencyType(
630
- uint256 _index
787
+ function getLicenseType(
788
+ uint256 index
631
789
  ) external view returns (string memory) {
632
- _onlyInRangeIndex({_index: _index, _length: _dependencyTypes.length()});
633
- return _dependencyTypes.at(_index).toString();
790
+ DependencyRegistryStorageLib.Storage
791
+ storage ds = DependencyRegistryStorageLib.s();
792
+
793
+ _onlyInRangeIndex({index: index, length: ds.licenseTypes.length()});
794
+ return ds.licenseTypes.at(index).toString();
634
795
  }
635
796
 
636
797
  /**
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.
639
- * @return typeAndVersion String representation of `_dependencyType`.
798
+ * @notice Adds a full license text to license `licenseType`, by way of
799
+ * providing a string to write to bytecode storage.
800
+ * @param licenseType Name of license type (e.g. "MIT") used to identify license.
801
+ * @param text Text to be added. Required to be a non-empty string,
802
+ * but no further validation is performed.
803
+ */
804
+ function addLicenseText(bytes32 licenseType, string memory text) external {
805
+ _onlyAdminACL(this.addLicenseText.selector);
806
+ _onlyNonEmptyString(text);
807
+ _onlyExistingLicenseType(licenseType);
808
+
809
+ DependencyRegistryStorageLib.License
810
+ storage licenseEntry = DependencyRegistryStorageLib.s().allLicenses[
811
+ licenseType
812
+ ];
813
+ // store license chunk in contract bytecode
814
+ licenseEntry.licenseBytecodeAddresses[
815
+ licenseEntry.licenseChunkCount
816
+ ] = text.writeToBytecode();
817
+ licenseEntry.licenseChunkCount = licenseEntry.licenseChunkCount + 1;
818
+
819
+ emit LicenseTextUpdated(licenseType);
820
+ }
821
+
822
+ /**
823
+ * @notice Updates the license text for license `licenseType` at index `_index`,
824
+ * by way of providing a string to write to bytecode storage.
825
+ * @param licenseType Name of license type (e.g. "MIT") used to identify license.
826
+ * @param index The index of a given license text chunk, relative to the overall `licenseChunkCount`.
827
+ * @param text The updated license text value. Required to be a non-empty
828
+ * string, but no further validation is performed.
829
+ */
830
+ function updateLicenseText(
831
+ bytes32 licenseType,
832
+ uint256 index,
833
+ string memory text
834
+ ) external {
835
+ _onlyAdminACL(this.updateLicenseText.selector);
836
+ _onlyNonEmptyString(text);
837
+ _onlyExistingLicenseType(licenseType);
838
+
839
+ DependencyRegistryStorageLib.License
840
+ storage licenseEntry = DependencyRegistryStorageLib.s().allLicenses[
841
+ licenseType
842
+ ];
843
+ _onlyInRangeIndex({
844
+ index: index,
845
+ length: licenseEntry.licenseChunkCount
846
+ });
847
+ // store license text chunk in contract bytecode, replacing reference address from
848
+ // the contract that is no longer referenced with the newly created one
849
+ licenseEntry.licenseBytecodeAddresses[index] = text.writeToBytecode();
850
+
851
+ emit LicenseTextUpdated(licenseType);
852
+ }
853
+
854
+ /**
855
+ * @notice Removes the last license text chunk from license `licenseType`.
856
+ * @param licenseType Name of license type (e.g. "MIT") used to identify license.
857
+ */
858
+ function removeLicenseLastText(bytes32 licenseType) external {
859
+ _onlyAdminACL(this.removeLicenseLastText.selector);
860
+ _onlyExistingLicenseType(licenseType);
861
+
862
+ DependencyRegistryStorageLib.License
863
+ storage licenseEntry = DependencyRegistryStorageLib.s().allLicenses[
864
+ licenseType
865
+ ];
866
+ uint24 licenseChunkCount = licenseEntry.licenseChunkCount;
867
+ require(licenseChunkCount > 0, "There is no license text to remove");
868
+ // delete reference to old storage contract address
869
+ delete licenseEntry.licenseBytecodeAddresses[licenseChunkCount - 1];
870
+ unchecked {
871
+ licenseEntry.licenseChunkCount = licenseChunkCount - 1;
872
+ }
873
+
874
+ emit LicenseTextUpdated(licenseType);
875
+ }
876
+
877
+ /**
878
+ * @notice Returns license text for license `licenseType` at script index `index`.
879
+ * @param licenseType Name of license type (e.g. "MIT") used to identify license.
880
+ * @param index The index of a given script, relative to the overall `licenseChunkCount`.
881
+ * @return A string containing the license text content at the given script chunk index for a given license.
882
+ * @dev This method attempts to introspectively determine which library version of
883
+ * `BytecodeStorage` was used to write the stored script string that is being
884
+ * read back, in order to use the proper read approach. If the version is
885
+ * non-determinate, a fall-back to reading using the assumption that the bytes
886
+ * were written with `SSTORE2` is used.
887
+ * Also note that in this `SSTORE2` fallback handling, the approach of casting bytes to string
888
+ * can cause failure (e.g. unexpected continuation byte).
889
+ */
890
+ function getLicenseText(
891
+ bytes32 licenseType,
892
+ uint256 index
893
+ ) external view returns (string memory) {
894
+ DependencyRegistryStorageLib.License
895
+ storage licenseEntry = DependencyRegistryStorageLib.s().allLicenses[
896
+ licenseType
897
+ ];
898
+ _onlyInRangeIndex({
899
+ index: index,
900
+ length: licenseEntry.licenseChunkCount
901
+ });
902
+
903
+ address licenseAddress = licenseEntry.licenseBytecodeAddresses[index];
904
+ bytes32 storageVersion = BytecodeStorageReader
905
+ .getLibraryVersionForBytecode(licenseAddress);
906
+ if (storageVersion == BytecodeStorageReader.UNKNOWN_VERSION_STRING) {
907
+ return
908
+ string(
909
+ BytecodeStorageReader.readBytesFromSSTORE2Bytecode(
910
+ licenseAddress
911
+ )
912
+ );
913
+ } else {
914
+ return BytecodeStorageReader.readFromBytecode(licenseAddress);
915
+ }
916
+ }
917
+
918
+ /**
919
+ * @notice Returns the count of license chunks for license `licenseType`.
920
+ * @param licenseType Name of license type (e.g. "MIT") used to identify dependency.
921
+ */
922
+ function getLicenseTextChunkCount(
923
+ bytes32 licenseType
924
+ ) external view returns (uint256) {
925
+ return
926
+ DependencyRegistryStorageLib
927
+ .s()
928
+ .allLicenses[licenseType]
929
+ .licenseChunkCount;
930
+ }
931
+
932
+ /**
933
+ * @notice Returns details for a given dependency type `dependencyNameAndVersion`.
934
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
935
+ * @return nameAndVersion String representation of `dependencyNameAndVersion`.
640
936
  * (e.g. "p5js(atSymbol)1.0.0")
937
+ * @return licenseType License type for dependency
641
938
  * @return preferredCDN Preferred CDN URL for dependency
642
939
  * @return additionalCDNCount Count of additional CDN URLs for dependency
643
940
  * @return preferredRepository Preferred repository URL for dependency
644
941
  * @return additionalRepositoryCount Count of additional repository URLs for dependency
645
- * @return referenceWebsite Project website URL for dependency
942
+ * @return dependencyWebsite Project website URL for dependency
646
943
  * @return availableOnChain Whether dependency is available on chain
647
944
  * @return scriptCount Count of on-chain scripts for dependency
648
945
  */
649
946
  function getDependencyDetails(
650
- bytes32 _dependencyType
947
+ bytes32 dependencyNameAndVersion
651
948
  )
652
949
  external
653
950
  view
654
951
  returns (
655
- string memory typeAndVersion,
952
+ string memory nameAndVersion,
953
+ string memory licenseType,
656
954
  string memory preferredCDN,
657
955
  uint24 additionalCDNCount,
658
956
  string memory preferredRepository,
659
957
  uint24 additionalRepositoryCount,
660
- string memory referenceWebsite,
958
+ string memory dependencyWebsite,
661
959
  bool availableOnChain,
662
960
  uint24 scriptCount
663
961
  )
664
962
  {
665
- Dependency storage dependency = dependencyDetails[_dependencyType];
963
+ DependencyRegistryStorageLib.Dependency
964
+ storage dependency = DependencyRegistryStorageLib
965
+ .s()
966
+ .dependencyRecords[dependencyNameAndVersion];
666
967
 
667
968
  return (
668
- _dependencyType.toString(),
969
+ dependencyNameAndVersion.toString(),
970
+ dependency.licenseType.toString(),
669
971
  dependency.preferredCDN,
670
972
  dependency.additionalCDNCount,
671
973
  dependency.preferredRepository,
672
974
  dependency.additionalRepositoryCount,
673
- dependency.referenceWebsite,
975
+ dependency.website,
674
976
  dependency.scriptCount > 0,
675
977
  dependency.scriptCount
676
978
  );
@@ -681,23 +983,27 @@ contract DependencyRegistryV0 is
681
983
  * @return Number of supported core contracts.
682
984
  */
683
985
  function getSupportedCoreContractCount() external view returns (uint256) {
684
- return _supportedCoreContracts.length();
986
+ return DependencyRegistryStorageLib.s().supportedCoreContracts.length();
685
987
  }
686
988
 
687
989
  /**
688
- * @notice Returns the address of the supported core contract at index `_index`.
689
- * @param _index Index of the core contract to be returned, relative to the overall
990
+ * @notice Returns the address of the supported core contract at index `index`.
991
+ * @param index Index of the core contract to be returned, relative to the overall
690
992
  * list of supported core contracts.
691
993
  * @return address of the core contract.
692
994
  */
693
995
  function getSupportedCoreContract(
694
- uint256 _index
996
+ uint256 index
695
997
  ) external view returns (address) {
998
+ DependencyRegistryStorageLib.Storage
999
+ storage ds = DependencyRegistryStorageLib.s();
1000
+
696
1001
  _onlyInRangeIndex({
697
- _index: _index,
698
- _length: _supportedCoreContracts.length()
1002
+ index: index,
1003
+ length: ds.supportedCoreContracts.length()
699
1004
  });
700
- return _supportedCoreContracts.at(_index);
1005
+
1006
+ return ds.supportedCoreContracts.at(index);
701
1007
  }
702
1008
 
703
1009
  /**
@@ -708,7 +1014,10 @@ contract DependencyRegistryV0 is
708
1014
  function isSupportedCoreContract(
709
1015
  address coreContractAddress
710
1016
  ) external view returns (bool) {
711
- return _supportedCoreContracts.contains(coreContractAddress);
1017
+ return
1018
+ DependencyRegistryStorageLib.s().supportedCoreContracts.contains(
1019
+ coreContractAddress
1020
+ );
712
1021
  }
713
1022
 
714
1023
  /**
@@ -722,83 +1031,102 @@ contract DependencyRegistryV0 is
722
1031
  view
723
1032
  returns (address[] memory)
724
1033
  {
725
- uint256 supportedCoreContractCount = _supportedCoreContracts.length();
1034
+ DependencyRegistryStorageLib.Storage
1035
+ storage ds = DependencyRegistryStorageLib.s();
1036
+
1037
+ uint256 supportedCoreContractCount = ds.supportedCoreContracts.length();
726
1038
  address[] memory supportedCoreContracts = new address[](
727
1039
  supportedCoreContractCount
728
1040
  );
729
1041
 
730
- for (uint256 i = 0; i < supportedCoreContractCount; i++) {
731
- supportedCoreContracts[i] = _supportedCoreContracts.at(i);
1042
+ for (uint256 i; i < supportedCoreContractCount; ) {
1043
+ supportedCoreContracts[i] = ds.supportedCoreContracts.at(i);
1044
+ unchecked {
1045
+ ++i;
1046
+ }
732
1047
  }
733
1048
 
734
1049
  return supportedCoreContracts;
735
1050
  }
736
1051
 
737
1052
  /**
738
- * @notice Returns the additional CDN URL at index `_index` for dependency `_dependencyType`.
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`.
1053
+ * @notice Returns the additional CDN URL at index `index` for dependency `dependencyNameAndVersion`.
1054
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
1055
+ * @param index The index of an additional CDN, relative to the overall `additionalCDNCount`.
741
1056
  */
742
1057
  function getDependencyAdditionalCDN(
743
- bytes32 _dependencyType,
744
- uint256 _index
1058
+ bytes32 dependencyNameAndVersion,
1059
+ uint256 index
745
1060
  ) external view returns (string memory) {
746
- Dependency storage dependency = dependencyDetails[_dependencyType];
1061
+ DependencyRegistryStorageLib.Dependency
1062
+ storage dependency = DependencyRegistryStorageLib
1063
+ .s()
1064
+ .dependencyRecords[dependencyNameAndVersion];
747
1065
  _onlyInRangeIndex({
748
- _index: _index,
749
- _length: dependency.additionalCDNCount
1066
+ index: index,
1067
+ length: dependency.additionalCDNCount
750
1068
  });
751
- return dependency.additionalCDNs[_index];
1069
+ return dependency.additionalCDNs[index];
752
1070
  }
753
1071
 
754
1072
  /**
755
- * @notice Returns the additional repository URL at index `_index` for dependency `_dependencyType`.
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`.
1073
+ * @notice Returns the additional repository URL at index `index` for dependency `dependencyNameAndVersion`.
1074
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
1075
+ * @param index The index of an additional repository, relative to the overall `additionalRepositoryCount`.
758
1076
  */
759
1077
  function getDependencyAdditionalRepository(
760
- bytes32 _dependencyType,
761
- uint256 _index
1078
+ bytes32 dependencyNameAndVersion,
1079
+ uint256 index
762
1080
  ) external view returns (string memory) {
763
- Dependency storage dependency = dependencyDetails[_dependencyType];
1081
+ DependencyRegistryStorageLib.Dependency
1082
+ storage dependency = DependencyRegistryStorageLib
1083
+ .s()
1084
+ .dependencyRecords[dependencyNameAndVersion];
764
1085
  _onlyInRangeIndex({
765
- _index: _index,
766
- _length: dependency.additionalRepositoryCount
1086
+ index: index,
1087
+ length: dependency.additionalRepositoryCount
767
1088
  });
768
- return dependency.additionalRepositories[_index];
1089
+ return dependency.additionalRepositories[index];
769
1090
  }
770
1091
 
771
1092
  /**
772
- * @notice Returns the count of scripts for dependency `_dependencyType`.
773
- * @param _dependencyType Name of dependency type (i.e. "type@version") used to identify dependency.
1093
+ * @notice Returns the count of scripts for dependency `dependencyNameAndVersion`.
1094
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
774
1095
  */
775
1096
  function getDependencyScriptCount(
776
- bytes32 _dependencyType
1097
+ bytes32 dependencyNameAndVersion
777
1098
  ) external view returns (uint256) {
778
- return dependencyDetails[_dependencyType].scriptCount;
1099
+ return
1100
+ DependencyRegistryStorageLib
1101
+ .s()
1102
+ .dependencyRecords[dependencyNameAndVersion]
1103
+ .scriptCount;
779
1104
  }
780
1105
 
781
1106
  /**
782
1107
  * @notice Returns address with bytecode containing script for
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`.
1108
+ * dependency `_dependencyTypes` at script index `index`.
1109
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
1110
+ * @param index The index of a given script, relative to the overall `scriptCount`.
786
1111
  * @return The address of the bytecode storage for the script at the given index, if it can be determined.
787
1112
  */
788
1113
  function getDependencyScriptBytecodeAddress(
789
- bytes32 _dependencyType,
790
- uint256 _index
1114
+ bytes32 dependencyNameAndVersion,
1115
+ uint256 index
791
1116
  ) external view returns (address) {
792
- Dependency storage dependency = dependencyDetails[_dependencyType];
793
- _onlyInRangeIndex({_index: _index, _length: dependency.scriptCount});
794
- return dependency.scriptBytecodeAddresses[_index];
1117
+ DependencyRegistryStorageLib.Dependency
1118
+ storage dependency = DependencyRegistryStorageLib
1119
+ .s()
1120
+ .dependencyRecords[dependencyNameAndVersion];
1121
+ _onlyInRangeIndex({index: index, length: dependency.scriptCount});
1122
+ return dependency.scriptBytecodeAddresses[index];
795
1123
  }
796
1124
 
797
1125
  /**
798
1126
  * @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`.
1127
+ * dependency `_dependencyTypes` at script index `index`.
1128
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
1129
+ * @param index The index of a given script, relative to the overall `scriptCount`.
802
1130
  * @return The storage library version for the script at the given index, if it can be determined.
803
1131
  * @dev Note that we only expect this to be determinable if the script was written using a version
804
1132
  * of the Art Blocks `BytecodeStorage` library, and in other cases the fallback will be the
@@ -807,23 +1135,24 @@ contract DependencyRegistryV0 is
807
1135
  * that can be fallback-read optimistically.
808
1136
  */
809
1137
  function getDependencyScriptBytecodeStorageVersion(
810
- bytes32 _dependencyType,
811
- uint256 _index
1138
+ bytes32 dependencyNameAndVersion,
1139
+ uint256 index
812
1140
  ) external view returns (bytes32) {
813
- Dependency storage dependency = dependencyDetails[_dependencyType];
814
- _onlyInRangeIndex({_index: _index, _length: dependency.scriptCount});
1141
+ DependencyRegistryStorageLib.Dependency
1142
+ storage dependency = DependencyRegistryStorageLib
1143
+ .s()
1144
+ .dependencyRecords[dependencyNameAndVersion];
1145
+ _onlyInRangeIndex({index: index, length: dependency.scriptCount});
815
1146
  return
816
1147
  BytecodeStorageReader.getLibraryVersionForBytecode(
817
- dependencyDetails[_dependencyType].scriptBytecodeAddresses[
818
- _index
819
- ]
1148
+ dependency.scriptBytecodeAddresses[index]
820
1149
  );
821
1150
  }
822
1151
 
823
1152
  /**
824
- * @notice Returns script for dependency `_dependencyType` at script index `_index`.
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`.
1153
+ * @notice Returns script for dependency `dependencyNameAndVersion` at script index `index`.
1154
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
1155
+ * @param index The index of a given script, relative to the overall `scriptCount`.
827
1156
  * @return A string containing the script content at the given script chunk index for a given dependency.
828
1157
  * @dev This method attempts to introspectively determine which library version of
829
1158
  * `BytecodeStorage` was used to write the stored script string that is being
@@ -834,13 +1163,16 @@ contract DependencyRegistryV0 is
834
1163
  * can cause failure (e.g. unexpected continuation byte).
835
1164
  */
836
1165
  function getDependencyScript(
837
- bytes32 _dependencyType,
838
- uint256 _index
1166
+ bytes32 dependencyNameAndVersion,
1167
+ uint256 index
839
1168
  ) external view returns (string memory) {
840
- Dependency storage dependency = dependencyDetails[_dependencyType];
841
- _onlyInRangeIndex({_index: _index, _length: dependency.scriptCount});
1169
+ DependencyRegistryStorageLib.Dependency
1170
+ storage dependency = DependencyRegistryStorageLib
1171
+ .s()
1172
+ .dependencyRecords[dependencyNameAndVersion];
1173
+ _onlyInRangeIndex({index: index, length: dependency.scriptCount});
842
1174
 
843
- address scriptAddress = dependency.scriptBytecodeAddresses[_index];
1175
+ address scriptAddress = dependency.scriptBytecodeAddresses[index];
844
1176
  bytes32 storageVersion = BytecodeStorageReader
845
1177
  .getLibraryVersionForBytecode(scriptAddress);
846
1178
 
@@ -857,30 +1189,31 @@ contract DependencyRegistryV0 is
857
1189
  }
858
1190
 
859
1191
  /**
860
- * @notice Returns the dependency type for a given project (`projectId`)
1192
+ * @notice Returns the dependency name and version for a given project (`projectId`)
861
1193
  * on a given core contract (`_contractAddress`). If no override is set,
862
1194
  * the core contract is called to retrieve the script type and version as
863
1195
  * dependency type. For any contract earlier than v3, that does not have
864
1196
  * an override set, this will revert.
865
- * @param _contractAddress Core contract address.
866
- * @param _projectId Project to return dependency type for.
867
- * @return dependencyType Identifier for the dependency (i.e. "type@version") used by project.
1197
+ * @param contractAddress Core contract address.
1198
+ * @param projectId Project to return dependency type for.
1199
+ * @return dependencyType Identifier for the dependency (i.e. "name@version") used by project.
868
1200
  */
869
- function getDependencyTypeForProject(
870
- address _contractAddress,
871
- uint256 _projectId
1201
+ function getDependencyNameAndVersionForProject(
1202
+ address contractAddress,
1203
+ uint256 projectId
872
1204
  ) external view returns (string memory) {
873
- _onlySupportedCoreContract(_contractAddress);
874
- bytes32 dependencyType = projectDependencyTypeOverrides[
875
- _contractAddress
876
- ][_projectId];
877
- if (dependencyType != bytes32(0)) {
878
- return dependencyType.toString();
1205
+ _onlySupportedCoreContract(contractAddress);
1206
+
1207
+ bytes32 dependencyNameAndVersion = DependencyRegistryStorageLib
1208
+ .s()
1209
+ .projectDependencyOverrides[contractAddress][projectId];
1210
+ if (dependencyNameAndVersion != bytes32(0)) {
1211
+ return dependencyNameAndVersion.toString();
879
1212
  }
880
1213
 
881
1214
  try
882
- IDependencyRegistryCompatibleV0(_contractAddress)
883
- .projectScriptDetails(_projectId)
1215
+ IDependencyRegistryCompatibleV0(contractAddress)
1216
+ .projectScriptDetails(projectId)
884
1217
  returns (string memory scriptTypeAndVersion, string memory, uint256) {
885
1218
  return scriptTypeAndVersion;
886
1219
  } catch {
@@ -896,13 +1229,13 @@ contract DependencyRegistryV0 is
896
1229
  * determined by this contract's current Admin ACL contract. Expected use
897
1230
  * cases include minter contracts checking if caller is allowed to call
898
1231
  * admin-gated functions on minter contracts.
899
- * @param _sender Address of the sender calling function with selector
900
- * `_selector` on contract `_contract`.
901
- * @param _contract Address of the contract being called by `_sender`.
902
- * @param _selector Function selector of the function being called by
903
- * `_sender`.
904
- * @return bool Whether `_sender` is allowed to call function with selector
905
- * `_selector` on contract `_contract`.
1232
+ * @param sender Address of the sender calling function with selector
1233
+ * `selector` on contract `contract_`.
1234
+ * @param contract_ Address of the contract being called by `sender`.
1235
+ * @param selector Function selector of the function being called by
1236
+ * `sender`.
1237
+ * @return bool Whether `sender` is allowed to call function with selector
1238
+ * `selector` on contract `contract_`.
906
1239
  * @dev assumes the Admin ACL contract is the owner of this contract, which
907
1240
  * is expected to always be true.
908
1241
  * @dev adminACLContract is expected to either be null address (if owner
@@ -910,13 +1243,17 @@ contract DependencyRegistryV0 is
910
1243
  * null address first to avoid revert when admin has renounced ownership.
911
1244
  */
912
1245
  function adminACLAllowed(
913
- address _sender,
914
- address _contract,
915
- bytes4 _selector
1246
+ address sender,
1247
+ address contract_,
1248
+ bytes4 selector
916
1249
  ) public returns (bool) {
917
1250
  return
918
1251
  owner() != address(0) &&
919
- adminACLContract.allowed(_sender, _contract, _selector);
1252
+ DependencyRegistryStorageLib.s().adminACLContract.allowed(
1253
+ sender,
1254
+ contract_,
1255
+ selector
1256
+ );
920
1257
  }
921
1258
 
922
1259
  /**
@@ -935,6 +1272,14 @@ contract DependencyRegistryV0 is
935
1272
  return OwnableUpgradeable.owner();
936
1273
  }
937
1274
 
1275
+ /**
1276
+ * @notice This function returns the address of the admin ACL contract.
1277
+ * @return address Address of the admin ACL contract.
1278
+ */
1279
+ function adminACLContract() public view returns (address) {
1280
+ return address(DependencyRegistryStorageLib.s().adminACLContract);
1281
+ }
1282
+
938
1283
  /**
939
1284
  * @notice Transfers ownership of the contract to a new account (`newOwner`).
940
1285
  * Internal function without access restriction.
@@ -945,6 +1290,8 @@ contract DependencyRegistryV0 is
945
1290
  */
946
1291
  function _transferOwnership(address newOwner) internal override {
947
1292
  OwnableUpgradeable._transferOwnership(newOwner);
948
- adminACLContract = IAdminACLV0(newOwner);
1293
+ DependencyRegistryStorageLib.s().adminACLContract = IAdminACLV0(
1294
+ newOwner
1295
+ );
949
1296
  }
950
1297
  }