@artblocks/contracts 1.1.0 → 1.2.1

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 (326) hide show
  1. package/README.md +86 -34
  2. package/artifacts/contracts/AdminACLV0.sol/AdminACLV0.json +2 -2
  3. package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
  4. package/artifacts/contracts/BytecodeStorageReaders/BytecodeStorageReaderContractV2.sol/BytecodeStorageReaderContractV2.json +201 -0
  5. package/artifacts/contracts/BytecodeStorageReaders/UniversalBytecodeStorageReader.sol/UniversalBytecodeStorageReader.json +154 -0
  6. package/artifacts/contracts/BytecodeStorageV2Writer.sol/BytecodeStorageV2Writer.json +87 -0
  7. package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +403 -155
  8. package/artifacts/contracts/GenArt721CoreV3_Curated.sol/GenArt721CoreV3_Curated.json +2493 -0
  9. package/artifacts/contracts/OwnedCreate2FactoryV0.sol/OwnedCreate2FactoryV0.json +311 -0
  10. package/artifacts/contracts/archive/GenArt721CoreV3.sol/GenArt721CoreV3.json +2060 -0
  11. package/artifacts/contracts/archive/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +2034 -0
  12. package/artifacts/contracts/{minter-suite → archive/minter-suite}/Minters/MinterBase_v0_1_1.sol/MinterBase.json +1 -1
  13. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
  14. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
  15. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExp}/MinterDAExpV4.sol/MinterDAExpV4.json +3 -3
  16. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  17. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  18. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExpSettlement}/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +3 -3
  19. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
  20. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
  21. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDALin}/MinterDALinV4.sol/MinterDALinV4.json +3 -3
  22. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
  23. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
  24. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
  25. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterHolder}/MinterHolderV4.sol/MinterHolderV4.json +3 -3
  26. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
  27. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
  28. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
  29. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
  30. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterMerkle}/MinterMerkleV5.sol/MinterMerkleV5.json +3 -3
  31. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +54 -49
  32. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol/MinterPolyptychV0.json +3 -3
  33. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSEA}/MinterSEAV0.sol/MinterSEAV0.json +3 -3
  34. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  35. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  36. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPrice}/MinterSetPriceV4.sol/MinterSetPriceV4.json +3 -3
  37. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol/MinterSetPriceERC20V0.json +65 -2
  38. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol/MinterSetPriceERC20V1.json +65 -2
  39. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  40. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  41. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +807 -0
  42. package/artifacts/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol/GenArt721MinterBurner_PBAB.json +65 -2
  43. package/artifacts/contracts/engine/V2/GenArt721Minter_PBAB.sol/GenArt721Minter_PBAB.json +65 -2
  44. package/artifacts/contracts/engine/V3/EngineFactoryV0.sol/EngineFactoryV0.json +624 -0
  45. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +613 -216
  46. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +805 -206
  47. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +51 -8
  48. package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +2 -2
  49. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +51 -8
  50. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +59 -54
  51. package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +2 -2
  52. package/artifacts/contracts/generator/AddressChunks.sol/AddressChunks.json +10 -0
  53. package/artifacts/contracts/generator/GenArt721GeneratorV0.sol/GenArt721GeneratorV0.json +333 -0
  54. package/artifacts/contracts/generator/GenArt721GeneratorV0.sol/ILegacyGenArt721CoreV2_PBAB_Flex.json +47 -0
  55. package/artifacts/contracts/interfaces/v0.8.x/IAdminACLV0_Extended.sol/IAdminACLV0_Extended.json +140 -0
  56. package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReader.sol/IBytecodeStorageReader.json +7 -7
  57. package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol/IBytecodeStorageReaderV2.json +130 -0
  58. package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReader_Base.sol/IBytecodeStorageReader_Base.json +30 -0
  59. package/artifacts/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol/ICoreRegistryV1.json +13 -0
  60. package/artifacts/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +228 -45
  61. package/artifacts/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol/IEngineFactoryV0.json +283 -0
  62. package/artifacts/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV0.sol/IFilteredMinterDAExpSettlementV0.json +12 -12
  63. package/artifacts/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV1.sol/IFilteredMinterDAExpSettlementV1.json +12 -12
  64. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +53 -48
  65. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +53 -48
  66. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +198 -90
  67. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +198 -90
  68. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.json +1065 -0
  69. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol/IGenArt721CoreContractV3_Engine_PreV3p2.json +778 -0
  70. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_ProjectFinance.sol/IGenArt721CoreContractV3_ProjectFinance.json +87 -0
  71. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreProjectScriptV0.sol/IGenArt721CoreProjectScriptV0.json +59 -0
  72. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreProjectScriptV1.sol/IGenArt721CoreProjectScriptV1.json +64 -0
  73. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreTokenHashProviderV0.sol/IGenArt721CoreTokenHashProviderV0.json +30 -0
  74. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreTokenHashProviderV1.sol/IGenArt721CoreTokenHashProviderV1.json +30 -0
  75. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721GeneratorV0.sol/IGenArt721GeneratorV0.json +63 -0
  76. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721Minter_PBAB.sol/IGenArt721Minter_PBAB.json +279 -0
  77. package/artifacts/contracts/interfaces/v0.8.x/IOwnedCreate2FactoryV0.sol/IOwnedCreate2FactoryV0.json +74 -0
  78. package/artifacts/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol/IPseudorandomAtomic.json +1 -1
  79. package/artifacts/contracts/interfaces/v0.8.x/ISeaDropShimForContract.sol/ISeaDropShimForContract.json +37 -0
  80. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol/ISharedMinterDAExpSettlementV0.json +18 -0
  81. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMinPriceV0.sol/ISharedMinterMinPriceV0.json +37 -0
  82. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterRAMV0.sol/ISharedMinterRAMV0.json +62 -0
  83. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterRequired.sol/ISharedMinterRequired.json +37 -0
  84. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol/ISharedMinterSEAV0.json +1 -1
  85. package/artifacts/contracts/interfaces/v0.8.x/ISplitAtomicFactoryV0.sol/ISplitAtomicFactoryV0.json +170 -0
  86. package/artifacts/contracts/interfaces/v0.8.x/ISplitAtomicV0.sol/ISplitAtomicV0.json +126 -0
  87. package/artifacts/contracts/interfaces/v0.8.x/ISplitProviderV0.sol/ISplitProviderV0.json +98 -0
  88. package/artifacts/contracts/interfaces/v0.8.x/IUniversalBytecodeStorageReader.sol/IUniversalBytecodeStorageReader.json +56 -0
  89. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ERC721SeaDropStructsErrorsAndEvents.sol/ERC721SeaDropStructsErrorsAndEvents.json +43 -0
  90. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/OpenSea/INonFungibleSeaDropToken.sol/INonFungibleSeaDropToken.json +715 -0
  91. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ISeaDrop.sol/ISeaDrop.json +1571 -0
  92. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ISeaDropTokenContractMetadata.sol/ISeaDropTokenContractMetadata.json +345 -0
  93. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/OpenSea/SeaDropErrorsAndEvents.sol/SeaDropErrorsAndEvents.json +717 -0
  94. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/splits-0x-v2/ISplitFactoryV2.sol/ISplitFactoryV2.json +123 -0
  95. package/artifacts/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol/DelegationRegistry.json +2 -2
  96. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeMock.sol/GnosisSafeMock.json +2 -2
  97. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeProxyFactoryMock.sol/GnosisSafeProxyFactoryMock.json +2 -2
  98. package/artifacts/contracts/libs/integration-refs/gnosis-safe/MultiSendMock.sol/MultiSendMock.json +2 -2
  99. package/artifacts/contracts/libs/integration-refs/weth9/weth9.sol/WETH9_.json +2 -2
  100. package/artifacts/contracts/libs/v0.8.x/ABHelpers.sol/ABHelpers.json +2 -2
  101. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +2 -2
  102. package/artifacts/contracts/libs/v0.8.x/BitMap.sol/BitMaps256.json +10 -0
  103. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV0.sol/BytecodeStorage.json +2 -2
  104. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageReader.json +2 -2
  105. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageWriter.json +2 -2
  106. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageReader.json +214 -0
  107. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageWriter.json +10 -0
  108. package/artifacts/contracts/libs/v0.8.x/Bytes32Strings.sol/Bytes32Strings.json +2 -2
  109. package/artifacts/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol/DependencyRegistryStorageLib.json +10 -0
  110. package/artifacts/contracts/libs/v0.8.x/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +2 -2
  111. package/artifacts/contracts/libs/v0.8.x/ERC721_PackedHashSeedV1.sol/ERC721_PackedHashSeedV1.json +444 -0
  112. package/artifacts/contracts/libs/v0.8.x/JsonStatic.sol/JsonStatic.json +10 -0
  113. package/artifacts/contracts/libs/v0.8.x/PackedBools.sol/PackedBools.json +10 -0
  114. package/artifacts/contracts/libs/v0.8.x/SSTORE2.sol/SSTORE2.json +2 -2
  115. package/artifacts/contracts/libs/v0.8.x/V3FlexLib.sol/V3FlexLib.json +195 -0
  116. package/artifacts/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol/DAExpLib.json +2 -2
  117. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALib.sol/DALib.json +2 -2
  118. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +2 -2
  119. package/artifacts/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol/GenericMinterEventsLib.json +2 -2
  120. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +2 -2
  121. package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +2 -2
  122. package/artifacts/contracts/libs/v0.8.x/minter-libs/MinPriceLib.sol/MinPriceLib.json +24 -0
  123. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +2 -2
  124. package/artifacts/contracts/libs/v0.8.x/minter-libs/RAMLib.sol/RAMLib.json +398 -0
  125. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +2 -2
  126. package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +2 -2
  127. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +2 -2
  128. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +2 -2
  129. package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +2 -2
  130. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  131. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +2 -2
  132. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +2 -2
  133. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +2 -2
  134. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +2 -2
  135. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +2 -2
  136. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +2 -2
  137. package/artifacts/contracts/minter-suite/Minters/MinterMinPriceMerkleV0.sol/MinterMinPriceMerkleV0.json +664 -0
  138. package/artifacts/contracts/minter-suite/Minters/MinterMinPriceV0.sol/MinterMinPriceV0.json +387 -0
  139. package/artifacts/contracts/minter-suite/Minters/MinterRAMV0.sol/MinterRAMV0.json +1374 -0
  140. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +7 -7
  141. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +2 -2
  142. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +2 -2
  143. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +2 -2
  144. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +2 -2
  145. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +2 -2
  146. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +2 -2
  147. package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol/MinterSetPriceV5_SingleCore.json +417 -0
  148. package/artifacts/contracts/minter-suite/Minters/one-off/SeaDropXArtBlocksShim.sol/SeaDropXArtBlocksShim.json +1206 -0
  149. package/artifacts/contracts/mock/BytecodeV1LibCallsMock.sol/BytecodeV1LibCallsMock.json +2 -2
  150. package/artifacts/contracts/mock/BytecodeV2LibCallsMock.sol/BytecodeV2LibCallsMock.json +154 -0
  151. package/artifacts/contracts/mock/BytecodeV2TextCR_DMock.sol/BytecodeV2TextCR_DMock.json +428 -0
  152. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
  153. package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +2 -2
  154. package/artifacts/contracts/mock/ERC20MockAltDecimals.sol/ERC20MockAltDecimals.json +318 -0
  155. package/artifacts/contracts/mock/ForceSendMock.sol/ForceSendMock.json +24 -0
  156. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +2 -2
  157. package/artifacts/contracts/mock/Mock0xSplitsV2PullFactory.sol/Mock0xSplitsV2PullFactory.json +149 -0
  158. package/artifacts/contracts/mock/Mock0xSplitsV2Splitter.sol/Mock0xSplitsV2Splitter.json +99 -0
  159. package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +20 -2
  160. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +20 -2
  161. package/artifacts/contracts/mock/MockFileStore.sol/MockFileStore.json +35 -0
  162. package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +2 -2
  163. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  164. package/artifacts/contracts/mock/ReentrancyGenArt721MinterMock.sol/ReentrancyGenArt721MinterMock.json +100 -0
  165. package/artifacts/contracts/mock/ReentrancyHolderMock.sol/ReentrancyHolderMock.json +2 -2
  166. package/artifacts/contracts/mock/ReentrancyHolderMockShared.sol/ReentrancyHolderMockShared.json +2 -2
  167. package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
  168. package/artifacts/contracts/mock/ReentrancyMerkleMockShared.sol/ReentrancyMerkleMockShared.json +2 -2
  169. package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
  170. package/artifacts/contracts/mock/ReentrancyMockShared.sol/ReentrancyMockShared.json +2 -2
  171. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +2 -2
  172. package/artifacts/contracts/mock/ReentrancySEAMockShared.sol/ReentrancySEAAutoBidderMockShared.json +2 -2
  173. package/artifacts/contracts/mock/ReentrancySplitterMocks.sol/ReentrancySplitterDrainETHMock.json +54 -0
  174. package/artifacts/contracts/mock/ReentrancySplitterMocks.sol/ReentrancySplitterSendETHMock.json +54 -0
  175. package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +2 -2
  176. package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +2 -2
  177. package/artifacts/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol/PseudorandomAtomic.json +2 -2
  178. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +2 -2
  179. package/artifacts/contracts/split/SplitAtomicFactoryV0.sol/SplitAtomicFactoryV0.json +203 -0
  180. package/artifacts/contracts/split/SplitAtomicV0.sol/SplitAtomicV0.json +168 -0
  181. package/artifacts/contracts/split/split-provider/SplitProviderV0.sol/SplitProviderV0.json +141 -0
  182. package/contracts/AdminACLV0.sol +6 -2
  183. package/contracts/AdminACLV1.sol +2 -2
  184. package/contracts/BytecodeStorageReaders/BytecodeStorageReaderContractV2.sol +103 -0
  185. package/contracts/BytecodeStorageReaders/UniversalBytecodeStorageReader.sol +70 -0
  186. package/contracts/BytecodeStorageV2Writer.sol +69 -0
  187. package/contracts/DependencyRegistryV0.sol +878 -430
  188. package/contracts/GenArt721CoreV3_Curated.sol +133 -0
  189. package/contracts/OwnedCreate2FactoryV0.sol +173 -0
  190. package/contracts/{GenArt721CoreV3.sol → archive/GenArt721CoreV3.sol} +56 -20
  191. package/contracts/{explorations → archive}/GenArt721CoreV3_Explorations.sol +49 -13
  192. package/contracts/{minter-suite → archive/minter-suite}/Minters/MinterBase_v0_1_1.sol +4 -4
  193. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExp}/MinterDAExpV4.sol +4 -4
  194. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +4 -4
  195. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol +5 -5
  196. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExpSettlement}/MinterDAExpSettlementV2.sol +8 -8
  197. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDALin}/MinterDALinV4.sol +4 -4
  198. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterHolder}/MinterHolderV4.sol +5 -5
  199. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterMerkle}/MinterMerkleV5.sol +5 -5
  200. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol +7 -7
  201. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSEA}/MinterSEAV0.sol +13 -13
  202. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPrice}/MinterSetPriceV4.sol +4 -4
  203. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol +82 -10
  204. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol +82 -10
  205. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPriceERC20}/MinterSetPriceERC20V4.sol +88 -21
  206. package/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol +81 -22
  207. package/contracts/engine/V2/GenArt721Minter_PBAB.sol +80 -22
  208. package/contracts/engine/V3/EngineFactoryV0.sol +427 -0
  209. package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +977 -502
  210. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +1137 -663
  211. package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +3 -3
  212. package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +1 -1
  213. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +2 -2
  214. package/contracts/generator/AddressChunks.sol +106 -0
  215. package/contracts/generator/GenArt721GeneratorV0.sol +1094 -0
  216. package/contracts/generator/scripty-support/Scripty.sol +5 -0
  217. package/contracts/interfaces/v0.8.x/IAdminACLV0_Extended.sol +20 -0
  218. package/contracts/interfaces/v0.8.x/IBytecodeStorageReader.sol +34 -36
  219. package/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol +25 -0
  220. package/contracts/interfaces/v0.8.x/IBytecodeStorageReader_Base.sol +20 -0
  221. package/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol +5 -0
  222. package/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol +141 -45
  223. package/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol +124 -0
  224. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV0.sol +1 -3
  225. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV1.sol +1 -3
  226. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpV1.sol +1 -3
  227. package/contracts/interfaces/v0.8.x/IFilteredMinterDALinV1.sol +1 -3
  228. package/contracts/interfaces/v0.8.x/IFilteredMinterHolderV2.sol +1 -3
  229. package/contracts/interfaces/v0.8.x/IFilteredMinterMerkleV2.sol +1 -3
  230. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol +126 -11
  231. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol +86 -8
  232. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol +26 -8
  233. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol +141 -0
  234. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol +78 -0
  235. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_ProjectFinance.sol +47 -0
  236. package/contracts/interfaces/v0.8.x/IGenArt721CoreProjectScriptV0.sol +22 -0
  237. package/contracts/interfaces/v0.8.x/IGenArt721CoreProjectScriptV1.sol +23 -0
  238. package/contracts/interfaces/v0.8.x/IGenArt721CoreTokenHashProviderV0.sol +11 -0
  239. package/contracts/interfaces/v0.8.x/IGenArt721CoreTokenHashProviderV1.sol +9 -0
  240. package/contracts/interfaces/v0.8.x/IGenArt721GeneratorV0.sol +14 -0
  241. package/contracts/interfaces/v0.8.x/IGenArt721Minter_PBAB.sol +91 -0
  242. package/contracts/interfaces/v0.8.x/IOwnedCreate2FactoryV0.sol +40 -0
  243. package/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol +1 -3
  244. package/contracts/interfaces/v0.8.x/ISeaDropShimForContract.sol +19 -0
  245. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +19 -0
  246. package/contracts/interfaces/v0.8.x/ISharedMinterMinPriceV0.sol +22 -0
  247. package/contracts/interfaces/v0.8.x/ISharedMinterRAMV0.sol +23 -0
  248. package/contracts/interfaces/v0.8.x/ISharedMinterRequired.sol +26 -0
  249. package/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol +1 -4
  250. package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +12 -6
  251. package/contracts/interfaces/v0.8.x/ISplitAtomicFactoryV0.sol +81 -0
  252. package/contracts/interfaces/v0.8.x/ISplitAtomicV0.sol +72 -0
  253. package/contracts/interfaces/v0.8.x/ISplitProviderV0.sol +49 -0
  254. package/contracts/interfaces/v0.8.x/IUniversalBytecodeStorageReader.sol +28 -0
  255. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ERC721SeaDropStructsErrorsAndEvents.sol +58 -0
  256. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/INonFungibleSeaDropToken.sol +186 -0
  257. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ISeaDrop.sol +337 -0
  258. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ISeaDropTokenContractMetadata.sol +152 -0
  259. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/SeaDropErrorsAndEvents.sol +320 -0
  260. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/SeaDropStructs.sol +146 -0
  261. package/contracts/interfaces/v0.8.x/integration-refs/splits-0x-v2/ISplitFactoryV2.sol +62 -0
  262. package/contracts/libs/v0.8.x/ABHelpers.sol +18 -4
  263. package/contracts/libs/v0.8.x/BitMap.sol +112 -0
  264. package/contracts/libs/v0.8.x/BytecodeStorageV2.sol +593 -0
  265. package/contracts/libs/v0.8.x/Bytes32Strings.sol +20 -0
  266. package/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol +98 -0
  267. package/contracts/libs/v0.8.x/ERC721_PackedHashSeedV1.sol +591 -0
  268. package/contracts/libs/v0.8.x/JsonStatic.sol +373 -0
  269. package/contracts/libs/v0.8.x/PackedBools.sol +42 -0
  270. package/contracts/libs/v0.8.x/V3FlexLib.sol +597 -0
  271. package/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol +10 -12
  272. package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +4 -9
  273. package/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol +44 -44
  274. package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +64 -63
  275. package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +14 -10
  276. package/contracts/libs/v0.8.x/minter-libs/MinPriceLib.sol +64 -0
  277. package/contracts/libs/v0.8.x/minter-libs/RAMLib.sol +2927 -0
  278. package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +60 -62
  279. package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +4 -8
  280. package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +92 -89
  281. package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +128 -15
  282. package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +5 -4
  283. package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +16 -10
  284. package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +2 -2
  285. package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +19 -15
  286. package/contracts/minter-suite/Minters/MinterDAExpV5.sol +2 -2
  287. package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +2 -2
  288. package/contracts/minter-suite/Minters/MinterDALinV5.sol +2 -2
  289. package/contracts/minter-suite/Minters/MinterMinPriceMerkleV0.sol +765 -0
  290. package/contracts/minter-suite/Minters/MinterMinPriceV0.sol +462 -0
  291. package/contracts/minter-suite/Minters/MinterRAMV0.sol +1205 -0
  292. package/contracts/minter-suite/Minters/MinterSEAV1.sol +21 -32
  293. package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +17 -8
  294. package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +2 -2
  295. package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +2 -2
  296. package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +23 -9
  297. package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +2 -2
  298. package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +2 -2
  299. package/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol +446 -0
  300. package/contracts/minter-suite/Minters/one-off/SeaDropXArtBlocksShim.sol +869 -0
  301. package/contracts/mock/BytecodeV2LibCallsMock.sol +128 -0
  302. package/contracts/mock/BytecodeV2TextCR_DMock.sol +316 -0
  303. package/contracts/mock/ERC20MockAltDecimals.sol +31 -0
  304. package/contracts/mock/ForceSendMock.sol +22 -0
  305. package/contracts/mock/Mock0xSplitsV2PullFactory.sol +75 -0
  306. package/contracts/mock/Mock0xSplitsV2Splitter.sol +47 -0
  307. package/contracts/mock/MockAdminACLV0.sol +21 -0
  308. package/contracts/mock/MockAdminACLV0_PROHIBITION.sol +21 -0
  309. package/contracts/mock/MockFileStore.sol +22 -0
  310. package/contracts/mock/ReentrancyGenArt721MinterMock.sol +47 -0
  311. package/contracts/mock/ReentrancySplitterMocks.sol +67 -0
  312. package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +1 -1
  313. package/contracts/randomizer/shared/SharedRandomizerV0.sol +1 -1
  314. package/contracts/split/SplitAtomicFactoryV0.sol +121 -0
  315. package/contracts/split/SplitAtomicV0.sol +265 -0
  316. package/contracts/split/split-provider/SplitProviderV0.sol +201 -0
  317. package/package.json +66 -36
  318. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +0 -1965
  319. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +0 -1939
  320. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +0 -768
  321. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +0 -208
  322. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol/GenArt721RoyaltyOverride_PBAB.json +0 -301
  323. package/contracts/archive/readme.md +0 -16
  324. package/contracts/engine/README.md +0 -21
  325. package/contracts/royalty-registry/GenArt721RoyaltyOverride.sol +0 -168
  326. package/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol +0 -221
@@ -0,0 +1,597 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ import {IGenArt721CoreContractV3_Engine_Flex} from "../../interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol";
7
+ import {IBytecodeStorageReader_Base} from "../../interfaces/v0.8.x/IBytecodeStorageReader_Base.sol";
8
+
9
+ import {BytecodeStorageWriter} from "./BytecodeStorageV2.sol";
10
+
11
+ /**
12
+ * @title Art Blocks V3 Engine Flex - External Helper Library
13
+ * @notice This library is designed to offload bytecode from the V3 Engine
14
+ * Flex contract. It implements logic that may be accessed via DELEGATECALL for
15
+ * operations related to the V3 Engine Flex contract.
16
+ * @author Art Blocks Inc.
17
+ */
18
+
19
+ library V3FlexLib {
20
+ using BytecodeStorageWriter for string;
21
+ using BytecodeStorageWriter for bytes;
22
+ // For the purposes of this implementation, due to the limited scope and
23
+ // existing legacy infrastructure, the library emits the events
24
+ // defined in IGenArt721CoreContractV3_Engine_Flex.sol. The events are
25
+ // manually duplicated here
26
+ /**
27
+ * @notice When an external asset dependency is updated or added, this event is emitted.
28
+ * @param _projectId The project ID of the project that was updated.
29
+ * @param _index The index of the external asset dependency that was updated.
30
+ * @param _cid Field that contains the CID of the dependency if IPFS or ARWEAVE,
31
+ * empty string of ONCHAIN, or a string representation of the Art Blocks Dependency
32
+ * Registry's `dependencyNameAndVersion` if ART_BLOCKS_DEPENDENCY_REGISTRY.
33
+ * @param _dependencyType The type of the external asset dependency.
34
+ * @param _externalAssetDependencyCount The number of external asset dependencies.
35
+ */
36
+ event ExternalAssetDependencyUpdated(
37
+ uint256 indexed _projectId,
38
+ uint256 indexed _index,
39
+ string _cid,
40
+ IGenArt721CoreContractV3_Engine_Flex.ExternalAssetDependencyType _dependencyType,
41
+ uint24 _externalAssetDependencyCount
42
+ );
43
+
44
+ /**
45
+ * @notice The project id `_projectId` has had an external asset dependency removed at index `_index`.
46
+ */
47
+ event ExternalAssetDependencyRemoved(
48
+ uint256 indexed _projectId,
49
+ uint256 indexed _index
50
+ );
51
+
52
+ /**
53
+ * @notice The preferred gateway for dependency type `_dependencyType` has been updated to `_gatewayAddress`.
54
+ */
55
+ event GatewayUpdated(
56
+ IGenArt721CoreContractV3_Engine_Flex.ExternalAssetDependencyType indexed _dependencyType,
57
+ string _gatewayAddress
58
+ );
59
+
60
+ /**
61
+ * @notice The project id `_projectId` has had all external asset dependencies locked.
62
+ * @dev This is a one-way operation. Once locked, the external asset dependencies cannot be updated.
63
+ */
64
+ event ProjectExternalAssetDependenciesLocked(uint256 indexed _projectId);
65
+
66
+ // position of V3 Flex Lib storage, using a diamond storage pattern
67
+ // for this library
68
+ bytes32 constant V3_FLEX_LIB_STORAGE_POSITION =
69
+ keccak256("v3flexlib.storage");
70
+
71
+ // project-level variables
72
+ /**
73
+ * Struct used to store a project's currently configured price, and
74
+ * whether or not the price has been configured.
75
+ */
76
+ struct FlexProjectData {
77
+ bool externalAssetDependenciesLocked;
78
+ uint24 externalAssetDependencyCount;
79
+ mapping(uint256 => IGenArt721CoreContractV3_Engine_Flex.ExternalAssetDependency) externalAssetDependencies;
80
+ }
81
+
82
+ // Diamond storage pattern is used in this library
83
+ struct V3FlexLibStorage {
84
+ string preferredIPFSGateway;
85
+ string preferredArweaveGateway;
86
+ mapping(uint256 projectId => FlexProjectData) flexProjectsData;
87
+ }
88
+
89
+ /**
90
+ * @notice Updates preferredIPFSGateway to `_gateway`.
91
+ * @param _gateway The new preferred IPFS gateway.
92
+ */
93
+ function updateIPFSGateway(string calldata _gateway) external {
94
+ s().preferredIPFSGateway = _gateway;
95
+ emit GatewayUpdated({
96
+ _dependencyType: IGenArt721CoreContractV3_Engine_Flex
97
+ .ExternalAssetDependencyType
98
+ .IPFS,
99
+ _gatewayAddress: _gateway
100
+ });
101
+ }
102
+
103
+ /**
104
+ * @notice Updates preferredArweaveGateway to `_gateway`.
105
+ * @param _gateway The new preferred Arweave gateway.
106
+ */
107
+ function updateArweaveGateway(string calldata _gateway) external {
108
+ s().preferredArweaveGateway = _gateway;
109
+ emit GatewayUpdated({
110
+ _dependencyType: IGenArt721CoreContractV3_Engine_Flex
111
+ .ExternalAssetDependencyType
112
+ .ARWEAVE,
113
+ _gatewayAddress: _gateway
114
+ });
115
+ }
116
+
117
+ /**
118
+ * @notice Locks external asset dependencies for project `_projectId`.
119
+ * Reverts if the external asset dependencies are already locked.
120
+ * @dev This is a one-way operation. Once locked, the external asset dependencies cannot be updated.
121
+ * @param _projectId Project to be locked.
122
+ */
123
+ function lockProjectExternalAssetDependencies(uint256 _projectId) external {
124
+ FlexProjectData storage flexProjectData = getFlexProjectData(
125
+ _projectId
126
+ );
127
+ _onlyUnlockedProjectExternalAssetDependencies(flexProjectData);
128
+ flexProjectData.externalAssetDependenciesLocked = true;
129
+ emit ProjectExternalAssetDependenciesLocked(_projectId);
130
+ }
131
+
132
+ /**
133
+ * @notice Updates external asset dependency for project `_projectId`.
134
+ * @dev Making this an external function adds roughly 1% to the gas cost of adding an asset, but
135
+ * significantly reduces the bytecode of contracts using this library.
136
+ * @param _projectId Project to be updated.
137
+ * @param _index Asset index.
138
+ * @param _cidOrData Field that contains the CID of the dependency if IPFS or ARWEAVE,
139
+ * empty string of ONCHAIN, or a string representation of the Art Blocks Dependency
140
+ * Registry's `dependencyNameAndVersion` if ART_BLOCKS_DEPENDENCY_REGISTRY.
141
+ * @param _dependencyType Asset dependency type.
142
+ * 0 - IPFS
143
+ * 1 - ARWEAVE
144
+ * 2 - ONCHAIN
145
+ * 3 - ART_BLOCKS_DEPENDENCY_REGISTRY
146
+ */
147
+ function updateProjectExternalAssetDependency(
148
+ uint256 _projectId,
149
+ uint256 _index,
150
+ string memory _cidOrData,
151
+ IGenArt721CoreContractV3_Engine_Flex.ExternalAssetDependencyType _dependencyType
152
+ ) external {
153
+ FlexProjectData storage flexProjectData = getFlexProjectData(
154
+ _projectId
155
+ );
156
+ _onlyUnlockedProjectExternalAssetDependencies(flexProjectData);
157
+ uint24 assetCount = flexProjectData.externalAssetDependencyCount;
158
+ require(_index < assetCount, "Asset index out of range");
159
+ // @dev dependencyNameAndVersion are not validated against the dependency registry
160
+ // due to limitations of L1 reads on L2 networks at this time
161
+
162
+ IGenArt721CoreContractV3_Engine_Flex.ExternalAssetDependency
163
+ storage _oldDependency = flexProjectData.externalAssetDependencies[
164
+ _index
165
+ ];
166
+ IGenArt721CoreContractV3_Engine_Flex.ExternalAssetDependencyType _oldDependencyType = _oldDependency
167
+ .dependencyType;
168
+ // update the asset's dependency type to new value in storage
169
+ flexProjectData
170
+ .externalAssetDependencies[_index]
171
+ .dependencyType = _dependencyType;
172
+ // if the incoming dependency type is onchain, we need to write the data to bytecode
173
+ if (
174
+ _dependencyType ==
175
+ IGenArt721CoreContractV3_Engine_Flex
176
+ .ExternalAssetDependencyType
177
+ .ONCHAIN
178
+ ) {
179
+ if (
180
+ _oldDependencyType !=
181
+ IGenArt721CoreContractV3_Engine_Flex
182
+ .ExternalAssetDependencyType
183
+ .ONCHAIN
184
+ ) {
185
+ // we only need to set the cid to an empty string if we are replacing an offchain asset
186
+ // an onchain asset will already have an empty cid
187
+ flexProjectData.externalAssetDependencies[_index].cid = "";
188
+ }
189
+
190
+ flexProjectData
191
+ .externalAssetDependencies[_index]
192
+ .bytecodeAddress = _cidOrData.writeToBytecode();
193
+ // we don't want to emit data, so we emit the cid as an empty string
194
+ _cidOrData = "";
195
+ } else {
196
+ // incoming dependency type is not ONCHAIN, so we set the cid directly with either
197
+ // the incoming cid or string representation of the dependencyNameAndVersion
198
+ flexProjectData.externalAssetDependencies[_index].cid = _cidOrData;
199
+ // clear any previously populated bytecode address
200
+ flexProjectData
201
+ .externalAssetDependencies[_index]
202
+ .bytecodeAddress = address(0);
203
+ }
204
+ emit ExternalAssetDependencyUpdated({
205
+ _projectId: _projectId,
206
+ _index: _index,
207
+ _cid: _cidOrData,
208
+ _dependencyType: _dependencyType,
209
+ _externalAssetDependencyCount: assetCount
210
+ });
211
+ }
212
+
213
+ /**
214
+ * @notice Updates external asset dependency for project `_projectId` of type
215
+ * ONCHAIN using on-chain compression. This function stores the string
216
+ * in a compressed format on-chain. For reads, the compressed script is
217
+ * decompressed on-chain, ensuring the original text is reconstructed without
218
+ * external dependencies.
219
+ * @param _projectId Project to be updated.
220
+ * @param _index Asset index.
221
+ * @param _compressedString Pre-compressed string asset to be added.
222
+ */
223
+ function updateProjectExternalAssetDependencyOnChainCompressed(
224
+ uint256 _projectId,
225
+ uint256 _index,
226
+ bytes memory _compressedString
227
+ ) external {
228
+ FlexProjectData storage flexProjectData = getFlexProjectData(
229
+ _projectId
230
+ );
231
+ _onlyUnlockedProjectExternalAssetDependencies(flexProjectData);
232
+
233
+ // check that the index is within the range of the asset count
234
+ uint24 assetCount = flexProjectData.externalAssetDependencyCount;
235
+ require(_index < assetCount, "Asset index out of range");
236
+
237
+ // EFFECTS
238
+ // overwrite the relevant fields of the previous asset, assigning bytecodeAddress directly
239
+ IGenArt721CoreContractV3_Engine_Flex.ExternalAssetDependency
240
+ storage currentDependency = flexProjectData
241
+ .externalAssetDependencies[_index];
242
+ currentDependency.cid = "";
243
+ currentDependency.dependencyType = IGenArt721CoreContractV3_Engine_Flex
244
+ .ExternalAssetDependencyType
245
+ .ONCHAIN;
246
+ currentDependency.bytecodeAddress = _compressedString
247
+ .writeToBytecodeCompressed();
248
+
249
+ // emit the event
250
+ emit ExternalAssetDependencyUpdated({
251
+ _projectId: _projectId,
252
+ _index: _index,
253
+ _cid: "",
254
+ _dependencyType: IGenArt721CoreContractV3_Engine_Flex
255
+ .ExternalAssetDependencyType
256
+ .ONCHAIN,
257
+ _externalAssetDependencyCount: assetCount
258
+ });
259
+ }
260
+
261
+ /**
262
+ * @notice Updates external asset dependency for project `_projectId` at
263
+ * index `_index`, with data at BytecodeStorage-compatible address
264
+ * `_assetAddress`.
265
+ * @param _projectId Project to be updated.
266
+ * @param _index Asset index.
267
+ * @param _assetAddress Address of the on-chain asset.
268
+ */
269
+ function updateProjectAssetDependencyOnChainAtAddress(
270
+ uint256 _projectId,
271
+ uint256 _index,
272
+ address _assetAddress
273
+ ) external {
274
+ // CHECKS
275
+ FlexProjectData storage flexProjectData = getFlexProjectData(
276
+ _projectId
277
+ );
278
+ _onlyUnlockedProjectExternalAssetDependencies(flexProjectData);
279
+ uint24 assetCount = flexProjectData.externalAssetDependencyCount;
280
+ require(_index < assetCount, "Asset index out of range");
281
+
282
+ // EFFECTS
283
+ // overwrite the relevant fields of the previous asset
284
+ IGenArt721CoreContractV3_Engine_Flex.ExternalAssetDependency
285
+ storage currentDependency = flexProjectData
286
+ .externalAssetDependencies[_index];
287
+ currentDependency.cid = "";
288
+ currentDependency.dependencyType = IGenArt721CoreContractV3_Engine_Flex
289
+ .ExternalAssetDependencyType
290
+ .ONCHAIN;
291
+ currentDependency.bytecodeAddress = _assetAddress;
292
+
293
+ // emit the event
294
+ emit ExternalAssetDependencyUpdated({
295
+ _projectId: _projectId,
296
+ _index: _index,
297
+ _cid: "",
298
+ _dependencyType: IGenArt721CoreContractV3_Engine_Flex
299
+ .ExternalAssetDependencyType
300
+ .ONCHAIN,
301
+ _externalAssetDependencyCount: assetCount
302
+ });
303
+ }
304
+
305
+ /**
306
+ * @notice Removes external asset dependency for project `_projectId` at index `_index`.
307
+ * Removal is done by swapping the element to be removed with the last element in the array, then deleting this last element.
308
+ * Assets with indices higher than `_index` can have their indices adjusted as a result of this operation.
309
+ * @param _projectId Project to be updated.
310
+ * @param _index Asset index
311
+ */
312
+ function removeProjectExternalAssetDependency(
313
+ uint256 _projectId,
314
+ uint256 _index
315
+ ) external {
316
+ FlexProjectData storage flexProjectData = getFlexProjectData(
317
+ _projectId
318
+ );
319
+ _onlyUnlockedProjectExternalAssetDependencies(flexProjectData);
320
+ // ensure the index is within the range of the asset count
321
+ uint24 assetCount = flexProjectData.externalAssetDependencyCount;
322
+ require(_index < assetCount, "Asset index out of range");
323
+ // @dev solidity underflow will revert on the following statement if assetCount is 0
324
+ uint24 lastElementIndex = assetCount - 1;
325
+ // for UX purposes, only allow removal of the last lastElementIndex
326
+ require(_index == lastElementIndex, "Only removal of last asset");
327
+
328
+ // @dev simply delete last element; no need to copy last to deleted index due to require statement above
329
+
330
+ delete flexProjectData.externalAssetDependencies[lastElementIndex];
331
+
332
+ flexProjectData.externalAssetDependencyCount = lastElementIndex;
333
+
334
+ emit ExternalAssetDependencyRemoved({
335
+ _projectId: _projectId,
336
+ _index: _index
337
+ });
338
+ }
339
+
340
+ /**
341
+ * @notice Adds external asset dependency for project `_projectId`.
342
+ * @dev Making this an external function adds roughly 1% to the gas cost of adding an asset, but
343
+ * significantly reduces the bytecode of contracts using this library.
344
+ * @param _projectId Project to be updated.
345
+ * @param _cidOrData Field that contains the CID of the dependency if IPFS or ARWEAVE,
346
+ * empty string of ONCHAIN, or a string representation of the Art Blocks Dependency
347
+ * Registry's `dependencyNameAndVersion` if ART_BLOCKS_DEPENDENCY_REGISTRY.
348
+ * @param _dependencyType Asset dependency type.
349
+ * 0 - IPFS
350
+ * 1 - ARWEAVE
351
+ * 2 - ONCHAIN
352
+ * 3 - ART_BLOCKS_DEPENDENCY_REGISTRY
353
+ */
354
+ function addProjectExternalAssetDependency(
355
+ uint256 _projectId,
356
+ string memory _cidOrData,
357
+ IGenArt721CoreContractV3_Engine_Flex.ExternalAssetDependencyType _dependencyType
358
+ ) external {
359
+ FlexProjectData storage flexProjectData = getFlexProjectData(
360
+ _projectId
361
+ );
362
+ _onlyUnlockedProjectExternalAssetDependencies(flexProjectData);
363
+ // @dev dependencyNameAndVersion are not validated against the dependency registry
364
+ // due to limitations of L1 reads on L2 networks at this time
365
+
366
+ uint24 assetCount = flexProjectData.externalAssetDependencyCount;
367
+ address _bytecodeAddress = address(0);
368
+ // if the incoming dependency type is onchain, we need to write the data to bytecode
369
+ if (
370
+ _dependencyType ==
371
+ IGenArt721CoreContractV3_Engine_Flex
372
+ .ExternalAssetDependencyType
373
+ .ONCHAIN
374
+ ) {
375
+ _bytecodeAddress = _cidOrData.writeToBytecode();
376
+ // we don't want to assign or emit data, so we emit the cid as an empty string
377
+ _cidOrData = "";
378
+ }
379
+
380
+ // append the new asset to the end of the project's asset storage array
381
+ flexProjectData.externalAssetDependencies[
382
+ assetCount
383
+ ] = IGenArt721CoreContractV3_Engine_Flex.ExternalAssetDependency({
384
+ cid: _cidOrData,
385
+ dependencyType: _dependencyType,
386
+ bytecodeAddress: _bytecodeAddress
387
+ });
388
+ // increment the project's asset count
389
+ flexProjectData.externalAssetDependencyCount = assetCount + 1;
390
+
391
+ // emit event indicating the asset has been added
392
+ emit ExternalAssetDependencyUpdated({
393
+ _projectId: _projectId,
394
+ _index: assetCount,
395
+ _cid: _cidOrData,
396
+ _dependencyType: _dependencyType,
397
+ _externalAssetDependencyCount: assetCount + 1
398
+ });
399
+ }
400
+
401
+ /**
402
+ * @notice Adds external asset dependency for project `_projectId` of type
403
+ * ONCHAIN using on-chain compression. This function stores the string
404
+ * in a compressed format on-chain. For reads, the compressed script is
405
+ * decompressed on-chain, ensuring the original text is reconstructed without
406
+ * external dependencies.
407
+ * @param _projectId Project to be updated.
408
+ * @param _compressedString Pre-compressed string asset to be added.
409
+ */
410
+ function addProjectExternalAssetDependencyOnChainCompressed(
411
+ uint256 _projectId,
412
+ bytes memory _compressedString
413
+ ) external {
414
+ FlexProjectData storage flexProjectData = getFlexProjectData(
415
+ _projectId
416
+ );
417
+ _onlyUnlockedProjectExternalAssetDependencies(flexProjectData);
418
+
419
+ // append the new asset to the end of the project's asset storage array
420
+ uint24 assetCount = flexProjectData.externalAssetDependencyCount;
421
+ flexProjectData.externalAssetDependencies[
422
+ assetCount
423
+ ] = IGenArt721CoreContractV3_Engine_Flex.ExternalAssetDependency({
424
+ cid: "",
425
+ dependencyType: IGenArt721CoreContractV3_Engine_Flex
426
+ .ExternalAssetDependencyType
427
+ .ONCHAIN,
428
+ bytecodeAddress: _compressedString.writeToBytecodeCompressed()
429
+ });
430
+
431
+ // increment the asset count
432
+ flexProjectData.externalAssetDependencyCount = assetCount + 1;
433
+
434
+ // emit event indicating the asset has been added
435
+ emit ExternalAssetDependencyUpdated({
436
+ _projectId: _projectId,
437
+ _index: assetCount,
438
+ _cid: "",
439
+ _dependencyType: IGenArt721CoreContractV3_Engine_Flex
440
+ .ExternalAssetDependencyType
441
+ .ONCHAIN,
442
+ _externalAssetDependencyCount: assetCount + 1
443
+ });
444
+ }
445
+
446
+ /**
447
+ * @notice Adds an on-chain external asset dependency for project
448
+ * `_projectId`, with data at BytecodeStorage-compatible address
449
+ * `_assetAddress`.
450
+ * @param _projectId Project to be updated.
451
+ * @param _assetAddress Address of the BytecodeStorageReader-compatible on-chain asset.
452
+ */
453
+ function addProjectAssetDependencyOnChainAtAddress(
454
+ uint256 _projectId,
455
+ address _assetAddress
456
+ ) external {
457
+ FlexProjectData storage flexProjectData = getFlexProjectData(
458
+ _projectId
459
+ );
460
+ _onlyUnlockedProjectExternalAssetDependencies(flexProjectData);
461
+
462
+ // append the new asset to the end of the project's asset storage array
463
+ uint24 assetCount = flexProjectData.externalAssetDependencyCount;
464
+ flexProjectData.externalAssetDependencies[
465
+ assetCount
466
+ ] = IGenArt721CoreContractV3_Engine_Flex.ExternalAssetDependency({
467
+ cid: "",
468
+ dependencyType: IGenArt721CoreContractV3_Engine_Flex
469
+ .ExternalAssetDependencyType
470
+ .ONCHAIN,
471
+ bytecodeAddress: _assetAddress
472
+ });
473
+
474
+ // increment the asset count
475
+ flexProjectData.externalAssetDependencyCount = assetCount + 1;
476
+
477
+ // emit event indicating the asset has been added
478
+ emit ExternalAssetDependencyUpdated({
479
+ _projectId: _projectId,
480
+ _index: assetCount,
481
+ _cid: "",
482
+ _dependencyType: IGenArt721CoreContractV3_Engine_Flex
483
+ .ExternalAssetDependencyType
484
+ .ONCHAIN,
485
+ _externalAssetDependencyCount: assetCount + 1
486
+ });
487
+ }
488
+
489
+ /**
490
+ * @notice Returns external asset dependency count for project `_projectId` at index `_index`.
491
+ */
492
+ function projectExternalAssetDependencyCount(
493
+ uint256 _projectId
494
+ ) external view returns (uint256) {
495
+ FlexProjectData storage flexProjectData = getFlexProjectData(
496
+ _projectId
497
+ );
498
+ return uint256(flexProjectData.externalAssetDependencyCount);
499
+ }
500
+
501
+ /**
502
+ * @notice Returns external asset dependency for project `_projectId` at index `_index`.
503
+ * If the dependencyType is ONCHAIN, the `data` field will contain the extrated bytecode data and `cid`
504
+ * will be an empty string. Conversly, for any other dependencyType, the `data` field will be an empty string
505
+ * and the `bytecodeAddress` will point to the zero address.
506
+ * @param _projectId Project to get external asset dependency for.
507
+ * @param _index Index of the external asset dependency.
508
+ * @param _bytecodeStorageReaderContract The bytecode storage reader contract to use for reading on-chain
509
+ * dependencies; only used if the dependency is of type ONCHAIN.
510
+ */
511
+ function projectExternalAssetDependencyByIndex(
512
+ uint256 _projectId,
513
+ uint256 _index,
514
+ IBytecodeStorageReader_Base _bytecodeStorageReaderContract
515
+ )
516
+ external
517
+ view
518
+ returns (
519
+ IGenArt721CoreContractV3_Engine_Flex.ExternalAssetDependencyWithData
520
+ memory
521
+ )
522
+ {
523
+ FlexProjectData storage flexProjectData = getFlexProjectData(
524
+ _projectId
525
+ );
526
+ IGenArt721CoreContractV3_Engine_Flex.ExternalAssetDependency
527
+ storage _dependency = flexProjectData.externalAssetDependencies[
528
+ _index
529
+ ];
530
+ address _bytecodeAddress = _dependency.bytecodeAddress;
531
+
532
+ return
533
+ IGenArt721CoreContractV3_Engine_Flex
534
+ .ExternalAssetDependencyWithData({
535
+ dependencyType: _dependency.dependencyType,
536
+ cid: _dependency.cid,
537
+ bytecodeAddress: _bytecodeAddress,
538
+ data: (_dependency.dependencyType ==
539
+ IGenArt721CoreContractV3_Engine_Flex
540
+ .ExternalAssetDependencyType
541
+ .ONCHAIN)
542
+ ? _bytecodeStorageReaderContract.readFromBytecode(
543
+ _bytecodeAddress
544
+ )
545
+ : ""
546
+ });
547
+ }
548
+
549
+ /**
550
+ * @notice Returns the preferred IPFS gateway.
551
+ */
552
+ function preferredIPFSGateway() external view returns (string memory) {
553
+ return s().preferredIPFSGateway;
554
+ }
555
+
556
+ /**
557
+ * @notice Returns the preferred Arweave gateway.
558
+ */
559
+ function preferredArweaveGateway() external view returns (string memory) {
560
+ return s().preferredArweaveGateway;
561
+ }
562
+
563
+ /**
564
+ * @notice Loads the FlexProjectData for a given project.
565
+ * @param projectId Project Id to get FlexProjectData for
566
+ */
567
+ function getFlexProjectData(
568
+ uint256 projectId
569
+ ) internal view returns (FlexProjectData storage) {
570
+ return s().flexProjectsData[projectId];
571
+ }
572
+
573
+ /**
574
+ * @notice Return the storage struct for reading and writing. This library
575
+ * uses a diamond storage pattern when managing storage.
576
+ * @return storageStruct The V3FlexLibStorage struct.
577
+ */
578
+ function s()
579
+ internal
580
+ pure
581
+ returns (V3FlexLibStorage storage storageStruct)
582
+ {
583
+ bytes32 position = V3_FLEX_LIB_STORAGE_POSITION;
584
+ assembly ("memory-safe") {
585
+ storageStruct.slot := position
586
+ }
587
+ }
588
+
589
+ function _onlyUnlockedProjectExternalAssetDependencies(
590
+ FlexProjectData storage flexProjectData
591
+ ) private view {
592
+ require(
593
+ !flexProjectData.externalAssetDependenciesLocked,
594
+ "External dependencies locked"
595
+ );
596
+ }
597
+ }
@@ -33,7 +33,6 @@ library DAExpLib {
33
33
  uint256 startPrice,
34
34
  uint256 basePrice
35
35
  );
36
- /// Minimum allowed price decay half life seconds updated.
37
36
 
38
37
  /**
39
38
  * @notice Minimum allowed price decay half life on the minter updated to
@@ -113,6 +112,9 @@ library DAExpLib {
113
112
  startPrice > basePrice,
114
113
  "Auction start price must be greater than auction end price"
115
114
  );
115
+ // @dev no coverage, as minter auction min half life may be more
116
+ // restrictive than gt 0
117
+ require(priceDecayHalfLifeSeconds > 0, "Only half life gt 0");
116
118
 
117
119
  // EFFECTS
118
120
  DAProjectConfig_.timestampStart = auctionTimestampStart;
@@ -134,15 +136,10 @@ library DAExpLib {
134
136
  uint256 projectId,
135
137
  address coreContract
136
138
  ) internal {
137
- DAProjectConfig storage DAProjectConfig_ = getDAProjectConfig({
138
- projectId: projectId,
139
- coreContract: coreContract
140
- });
141
-
142
- DAProjectConfig_.timestampStart = 0;
143
- DAProjectConfig_.priceDecayHalfLifeSeconds = 0;
144
- DAProjectConfig_.startPrice = 0;
145
- DAProjectConfig_.basePrice = 0;
139
+ // @dev all fields must be deleted, and none of them are a complex type
140
+ // @dev getDAProjectConfig not used, as deletion of storage pointers is
141
+ // not supported
142
+ delete s().DAProjectConfigs_[coreContract][projectId];
146
143
 
147
144
  emit DALib.ResetAuctionDetails({
148
145
  projectId: projectId,
@@ -172,9 +169,10 @@ library DAExpLib {
172
169
  uint256 timestampStart = DAProjectConfig_.timestampStart;
173
170
  uint256 priceDecayHalfLifeSeconds = DAProjectConfig_
174
171
  .priceDecayHalfLifeSeconds;
175
-
176
- require(block.timestamp >= timestampStart, "Auction not yet started");
172
+ // @dev check also ensures we don't divide by priceDecayHalfLifeSeconds
173
+ // of zero
177
174
  require(priceDecayHalfLifeSeconds > 0, "Only configured auctions");
175
+ require(block.timestamp >= timestampStart, "Auction not yet started");
178
176
  uint256 decayedPrice = DAProjectConfig_.startPrice;
179
177
  uint256 elapsedTimeSeconds;
180
178
  unchecked {
@@ -132,15 +132,10 @@ library DALinLib {
132
132
  uint256 projectId,
133
133
  address coreContract
134
134
  ) internal {
135
- DAProjectConfig storage DAProjectConfig_ = getDAProjectConfig({
136
- projectId: projectId,
137
- coreContract: coreContract
138
- });
139
-
140
- DAProjectConfig_.timestampStart = 0;
141
- DAProjectConfig_.timestampEnd = 0;
142
- DAProjectConfig_.startPrice = 0;
143
- DAProjectConfig_.basePrice = 0;
135
+ // @dev all fields must be deleted, and none of them are a complex type
136
+ // @dev getDAProjectConfig not used, as deletion of storage pointers is
137
+ // not supported
138
+ delete s().DAProjectConfigs_[coreContract][projectId];
144
139
 
145
140
  emit DALib.ResetAuctionDetails({
146
141
  projectId: projectId,