@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
@@ -1,12 +1,12 @@
1
1
  // SPDX-License-Identifier: LGPL-3.0-only
2
2
  // Created By: Art Blocks Inc.
3
3
 
4
- import "../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
5
- import "../../interfaces/v0.8.x/IGenArt721CoreContractV3.sol";
6
- import "../../interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol";
7
- import "../../interfaces/v0.8.x/IMinterFilterV0.sol";
8
- import "../../interfaces/v0.8.x/IFilteredMinterV2.sol";
9
- import "./MinterBase_v0_1_1.sol";
4
+ import "../../../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
5
+ import "../../../../interfaces/v0.8.x/IGenArt721CoreContractV3.sol";
6
+ import "../../../../interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol";
7
+ import "../../../../interfaces/v0.8.x/IMinterFilterV0.sol";
8
+ import "../../../../interfaces/v0.8.x/IFilteredMinterV2.sol";
9
+ import "../MinterBase_v0_1_1.sol";
10
10
 
11
11
  import "@openzeppelin-4.5/contracts/security/ReentrancyGuard.sol";
12
12
 
@@ -320,14 +320,41 @@ contract MinterSetPriceERC20V4 is
320
320
  }
321
321
 
322
322
  /**
323
- * @notice Purchases a token from project `_projectId`.
323
+ * @notice Purchases a token from project `_projectId` with ETH.
324
324
  * @param _projectId Project ID to mint a token on.
325
325
  * @return tokenId Token ID of minted token
326
326
  */
327
327
  function purchase(
328
328
  uint256 _projectId
329
329
  ) external payable returns (uint256 tokenId) {
330
- tokenId = purchaseTo_do6(msg.sender, _projectId);
330
+ // pass max price as msg.value, currency address as ETH
331
+ tokenId = purchaseTo({
332
+ _to: msg.sender,
333
+ _projectId: _projectId,
334
+ _maxPricePerToken: msg.value,
335
+ _currencyAddress: address(0)
336
+ });
337
+ return tokenId;
338
+ }
339
+
340
+ /**
341
+ * @notice Purchases a token from project `_projectId` with ETH or any ERC-20 token.
342
+ * @param _projectId Project ID to mint a token on.
343
+ * @param _maxPricePerToken Maximum price of token being allowed by the purchaser, no decimal places.
344
+ * @param _currencyAddress Currency address of token. `address(0)` if minting with ETH.
345
+ * @return tokenId Token ID of minted token
346
+ */
347
+ function purchase(
348
+ uint256 _projectId,
349
+ uint256 _maxPricePerToken,
350
+ address _currencyAddress
351
+ ) external payable returns (uint256 tokenId) {
352
+ tokenId = purchaseTo({
353
+ _to: msg.sender,
354
+ _projectId: _projectId,
355
+ _maxPricePerToken: _maxPricePerToken,
356
+ _currencyAddress: _currencyAddress
357
+ });
331
358
  return tokenId;
332
359
  }
333
360
 
@@ -337,12 +364,18 @@ contract MinterSetPriceERC20V4 is
337
364
  function purchase_H4M(
338
365
  uint256 _projectId
339
366
  ) external payable returns (uint256 tokenId) {
340
- tokenId = purchaseTo_do6(msg.sender, _projectId);
367
+ // pass max price as msg.value, currency address as ETH
368
+ tokenId = purchaseTo({
369
+ _to: msg.sender,
370
+ _projectId: _projectId,
371
+ _maxPricePerToken: msg.value,
372
+ _currencyAddress: address(0)
373
+ });
341
374
  return tokenId;
342
375
  }
343
376
 
344
377
  /**
345
- * @notice Purchases a token from project `_projectId` and sets
378
+ * @notice Purchases a token from project `_projectId` with ETH and sets
346
379
  * the token's owner to `_to`.
347
380
  * @param _to Address to be the new token's owner.
348
381
  * @param _projectId Project ID to mint a token on.
@@ -352,15 +385,30 @@ contract MinterSetPriceERC20V4 is
352
385
  address _to,
353
386
  uint256 _projectId
354
387
  ) external payable returns (uint256 tokenId) {
355
- return purchaseTo_do6(_to, _projectId);
388
+ // pass max price as msg.value, currency address as ETH
389
+ return
390
+ purchaseTo({
391
+ _to: _to,
392
+ _projectId: _projectId,
393
+ _maxPricePerToken: msg.value,
394
+ _currencyAddress: address(0)
395
+ });
356
396
  }
357
397
 
358
398
  /**
359
- * @notice gas-optimized version of purchaseTo(address, uint256).
399
+ * @notice Purchases a token from project `_projectId` with ETH or any ERC-20 token and sets
400
+ * the token's owner to `_to`.
401
+ * @param _to Address to be the new token's owner.
402
+ * @param _projectId Project ID to mint a token on.
403
+ * @param _maxPricePerToken Maximum price of token being allowed by the purchaser, no decimal places. Required if currency is ERC20.
404
+ * @param _currencyAddress Currency address of token. `address(0)` if minting with ETH.
405
+ * @return tokenId Token ID of minted token
360
406
  */
361
- function purchaseTo_do6(
407
+ function purchaseTo(
362
408
  address _to,
363
- uint256 _projectId
409
+ uint256 _projectId,
410
+ uint256 _maxPricePerToken,
411
+ address _currencyAddress
364
412
  ) public payable nonReentrant returns (uint256 tokenId) {
365
413
  // CHECKS
366
414
  ProjectConfig storage _projectConfig = projectConfig[_projectId];
@@ -379,6 +427,20 @@ contract MinterSetPriceERC20V4 is
379
427
  // require artist to have configured price of token on this minter
380
428
  require(_projectConfig.priceIsConfigured, "Price not configured");
381
429
 
430
+ uint256 pricePerTokenInWei = _projectConfig.pricePerTokenInWei;
431
+ address configuredCurrencyAddress = _projectConfig.currencyAddress;
432
+
433
+ // validate that the currency address matches the project configured currency
434
+ require(
435
+ _currencyAddress == configuredCurrencyAddress,
436
+ "Currency addresses must match"
437
+ );
438
+
439
+ // if configured currency is ETH validate that msg.value is the same as max price per token
440
+ if (configuredCurrencyAddress == address(0)) {
441
+ require(msg.value == _maxPricePerToken, "inconsistent msg.value");
442
+ }
443
+
382
444
  // EFFECTS
383
445
  tokenId = minterFilter.mint(_to, _projectId, msg.sender);
384
446
 
@@ -406,27 +468,32 @@ contract MinterSetPriceERC20V4 is
406
468
  }
407
469
 
408
470
  // INTERACTIONS
409
- uint256 pricePerTokenInWei = _projectConfig.pricePerTokenInWei;
410
- address _currencyAddress = _projectConfig.currencyAddress;
411
- if (_currencyAddress != address(0)) {
471
+ if (configuredCurrencyAddress != address(0)) {
472
+ // validate that the specified maximum price is greater than or equal to the price per token
473
+ require(
474
+ _maxPricePerToken >= pricePerTokenInWei,
475
+ "Only max price gte token price"
476
+ );
412
477
  require(
413
478
  msg.value == 0,
414
479
  "this project accepts a different currency and cannot accept ETH"
415
480
  );
416
481
  require(
417
- IERC20(_currencyAddress).allowance(msg.sender, address(this)) >=
418
- pricePerTokenInWei,
482
+ IERC20(configuredCurrencyAddress).allowance(
483
+ msg.sender,
484
+ address(this)
485
+ ) >= pricePerTokenInWei,
419
486
  "Insufficient Funds Approved for TX"
420
487
  );
421
488
  require(
422
- IERC20(_currencyAddress).balanceOf(msg.sender) >=
489
+ IERC20(configuredCurrencyAddress).balanceOf(msg.sender) >=
423
490
  pricePerTokenInWei,
424
491
  "Insufficient balance."
425
492
  );
426
493
  splitFundsERC20(
427
494
  _projectId,
428
495
  pricePerTokenInWei,
429
- _currencyAddress,
496
+ configuredCurrencyAddress,
430
497
  genArt721CoreAddress
431
498
  );
432
499
  } else {
@@ -215,18 +215,46 @@ contract GenArt721MinterBurner_PBAB is ReentrancyGuard {
215
215
  }
216
216
 
217
217
  /**
218
- * @notice Purchases a token from project `_projectId`.
218
+ * @notice Purchases a token from project `_projectId` with ETH.
219
219
  * @param _projectId Project ID to mint a token on.
220
220
  * @return _tokenId Token ID of minted token
221
221
  */
222
222
  function purchase(
223
223
  uint256 _projectId
224
224
  ) public payable returns (uint256 _tokenId) {
225
- return purchaseTo(msg.sender, _projectId);
225
+ // pass max price as msg.value, currency address as ETH
226
+ return
227
+ purchaseTo({
228
+ _to: msg.sender,
229
+ _projectId: _projectId,
230
+ _maxPricePerToken: msg.value,
231
+ _currencyAddress: address(0)
232
+ });
226
233
  }
227
234
 
228
235
  /**
229
- * @notice Purchases a token from project `_projectId` and sets
236
+ * @notice Purchases a token from project `_projectId` with ETH or any ERC-20 token.
237
+ * @param _projectId Project ID to mint a token on.
238
+ * @param _maxPricePerToken Maximum price of token being allowed by the purchaser, no decimal places.
239
+ * @param _currencyAddress Currency address of token. `address(0)` if minting with ETH.
240
+ * @return _tokenId Token ID of minted token
241
+ */
242
+ function purchase(
243
+ uint256 _projectId,
244
+ uint256 _maxPricePerToken,
245
+ address _currencyAddress
246
+ ) public payable returns (uint256 _tokenId) {
247
+ return
248
+ purchaseTo({
249
+ _to: msg.sender,
250
+ _projectId: _projectId,
251
+ _maxPricePerToken: _maxPricePerToken,
252
+ _currencyAddress: _currencyAddress
253
+ });
254
+ }
255
+
256
+ /**
257
+ * @notice Purchases a token from project `_projectId` with ETH and sets
230
258
  * the token's owner to `_to`.
231
259
  * @param _to Address to be the new token's owner.
232
260
  * @param _projectId Project ID to mint a token on.
@@ -235,6 +263,31 @@ contract GenArt721MinterBurner_PBAB is ReentrancyGuard {
235
263
  function purchaseTo(
236
264
  address _to,
237
265
  uint256 _projectId
266
+ ) public payable returns (uint256 _tokenId) {
267
+ // pass max price as msg.value, currency address as ETH
268
+ return
269
+ purchaseTo({
270
+ _to: _to,
271
+ _projectId: _projectId,
272
+ _maxPricePerToken: msg.value,
273
+ _currencyAddress: address(0)
274
+ });
275
+ }
276
+
277
+ /**
278
+ * @notice Purchases a token from project `_projectId` with ETH or any ERC-20 token and sets
279
+ * the token's owner to `_to`.
280
+ * @param _to Address to be the new token's owner.
281
+ * @param _projectId Project ID to mint a token on.
282
+ * @param _maxPricePerToken Maximum price of token being allowed by the purchaser, no decimal places. Required if currency is ERC20.
283
+ * @param _currencyAddress Currency address of token. `address(0)` if minting with ETH.
284
+ * @return _tokenId Token ID of minted token
285
+ */
286
+ function purchaseTo(
287
+ address _to,
288
+ uint256 _projectId,
289
+ uint256 _maxPricePerToken,
290
+ address _currencyAddress
238
291
  ) public payable nonReentrant returns (uint256 _tokenId) {
239
292
  // CHECKS
240
293
  require(
@@ -246,6 +299,21 @@ contract GenArt721MinterBurner_PBAB is ReentrancyGuard {
246
299
  require(msg.sender == tx.origin, "No Contract Buys");
247
300
  }
248
301
 
302
+ uint256 pricePerTokenInWei = genArtCoreContract
303
+ .projectIdToPricePerTokenInWei(_projectId);
304
+ address configuredCurrencyAddress = genArtCoreContract
305
+ .projectIdToCurrencyAddress(_projectId);
306
+ // validate that the currency address matches the project configured currency
307
+ require(
308
+ _currencyAddress == configuredCurrencyAddress,
309
+ "Currency addresses must match"
310
+ );
311
+
312
+ // if configured currency is ETH validate that msg.value is the same as max price per token
313
+ if (configuredCurrencyAddress == address(0)) {
314
+ require(msg.value == _maxPricePerToken, "inconsistent msg.value");
315
+ }
316
+
249
317
  // limit mints per address by project
250
318
  if (projectMintLimit[_projectId] > 0) {
251
319
  require(
@@ -283,13 +351,13 @@ contract GenArt721MinterBurner_PBAB is ReentrancyGuard {
283
351
  }
284
352
 
285
353
  // validate and split funds
286
- if (
287
- keccak256(
288
- abi.encodePacked(
289
- genArtCoreContract.projectIdToCurrencySymbol(_projectId)
290
- )
291
- ) != keccak256(abi.encodePacked("ETH"))
292
- ) {
354
+ if (configuredCurrencyAddress != address(0)) {
355
+ // validate that the specified maximum price is greater than or equal to the price per token
356
+ require(
357
+ _maxPricePerToken >= pricePerTokenInWei,
358
+ "Only max price gte token price"
359
+ );
360
+
293
361
  require(
294
362
  msg.value == 0,
295
363
  "this project accepts a different currency and cannot accept ETH"
@@ -297,28 +365,19 @@ contract GenArt721MinterBurner_PBAB is ReentrancyGuard {
297
365
  require(
298
366
  IERC20(
299
367
  genArtCoreContract.projectIdToCurrencyAddress(_projectId)
300
- ).allowance(msg.sender, address(this)) >=
301
- genArtCoreContract.projectIdToPricePerTokenInWei(
302
- _projectId
303
- ),
368
+ ).allowance(msg.sender, address(this)) >= pricePerTokenInWei,
304
369
  "Insufficient Funds Approved for TX"
305
370
  );
306
371
  require(
307
372
  IERC20(
308
373
  genArtCoreContract.projectIdToCurrencyAddress(_projectId)
309
- ).balanceOf(msg.sender) >=
310
- genArtCoreContract.projectIdToPricePerTokenInWei(
311
- _projectId
312
- ),
374
+ ).balanceOf(msg.sender) >= pricePerTokenInWei,
313
375
  "Insufficient balance."
314
376
  );
315
377
  _splitFundsERC20(_projectId);
316
378
  } else {
317
379
  require(
318
- msg.value >=
319
- genArtCoreContract.projectIdToPricePerTokenInWei(
320
- _projectId
321
- ),
380
+ msg.value >= pricePerTokenInWei,
322
381
  "Must send minimum value to mint!"
323
382
  );
324
383
  _splitFundsETH(_projectId);
@@ -176,18 +176,49 @@ contract GenArt721Minter_PBAB is ReentrancyGuard {
176
176
  }
177
177
 
178
178
  /**
179
- * @notice Purchases a token from project `_projectId`.
179
+ * @notice Purchases a token from project `_projectId` with ETH.
180
180
  * @param _projectId Project ID to mint a token on.
181
181
  * @return _tokenId Token ID of minted token
182
182
  */
183
183
  function purchase(
184
184
  uint256 _projectId
185
185
  ) public payable returns (uint256 _tokenId) {
186
- return purchaseTo(msg.sender, _projectId);
186
+ // pass currency address as ETH
187
+ address _currencyAddress = address(0);
188
+ uint256 _maxPricePerToken = msg.value;
189
+
190
+ return
191
+ purchaseTo(
192
+ msg.sender,
193
+ _projectId,
194
+ _maxPricePerToken,
195
+ _currencyAddress
196
+ );
187
197
  }
188
198
 
189
199
  /**
190
- * @notice Purchases a token from project `_projectId` and sets
200
+ * @notice Purchases a token from project `_projectId` with ETH or any ERC-20 token.
201
+ * @param _projectId Project ID to mint a token on.
202
+ * @param _maxPricePerToken Maximum price of token being allowed by the purchaser, no decimal places.
203
+ * @param _currencyAddress Currency address of token. `address(0)` if minting with ETH.
204
+ * @return _tokenId Token ID of minted token
205
+ */
206
+ function purchase(
207
+ uint256 _projectId,
208
+ uint256 _maxPricePerToken,
209
+ address _currencyAddress
210
+ ) public payable returns (uint256 _tokenId) {
211
+ return
212
+ purchaseTo(
213
+ msg.sender,
214
+ _projectId,
215
+ _maxPricePerToken,
216
+ _currencyAddress
217
+ );
218
+ }
219
+
220
+ /**
221
+ * @notice Purchases a token from project `_projectId` with ETH and sets
191
222
  * the token's owner to `_to`.
192
223
  * @param _to Address to be the new token's owner.
193
224
  * @param _projectId Project ID to mint a token on.
@@ -196,6 +227,28 @@ contract GenArt721Minter_PBAB is ReentrancyGuard {
196
227
  function purchaseTo(
197
228
  address _to,
198
229
  uint256 _projectId
230
+ ) public payable returns (uint256 _tokenId) {
231
+ // pass currency address as ETH
232
+ address _currencyAddress = address(0);
233
+ uint256 _maxPricePerToken = msg.value;
234
+
235
+ return purchaseTo(_to, _projectId, _maxPricePerToken, _currencyAddress);
236
+ }
237
+
238
+ /**
239
+ * @notice Purchases a token from project `_projectId` with ETH or any ERC-20 token and sets
240
+ * the token's owner to `_to`.
241
+ * @param _to Address to be the new token's owner.
242
+ * @param _projectId Project ID to mint a token on.
243
+ * @param _maxPricePerToken Maximum price of token being allowed by the purchaser, no decimal places. Required if currency is ERC20.
244
+ * @param _currencyAddress Currency address of token. `address(0)` if minting with ETH.
245
+ * @return _tokenId Token ID of minted token
246
+ */
247
+ function purchaseTo(
248
+ address _to,
249
+ uint256 _projectId,
250
+ uint256 _maxPricePerToken,
251
+ address _currencyAddress
199
252
  ) public payable nonReentrant returns (uint256 _tokenId) {
200
253
  // CHECKS
201
254
  require(
@@ -207,6 +260,20 @@ contract GenArt721Minter_PBAB is ReentrancyGuard {
207
260
  require(msg.sender == tx.origin, "No Contract Buys");
208
261
  }
209
262
 
263
+ uint256 pricePerTokenInWei = genArtCoreContract
264
+ .projectIdToPricePerTokenInWei(_projectId);
265
+ address configuredCurrencyAddress = genArtCoreContract
266
+ .projectIdToCurrencyAddress(_projectId);
267
+ // validate that the currency address matches the project configured currency
268
+ require(
269
+ _currencyAddress == configuredCurrencyAddress,
270
+ "Currency addresses must match"
271
+ );
272
+
273
+ // if configured currency is ETH validate that msg.value is the same as max price per token
274
+ if (configuredCurrencyAddress == address(0)) {
275
+ require(msg.value == _maxPricePerToken, "inconsistent msg.value");
276
+ }
210
277
  // limit mints per address by project
211
278
  if (projectMintLimit[_projectId] > 0) {
212
279
  require(
@@ -244,13 +311,13 @@ contract GenArt721Minter_PBAB is ReentrancyGuard {
244
311
  }
245
312
 
246
313
  // validate and split funds
247
- if (
248
- keccak256(
249
- abi.encodePacked(
250
- genArtCoreContract.projectIdToCurrencySymbol(_projectId)
251
- )
252
- ) != keccak256(abi.encodePacked("ETH"))
253
- ) {
314
+ if (configuredCurrencyAddress != address(0)) {
315
+ // validate that the specified maximum price is greater than or equal to the price per token
316
+ require(
317
+ _maxPricePerToken >= pricePerTokenInWei,
318
+ "Only max price gte token price"
319
+ );
320
+
254
321
  require(
255
322
  msg.value == 0,
256
323
  "this project accepts a different currency and cannot accept ETH"
@@ -258,28 +325,19 @@ contract GenArt721Minter_PBAB is ReentrancyGuard {
258
325
  require(
259
326
  IERC20(
260
327
  genArtCoreContract.projectIdToCurrencyAddress(_projectId)
261
- ).allowance(msg.sender, address(this)) >=
262
- genArtCoreContract.projectIdToPricePerTokenInWei(
263
- _projectId
264
- ),
328
+ ).allowance(msg.sender, address(this)) >= pricePerTokenInWei,
265
329
  "Insufficient Funds Approved for TX"
266
330
  );
267
331
  require(
268
332
  IERC20(
269
333
  genArtCoreContract.projectIdToCurrencyAddress(_projectId)
270
- ).balanceOf(msg.sender) >=
271
- genArtCoreContract.projectIdToPricePerTokenInWei(
272
- _projectId
273
- ),
334
+ ).balanceOf(msg.sender) >= pricePerTokenInWei,
274
335
  "Insufficient balance."
275
336
  );
276
337
  _splitFundsERC20(_projectId);
277
338
  } else {
278
339
  require(
279
- msg.value >=
280
- genArtCoreContract.projectIdToPricePerTokenInWei(
281
- _projectId
282
- ),
340
+ msg.value >= pricePerTokenInWei,
283
341
  "Must send minimum value to mint!"
284
342
  );
285
343
  _splitFundsETH(_projectId);