@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
@@ -96,6 +96,44 @@ library SplitFundsLib {
96
96
  }
97
97
  }
98
98
 
99
+ /**
100
+ * @notice pays ETH funds to sender (if refund), with all of token price
101
+ * being sent to the render provider for a token purchased on project
102
+ * `projectId`.
103
+ * WARNING: This function uses msg.value and msg.sender to determine
104
+ * refund amounts, and therefore may not be applicable to all use cases
105
+ * (e.g. do not use with Dutch Auctions with on-chain settlement).
106
+ * @dev This function relies on msg.sender and msg.value, so it must be
107
+ * called directly from the contract that is receiving the payment.
108
+ * @dev possible DoS during splits is acknowledged, and mitigated by
109
+ * business practices, including end-to-end testing on mainnet, and
110
+ * admin-accepted artist payment addresses.
111
+ * @param projectId Project ID for which funds shall be split.
112
+ * @param pricePerTokenInWei Current price of token, in Wei.
113
+ * @param coreContract Address of the GenArt721CoreContract associated
114
+ * with the project.
115
+ */
116
+ function sendAllToRenderProviderETHRefundSender(
117
+ uint256 projectId,
118
+ uint256 pricePerTokenInWei,
119
+ address coreContract
120
+ ) internal {
121
+ if (msg.value > 0) {
122
+ // send refund to sender
123
+ uint256 refund = msg.value - pricePerTokenInWei;
124
+ if (refund > 0) {
125
+ (bool success_, ) = msg.sender.call{value: refund}("");
126
+ require(success_, "Refund failed");
127
+ }
128
+ // send remaining to render provider
129
+ sendAllToRenderProviderETHNoRefund({
130
+ projectId: projectId,
131
+ valueInWei: pricePerTokenInWei,
132
+ coreContract: coreContract
133
+ });
134
+ }
135
+ }
136
+
99
137
  /**
100
138
  * @notice Splits ETH revenues between providers, artist, and artist's
101
139
  * additional payee for revenue generated by project `projectId`.
@@ -185,6 +223,75 @@ library SplitFundsLib {
185
223
  });
186
224
  }
187
225
 
226
+ /**
227
+ * @notice Sends all revenue generated by project `projectId` to render
228
+ * provider.
229
+ * This function does NOT refund msg.sender, and does NOT use msg.value
230
+ * when determining the value to be split.
231
+ * @dev possible DoS during splits is acknowledged, and mitigated by
232
+ * business practices, including end-to-end testing on mainnet, and
233
+ * admin-accepted payment addresses.
234
+ * @param projectId Project ID for which funds shall be sent.
235
+ * @param valueInWei Value to be sent, in Wei.
236
+ * @param coreContract Address of the GenArt721CoreContract
237
+ * associated with the project.
238
+ */
239
+ function sendAllToRenderProviderETHNoRefund(
240
+ uint256 projectId,
241
+ uint256 valueInWei,
242
+ address coreContract
243
+ ) internal {
244
+ if (valueInWei == 0) {
245
+ return; // return early
246
+ }
247
+ // split funds between platforms, artist, and artist's
248
+ // additional payee
249
+ bool isEngine_ = isEngine(coreContract);
250
+ address payable renderProviderAddress;
251
+ if (isEngine_) {
252
+ // get engine splits
253
+ (
254
+ ,
255
+ renderProviderAddress,
256
+ ,
257
+ ,
258
+ ,
259
+ ,
260
+ ,
261
+
262
+ ) = IGenArt721CoreContractV3_Engine(coreContract)
263
+ .getPrimaryRevenueSplits({
264
+ _projectId: projectId,
265
+ _price: valueInWei
266
+ });
267
+ } else {
268
+ // get flagship splits
269
+ // @dev note that platformProviderAddress and
270
+ // platformProviderRevenue remain 0 for flagship
271
+ (
272
+ ,
273
+ // artblocks revenue
274
+ renderProviderAddress, // artblocks address
275
+ ,
276
+ ,
277
+ ,
278
+
279
+ ) = IGenArt721CoreContractV3(coreContract).getPrimaryRevenueSplits({
280
+ _projectId: projectId,
281
+ _price: valueInWei
282
+ });
283
+ }
284
+ require(
285
+ renderProviderAddress != address(0),
286
+ "Render Provider address not set"
287
+ );
288
+ // distribute revenue
289
+ // Render Provider / Art Blocks payment
290
+ // @dev previous conditional ensures valueInWei is non-zero
291
+ (bool success, ) = renderProviderAddress.call{value: valueInWei}("");
292
+ require(success, "Render Provider payment failed");
293
+ }
294
+
188
295
  /**
189
296
  * @notice Splits ERC20 funds between providers, artist, and artist's
190
297
  * additional payee, for a token purchased on project `projectId`.
@@ -197,7 +304,9 @@ library SplitFundsLib {
197
304
  * business practices, including end-to-end testing on mainnet, and
198
305
  * admin-accepted artist payment addresses.
199
306
  * @param projectId Project ID for which funds shall be split.
200
- * @param pricePerToken Current price of token, no decimals.
307
+ * @param pricePerToken Current price of token, in base units. For example,
308
+ * if the ERC20 token has 6 decimals, an input value of `1_000_000` would
309
+ * represent a price of `1.000000` tokens.
201
310
  * @param coreContract Core contract address.
202
311
  */
203
312
  function splitFundsERC20(
@@ -221,7 +330,6 @@ library SplitFundsLib {
221
330
  currencyAddress != address(0),
222
331
  "ERC20: payment not configured"
223
332
  );
224
- require(msg.value == 0, "ERC20: No ETH when using ERC20");
225
333
  // ERC20 token is used for payment
226
334
  validateERC20Approvals({
227
335
  msgSender: msg.sender,
@@ -230,7 +338,7 @@ library SplitFundsLib {
230
338
  });
231
339
  projectCurrency = IERC20(currencyAddress);
232
340
  }
233
- // split remaining funds between foundation, artist, and artist's
341
+ // split remaining funds between foundation, artist, and artist's additional payee
234
342
  bool isEngine_ = isEngine(coreContract);
235
343
  uint256 renderProviderRevenue;
236
344
  address payable renderProviderAddress;
@@ -333,9 +441,8 @@ library SplitFundsLib {
333
441
  coreContract: coreContract
334
442
  });
335
443
  // recommend price reset if currency address was previously configured
336
- if (splitFundsProjectConfig.currencyAddress != address(0)) {
337
- recommendPriceReset = true;
338
- }
444
+ recommendPriceReset = (splitFundsProjectConfig.currencyAddress !=
445
+ address(0));
339
446
  splitFundsProjectConfig.currencySymbol = currencySymbol;
340
447
  splitFundsProjectConfig.currencyAddress = currencyAddress;
341
448
 
@@ -478,10 +585,9 @@ library SplitFundsLib {
478
585
  // also note that per Solidity ABI encoding, the address return
479
586
  // values are padded to 32 bytes.
480
587
  return true;
481
- } else {
482
- // unexpected return value length
483
- revert("Unexpected revenue split bytes");
484
588
  }
589
+ // unexpected return value length
590
+ revert("Unexpected revenue split bytes");
485
591
  }
486
592
 
487
593
  /**
@@ -491,8 +597,8 @@ library SplitFundsLib {
491
597
  * `currencyAddress` is zero.
492
598
  * @param projectId Project ID to get config for
493
599
  * @param coreContract Core contract address to get config for
494
- * @return currencyAddress
495
- * @return currencySymbol
600
+ * @return currencyAddress currency address for the referenced SplitFundsProjectConfig.
601
+ * @return currencySymbol currency symbol for the referenced SplitFundsProjectConfig.
496
602
  */
497
603
  function getCurrencyInfoERC20(
498
604
  uint256 projectId,
@@ -518,7 +624,7 @@ library SplitFundsLib {
518
624
  * @notice Gets the balance of `currencyAddress` ERC20 tokens for `walletAddress`.
519
625
  * @param currencyAddress ERC20 token address.
520
626
  * @param walletAddress wallet address.
521
- * @return balance
627
+ * @return balance Balance of ERC-20
522
628
  */
523
629
  function getERC20Balance(
524
630
  address currencyAddress,
@@ -533,7 +639,7 @@ library SplitFundsLib {
533
639
  * @param currencyAddress ERC20 token address.
534
640
  * @param walletAddress wallet address.
535
641
  * @param spenderAddress spender address.
536
- * @return allowance
642
+ * @return allowance Allowance of ERC-20
537
643
  */
538
644
  function getERC20Allowance(
539
645
  address currencyAddress,
@@ -555,7 +661,9 @@ library SplitFundsLib {
555
661
  * Reverts if insufficient allowance or balance.
556
662
  * @param msgSender Address of the message sender to validate.
557
663
  * @param currencyAddress Address of the ERC20 token to validate.
558
- * @param pricePerToken Price per token to validate (no decimals)
664
+ * @param pricePerToken Price of token, in base units. For example,
665
+ * if the ERC20 token has 6 decimals, an input value of `1_000_000` would
666
+ * represent a price of `1.000000` tokens.
559
667
  */
560
668
  function validateERC20Approvals(
561
669
  address msgSender,
@@ -578,6 +686,9 @@ library SplitFundsLib {
578
686
  /**
579
687
  * @notice Sends ETH revenues between providers, artist, and artist's
580
688
  * additional payee. Reverts if any payment fails.
689
+ * @dev This function pays priviliged addresses. DoS is acknowledged, and
690
+ * mitigated by business practices, including end-to-end testing on
691
+ * mainnet, and admin-accepted artist payment addresses.
581
692
  * @param platformProviderRevenue Platform Provider revenue.
582
693
  * @param platformProviderAddress Platform Provider address.
583
694
  * @param renderProviderRevenue Render Provider revenue.
@@ -628,7 +739,9 @@ library SplitFundsLib {
628
739
  /**
629
740
  * @notice Sends ERC20 revenues between providers, artist, and artist's
630
741
  * additional payee. Reverts if any payment fails. All revenue values
631
- * should not use decimals.
742
+ * should use base units. For example, if the ERC20 token has 6 decimals,
743
+ * an input value of `1_000_000` would represent an amount of `1.000000`
744
+ * tokens.
632
745
  * @dev This function relies on msg.sender, so it must be called from
633
746
  * the contract that is receiving the payment.
634
747
  * @param projectCurrency IERC20 payment token.
@@ -5,6 +5,8 @@ pragma solidity ^0.8.0;
5
5
 
6
6
  import {IERC721} from "@openzeppelin-4.7/contracts/token/ERC721/IERC721.sol";
7
7
 
8
+ import {ABHelpers} from "../ABHelpers.sol";
9
+
8
10
  import {EnumerableSet} from "@openzeppelin-4.5/contracts/utils/structs/EnumerableSet.sol";
9
11
 
10
12
  /**
@@ -71,9 +73,6 @@ library TokenHolderLib {
71
73
  bytes32 constant TOKEN_HOLDER_LIB_STORAGE_POSITION =
72
74
  keccak256("tokenholderlib.storage");
73
75
 
74
- // Define one million to represent the base token ID for each project.
75
- uint256 constant ONE_MILLION = 1_000_000;
76
-
77
76
  struct HolderProjectConfig {
78
77
  // projects whose holders are allowed to purchase a token on `projectId`
79
78
  mapping(address ownedNFTAddress => mapping(uint256 ownedNFTProjectId => bool allowed)) allowedProjectHolders;
@@ -253,7 +252,9 @@ library TokenHolderLib {
253
252
  projectId: projectId,
254
253
  coreContract: coreContract
255
254
  });
256
- uint256 ownedNFTProjectId = ownedNFTTokenId / ONE_MILLION;
255
+ uint256 ownedNFTProjectId = ABHelpers.tokenIdToProjectId(
256
+ ownedNFTTokenId
257
+ );
257
258
  return
258
259
  holderProjectConfig.allowedProjectHolders[ownedNFTAddress][
259
260
  ownedNFTProjectId
@@ -16,6 +16,7 @@ import {Bytes32Strings} from "../../libs/v0.8.x/Bytes32Strings.sol";
16
16
  import {Ownable} from "@openzeppelin-4.7/contracts/access/Ownable.sol";
17
17
  import {EnumerableMap} from "@openzeppelin-4.7/contracts/utils/structs/EnumerableMap.sol";
18
18
  import {EnumerableSet} from "@openzeppelin-4.7/contracts/utils/structs/EnumerableSet.sol";
19
+ import {Math} from "@openzeppelin-4.7/contracts/utils/math/Math.sol";
19
20
 
20
21
  /**
21
22
  * @title MinterFilterV2
@@ -118,8 +119,7 @@ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
118
119
 
119
120
  /**
120
121
  * @notice Function to restrict access to only AdminACL allowed calls
121
- * on a given core contract.
122
- * @dev defers to the ACL contract used by the core contract
122
+ * on this minter filter's admin ACL contract.
123
123
  * @param selector function selector to be checked
124
124
  */
125
125
  function _onlyAdminACL(bytes4 selector) internal {
@@ -274,7 +274,7 @@ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
274
274
  */
275
275
  function approveMinterGlobally(address minter) external {
276
276
  _onlyAdminACL(this.approveMinterGlobally.selector);
277
- // @dev add() return true if the value was removed from the set
277
+ // @dev add() return true if the value was added to the set
278
278
  require(
279
279
  _globallyApprovedMinters.add(minter),
280
280
  "Minter already approved"
@@ -326,7 +326,7 @@ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
326
326
  coreContract: coreContract,
327
327
  selector: this.approveMinterForContract.selector
328
328
  });
329
- // @dev add() returns true if the value was removed from the Set
329
+ // @dev add() returns true if the value was added to the Set
330
330
  require(
331
331
  _contractApprovedMinters[coreContract].add(minter),
332
332
  "Minter already approved"
@@ -539,6 +539,7 @@ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
539
539
  uint256 projectId,
540
540
  address coreContract
541
541
  ) external view returns (address) {
542
+ // @dev use tryGet to control revert message if no minter assigned
542
543
  (bool hasMinter, address currentMinter) = _minterForProject[
543
544
  coreContract
544
545
  ].tryGet(projectId);
@@ -637,16 +638,21 @@ contract MinterFilterV2 is Ownable, IMinterFilterV1 {
637
638
  address coreContract,
638
639
  address minter
639
640
  ) external view returns (uint256[] memory projectIds) {
641
+ EnumerableMap.UintToAddressMap storage minterMap = _minterForProject[
642
+ coreContract
643
+ ];
640
644
  // initialize arrays with maximum potential length
641
- // @dev use num projects using minter across all contracts since it the
642
- // maximum length of this array
643
- uint256 maxNumProjects = numProjectsUsingMinter[minter];
645
+ // @dev use lesser of num projects using minter across all contracts
646
+ // and number of projects on the contract with minters assigned, since
647
+ // both values represent an upper bound on the number of projects that
648
+ // could be using the minter on the contract
649
+ uint256 maxNumProjects = Math.min(
650
+ numProjectsUsingMinter[minter],
651
+ minterMap.length()
652
+ );
644
653
  projectIds = new uint256[](maxNumProjects);
645
654
  // iterate over all projects on contract, adding to array if using
646
655
  // `minter`
647
- EnumerableMap.UintToAddressMap storage minterMap = _minterForProject[
648
- coreContract
649
- ];
650
656
  uint256 numProjects = minterMap.length();
651
657
  uint256 numProjectsOnContractUsingMinter;
652
658
  for (uint256 i; i < numProjects; ) {
@@ -365,7 +365,7 @@ contract MinterDAExpHolderV5 is
365
365
  coreContract: coreContract
366
366
  })
367
367
  ) {
368
- syncProjectMaxInvocationsToCore({
368
+ MaxInvocationsLib.syncProjectMaxInvocationsToCore({
369
369
  projectId: projectId,
370
370
  coreContract: coreContract
371
371
  });
@@ -837,7 +837,7 @@ contract MinterDAExpHolderV5 is
837
837
 
838
838
  // NOTE: delegate-vault handling **ends here**.
839
839
 
840
- MaxInvocationsLib.validatePurchaseEffectsInvocations({
840
+ MaxInvocationsLib.validateMintEffectsInvocations({
841
841
  tokenId: tokenId,
842
842
  coreContract: coreContract
843
843
  });
@@ -342,7 +342,7 @@ contract MinterDAExpSettlementV3 is
342
342
  /**
343
343
  * @notice Reclaims the sender's payment above current settled price for
344
344
  * project `projectId` on core contract `coreContract`.
345
- * The current settled price is the the price paid for the most recently
345
+ * The current settled price is the price paid for the most recently
346
346
  * purchased token, or the base price if the artist has withdrawn revenues
347
347
  * after the auction reached base price.
348
348
  * This function is callable at any point, but is expected to typically be
@@ -366,7 +366,7 @@ contract MinterDAExpSettlementV3 is
366
366
 
367
367
  /**
368
368
  * @notice Reclaims the sender's payment above current settled price for
369
- * projects in `projectIds`. The current settled price is the the price
369
+ * projects in `projectIds`. The current settled price is the price
370
370
  * paid for the most recently purchased token, or the base price if the
371
371
  * artist has withdrawn revenues after the auction reached base price.
372
372
  * This function is callable at any point, but is expected to typically be
@@ -702,7 +702,7 @@ contract MinterDAExpSettlementV3 is
702
702
  /**
703
703
  * @notice Reclaims the sender's payment above current settled price for
704
704
  * project `projectId` on core contract `coreContract`.
705
- * The current settled price is the the price paid for the most recently
705
+ * The current settled price is the price paid for the most recently
706
706
  * purchased token, or the base price if the artist has withdrawn revenues
707
707
  * after the auction reached base price.
708
708
  * This function is callable at any point, but is expected to typically be
@@ -725,13 +725,14 @@ contract MinterDAExpSettlementV3 is
725
725
  to: to,
726
726
  projectId: projectId,
727
727
  coreContract: coreContract,
728
- purchaserAddress: msg.sender
728
+ purchaserAddress: msg.sender,
729
+ doSendFunds: true
729
730
  });
730
731
  }
731
732
 
732
733
  /**
733
734
  * @notice Reclaims the sender's payment above current settled price for
734
- * projects in `projectIds`. The current settled price is the the price
735
+ * projects in `projectIds`. The current settled price is the price
735
736
  * paid for the most recently purchased token, or the base price if the
736
737
  * artist has withdrawn revenues after the auction reached base price.
737
738
  * This function is callable at any point, but is expected to typically be
@@ -765,12 +766,14 @@ contract MinterDAExpSettlementV3 is
765
766
  // the receipt in storage
766
767
  uint256 excessSettlementFunds;
767
768
  for (uint256 i; i < projectIdsLength; ) {
768
- SettlementExpLib.reclaimProjectExcessSettlementFundsTo({
769
- to: to,
770
- projectId: projectIds[i],
771
- coreContract: coreContracts[i],
772
- purchaserAddress: msg.sender
773
- });
769
+ excessSettlementFunds += SettlementExpLib
770
+ .reclaimProjectExcessSettlementFundsTo({
771
+ to: to,
772
+ projectId: projectIds[i],
773
+ coreContract: coreContracts[i],
774
+ purchaserAddress: msg.sender,
775
+ doSendFunds: false // do not send funds, just tally
776
+ });
774
777
 
775
778
  // gas efficiently increment i
776
779
  // won't overflow due to for loop, as well as gas limts
@@ -782,9 +785,10 @@ contract MinterDAExpSettlementV3 is
782
785
  // INTERACTIONS
783
786
  // send excess settlement funds in a single chunk for all
784
787
  // projects
785
- bool success_;
786
- (success_, ) = to.call{value: excessSettlementFunds}("");
787
- require(success_, "Reclaiming failed");
788
+ if (excessSettlementFunds > 0) {
789
+ (bool success_, ) = to.call{value: excessSettlementFunds}("");
790
+ require(success_, "Reclaiming failed");
791
+ }
788
792
  }
789
793
 
790
794
  /**
@@ -849,7 +853,7 @@ contract MinterDAExpSettlementV3 is
849
853
 
850
854
  // verify token invocation is valid given local minter max invocations,
851
855
  // update local maxHasBeenInvoked
852
- MaxInvocationsLib.validatePurchaseEffectsInvocations({
856
+ MaxInvocationsLib.validateMintEffectsInvocations({
853
857
  tokenId: tokenId,
854
858
  coreContract: coreContract
855
859
  });
@@ -197,7 +197,7 @@ contract MinterDAExpV5 is
197
197
  coreContract: coreContract
198
198
  })
199
199
  ) {
200
- syncProjectMaxInvocationsToCore({
200
+ MaxInvocationsLib.syncProjectMaxInvocationsToCore({
201
201
  projectId: projectId,
202
202
  coreContract: coreContract
203
203
  });
@@ -528,7 +528,7 @@ contract MinterDAExpV5 is
528
528
  sender: msg.sender
529
529
  });
530
530
 
531
- MaxInvocationsLib.validatePurchaseEffectsInvocations({
531
+ MaxInvocationsLib.validateMintEffectsInvocations({
532
532
  tokenId: tokenId,
533
533
  coreContract: coreContract
534
534
  });
@@ -364,7 +364,7 @@ contract MinterDALinHolderV5 is
364
364
  coreContract: coreContract
365
365
  })
366
366
  ) {
367
- syncProjectMaxInvocationsToCore({
367
+ MaxInvocationsLib.syncProjectMaxInvocationsToCore({
368
368
  projectId: projectId,
369
369
  coreContract: coreContract
370
370
  });
@@ -827,7 +827,7 @@ contract MinterDALinHolderV5 is
827
827
 
828
828
  // NOTE: delegate-vault handling **ends here**.
829
829
 
830
- MaxInvocationsLib.validatePurchaseEffectsInvocations({
830
+ MaxInvocationsLib.validateMintEffectsInvocations({
831
831
  tokenId: tokenId,
832
832
  coreContract: coreContract
833
833
  });
@@ -191,7 +191,7 @@ contract MinterDALinV5 is
191
191
  coreContract: coreContract
192
192
  })
193
193
  ) {
194
- syncProjectMaxInvocationsToCore({
194
+ MaxInvocationsLib.syncProjectMaxInvocationsToCore({
195
195
  projectId: projectId,
196
196
  coreContract: coreContract
197
197
  });
@@ -517,7 +517,7 @@ contract MinterDALinV5 is
517
517
  sender: msg.sender
518
518
  });
519
519
 
520
- MaxInvocationsLib.validatePurchaseEffectsInvocations({
520
+ MaxInvocationsLib.validateMintEffectsInvocations({
521
521
  tokenId: tokenId,
522
522
  coreContract: coreContract
523
523
  });