@artblocks/contracts 1.0.4 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/README.md +75 -7
  2. package/artifacts/contracts/AdminACLV0.sol/AdminACLV0.json +2 -2
  3. package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
  4. package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +336 -131
  5. package/artifacts/contracts/archive/GenArt721CoreV3.sol/GenArt721CoreV3.json +2047 -0
  6. package/artifacts/contracts/archive/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +2021 -0
  7. package/artifacts/contracts/{minter-suite → archive/minter-suite}/Minters/MinterBase_v0_1_1.sol/MinterBase.json +1 -1
  8. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
  9. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
  10. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExp}/MinterDAExpV4.sol/MinterDAExpV4.json +3 -3
  11. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  12. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  13. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +1109 -0
  14. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
  15. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
  16. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDALin}/MinterDALinV4.sol/MinterDALinV4.json +3 -3
  17. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
  18. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
  19. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
  20. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterHolder}/MinterHolderV4.sol/MinterHolderV4.json +3 -3
  21. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
  22. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
  23. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
  24. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
  25. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterMerkle}/MinterMerkleV5.sol/MinterMerkleV5.json +3 -3
  26. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +31 -63
  27. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol/MinterPolyptychV0.json +3 -3
  28. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSEA}/MinterSEAV0.sol/MinterSEAV0.json +3 -3
  29. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  30. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  31. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPrice}/MinterSetPriceV4.sol/MinterSetPriceV4.json +3 -3
  32. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol/MinterSetPriceERC20V0.json +65 -2
  33. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol/MinterSetPriceERC20V1.json +65 -2
  34. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  35. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  36. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +807 -0
  37. package/artifacts/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol/GenArt721MinterBurner_PBAB.json +65 -2
  38. package/artifacts/contracts/engine/V2/GenArt721Minter_PBAB.sol/GenArt721Minter_PBAB.json +65 -2
  39. package/artifacts/contracts/engine/V3/EngineFactoryV0.sol/EngineFactoryV0.json +606 -0
  40. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +565 -209
  41. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +785 -227
  42. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +40 -15
  43. package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +2 -2
  44. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +40 -15
  45. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +36 -68
  46. package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +12 -12
  47. package/artifacts/contracts/interfaces/v0.8.x/IAdminACLV0_Extended.sol/IAdminACLV0_Extended.json +140 -0
  48. package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol/IBytecodeStorageReaderV2.json +130 -0
  49. package/artifacts/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol/ICoreRegistryV1.json +6 -6
  50. package/artifacts/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +71 -39
  51. package/artifacts/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol/IEngineFactoryV0.json +283 -0
  52. package/artifacts/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV0.sol/IFilteredMinterDAExpSettlementV0.json +12 -12
  53. package/artifacts/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV1.sol/IFilteredMinterDAExpSettlementV1.json +12 -12
  54. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +30 -62
  55. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +30 -62
  56. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +170 -104
  57. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +170 -104
  58. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.json +1028 -0
  59. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol/IGenArt721CoreContractV3_Engine_PreV3p2.json +741 -0
  60. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_ProjectFinance.sol/IGenArt721CoreContractV3_ProjectFinance.json +87 -0
  61. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721Minter_PBAB.sol/IGenArt721Minter_PBAB.json +279 -0
  62. package/artifacts/contracts/interfaces/v0.8.x/IMinterFilterV1.sol/IMinterFilterV1.json +22 -22
  63. package/artifacts/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol/IPseudorandomAtomic.json +1 -1
  64. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol/ISharedMinterDAExpSettlementV0.json +26 -101
  65. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol/ISharedMinterDAExpV0.json +1 -57
  66. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol/ISharedMinterDALinV0.json +1 -57
  67. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol/ISharedMinterDAV0.json +2 -21
  68. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol/ISharedMinterHolderERC20V0.json +158 -0
  69. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol/ISharedMinterHolderV0.json +15 -90
  70. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol/ISharedMinterMerkleV0.json +10 -36
  71. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterRAMV0.sol/ISharedMinterRAMV0.json +62 -0
  72. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterRequired.sol/ISharedMinterRequired.json +37 -0
  73. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol/ISharedMinterSEAV0.json +4 -236
  74. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol/ISharedMinterSimplePurchaseV0.json +5 -5
  75. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterV0.sol/ISharedMinterV0.json +7 -423
  76. package/artifacts/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol/ISharedRandomizerV0.json +17 -17
  77. package/artifacts/contracts/interfaces/v0.8.x/ISplitAtomicFactoryV0.sol/ISplitAtomicFactoryV0.json +170 -0
  78. package/artifacts/contracts/interfaces/v0.8.x/ISplitAtomicV0.sol/ISplitAtomicV0.json +126 -0
  79. package/artifacts/contracts/interfaces/v0.8.x/ISplitProviderV0.sol/ISplitProviderV0.json +98 -0
  80. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/splits-0x-v2/ISplitFactoryV2.sol/ISplitFactoryV2.json +123 -0
  81. package/artifacts/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol/DelegationRegistry.json +2 -2
  82. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeMock.sol/GnosisSafeMock.json +2 -2
  83. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeProxyFactoryMock.sol/GnosisSafeProxyFactoryMock.json +2 -2
  84. package/artifacts/contracts/libs/integration-refs/gnosis-safe/MultiSendMock.sol/MultiSendMock.json +2 -2
  85. package/artifacts/contracts/libs/integration-refs/weth9/weth9.sol/WETH9_.json +2 -2
  86. package/artifacts/contracts/libs/v0.8.x/ABHelpers.sol/ABHelpers.json +2 -2
  87. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +2 -2
  88. package/artifacts/contracts/libs/v0.8.x/BitMap.sol/BitMaps256.json +10 -0
  89. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV0.sol/BytecodeStorage.json +2 -2
  90. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageReader.json +2 -2
  91. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageWriter.json +2 -2
  92. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageReader.json +214 -0
  93. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageWriter.json +10 -0
  94. package/artifacts/contracts/libs/v0.8.x/Bytes32Strings.sol/Bytes32Strings.json +2 -2
  95. package/artifacts/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol/DependencyRegistryStorageLib.json +10 -0
  96. package/artifacts/contracts/libs/v0.8.x/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +2 -2
  97. package/artifacts/contracts/libs/v0.8.x/ERC721_PackedHashSeedV1.sol/ERC721_PackedHashSeedV1.json +444 -0
  98. package/artifacts/contracts/libs/v0.8.x/PackedBools.sol/PackedBools.json +10 -0
  99. package/artifacts/contracts/libs/v0.8.x/SSTORE2.sol/SSTORE2.json +2 -2
  100. package/artifacts/contracts/libs/v0.8.x/V3FlexLib.sol/V3FlexLib.json +208 -0
  101. package/artifacts/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol/DAExpLib.json +60 -3
  102. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALib.sol/DALib.json +30 -0
  103. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +60 -3
  104. package/artifacts/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol/GenericMinterEventsLib.json +346 -0
  105. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +29 -3
  106. package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +30 -3
  107. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +2 -2
  108. package/artifacts/contracts/libs/v0.8.x/minter-libs/RAMLib.sol/RAMLib.json +398 -0
  109. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +254 -3
  110. package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +48 -3
  111. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +41 -3
  112. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +35 -3
  113. package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +79 -3
  114. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  115. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +41 -41
  116. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +66 -632
  117. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +67 -594
  118. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +33 -524
  119. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +66 -632
  120. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +33 -524
  121. package/artifacts/contracts/minter-suite/Minters/MinterRAMV0.sol/MinterRAMV0.json +1374 -0
  122. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +56 -722
  123. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +58 -454
  124. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +61 -552
  125. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +55 -497
  126. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +110 -571
  127. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +69 -560
  128. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +28 -444
  129. package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol/MinterSetPriceV5_SingleCore.json +417 -0
  130. package/artifacts/contracts/mock/BytecodeV2LibCallsMock.sol/BytecodeV2LibCallsMock.json +154 -0
  131. package/artifacts/contracts/mock/BytecodeV2TextCR_DMock.sol/BytecodeV2TextCR_DMock.json +428 -0
  132. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
  133. package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +2 -2
  134. package/artifacts/contracts/mock/ForceSendMock.sol/ForceSendMock.json +24 -0
  135. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +4 -9
  136. package/artifacts/contracts/mock/Mock0xSplitsV2PullFactory.sol/Mock0xSplitsV2PullFactory.json +149 -0
  137. package/artifacts/contracts/mock/Mock0xSplitsV2Splitter.sol/Mock0xSplitsV2Splitter.json +99 -0
  138. package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +20 -2
  139. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +20 -2
  140. package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +2 -2
  141. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  142. package/artifacts/contracts/mock/ReentrancyGenArt721MinterMock.sol/ReentrancyGenArt721MinterMock.json +100 -0
  143. package/artifacts/contracts/mock/ReentrancyHolderMock.sol/ReentrancyHolderMock.json +2 -2
  144. package/artifacts/contracts/mock/ReentrancyHolderMockShared.sol/ReentrancyHolderMockShared.json +136 -0
  145. package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
  146. package/artifacts/contracts/mock/ReentrancyMerkleMockShared.sol/ReentrancyMerkleMockShared.json +105 -0
  147. package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
  148. package/artifacts/contracts/mock/ReentrancyMockShared.sol/ReentrancyMockShared.json +100 -0
  149. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +2 -2
  150. package/artifacts/contracts/mock/ReentrancySEAMockShared.sol/ReentrancySEAAutoBidderMockShared.json +69 -0
  151. package/artifacts/contracts/mock/ReentrancySplitterMocks.sol/ReentrancySplitterDrainETHMock.json +54 -0
  152. package/artifacts/contracts/mock/ReentrancySplitterMocks.sol/ReentrancySplitterSendETHMock.json +54 -0
  153. package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +2 -2
  154. package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +2 -2
  155. package/artifacts/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol/PseudorandomAtomic.json +2 -2
  156. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +19 -19
  157. package/artifacts/contracts/split/SplitAtomicFactoryV0.sol/SplitAtomicFactoryV0.json +203 -0
  158. package/artifacts/contracts/split/SplitAtomicV0.sol/SplitAtomicV0.json +168 -0
  159. package/artifacts/contracts/split/split-provider/SplitProviderV0.sol/SplitProviderV0.json +141 -0
  160. package/contracts/AdminACLV0.sol +6 -2
  161. package/contracts/AdminACLV1.sol +2 -2
  162. package/contracts/DependencyRegistryV0.sol +737 -390
  163. package/contracts/{GenArt721CoreV3.sol → archive/GenArt721CoreV3.sol} +56 -20
  164. package/contracts/{explorations → archive}/GenArt721CoreV3_Explorations.sol +49 -13
  165. package/contracts/{minter-suite → archive/minter-suite}/Minters/MinterBase_v0_1_1.sol +4 -4
  166. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExp}/MinterDAExpV4.sol +4 -4
  167. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +4 -4
  168. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol +5 -5
  169. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExpSettlement}/MinterDAExpSettlementV2.sol +9 -62
  170. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDALin}/MinterDALinV4.sol +4 -4
  171. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterHolder}/MinterHolderV4.sol +5 -5
  172. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterMerkle}/MinterMerkleV5.sol +5 -5
  173. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol +7 -7
  174. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSEA}/MinterSEAV0.sol +13 -13
  175. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPrice}/MinterSetPriceV4.sol +4 -4
  176. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol +82 -10
  177. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol +82 -10
  178. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPriceERC20}/MinterSetPriceERC20V4.sol +88 -21
  179. package/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol +81 -22
  180. package/contracts/engine/V2/GenArt721Minter_PBAB.sol +80 -22
  181. package/contracts/engine/V3/EngineFactoryV0.sol +419 -0
  182. package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +893 -493
  183. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +1053 -655
  184. package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +7 -13
  185. package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +5 -11
  186. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +2 -2
  187. package/contracts/engine-registry/CoreRegistryV1.sol +58 -65
  188. package/contracts/interfaces/v0.8.x/IAdminACLV0_Extended.sol +20 -0
  189. package/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol +23 -0
  190. package/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol +6 -8
  191. package/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol +48 -43
  192. package/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol +124 -0
  193. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV0.sol +1 -3
  194. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV1.sol +1 -3
  195. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpV1.sol +1 -3
  196. package/contracts/interfaces/v0.8.x/IFilteredMinterDALinV1.sol +1 -3
  197. package/contracts/interfaces/v0.8.x/IFilteredMinterHolderV2.sol +1 -3
  198. package/contracts/interfaces/v0.8.x/IFilteredMinterMerkleV2.sol +1 -3
  199. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol +115 -11
  200. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol +84 -8
  201. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol +26 -8
  202. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol +141 -0
  203. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol +78 -0
  204. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_ProjectFinance.sol +47 -0
  205. package/contracts/interfaces/v0.8.x/IGenArt721Minter_PBAB.sol +91 -0
  206. package/contracts/interfaces/v0.8.x/IMinterFilterV1.sol +25 -25
  207. package/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol +1 -3
  208. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +30 -20
  209. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol +1 -14
  210. package/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol +1 -15
  211. package/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol +2 -8
  212. package/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol +47 -0
  213. package/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol +15 -43
  214. package/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol +10 -20
  215. package/contracts/interfaces/v0.8.x/ISharedMinterRAMV0.sol +23 -0
  216. package/contracts/interfaces/v0.8.x/ISharedMinterRequired.sol +20 -0
  217. package/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol +1 -67
  218. package/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol +5 -5
  219. package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +18 -160
  220. package/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol +37 -37
  221. package/contracts/interfaces/v0.8.x/ISplitAtomicFactoryV0.sol +81 -0
  222. package/contracts/interfaces/v0.8.x/ISplitAtomicV0.sol +72 -0
  223. package/contracts/interfaces/v0.8.x/ISplitProviderV0.sol +49 -0
  224. package/contracts/interfaces/v0.8.x/integration-refs/splits-0x-v2/ISplitFactoryV2.sol +62 -0
  225. package/contracts/libs/v0.8.x/ABHelpers.sol +31 -17
  226. package/contracts/libs/v0.8.x/AuthLib.sol +101 -102
  227. package/contracts/libs/v0.8.x/BitMap.sol +112 -0
  228. package/contracts/libs/v0.8.x/BytecodeStorageV2.sol +593 -0
  229. package/contracts/libs/v0.8.x/Bytes32Strings.sol +5 -5
  230. package/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol +90 -0
  231. package/contracts/libs/v0.8.x/ERC721_PackedHashSeedV1.sol +591 -0
  232. package/contracts/libs/v0.8.x/PackedBools.sol +42 -0
  233. package/contracts/libs/v0.8.x/V3FlexLib.sol +591 -0
  234. package/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol +162 -39
  235. package/contracts/libs/v0.8.x/minter-libs/DALib.sol +26 -0
  236. package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +139 -37
  237. package/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol +171 -0
  238. package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +299 -158
  239. package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +268 -55
  240. package/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol +138 -58
  241. package/contracts/libs/v0.8.x/minter-libs/RAMLib.sol +2927 -0
  242. package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +796 -123
  243. package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +131 -13
  244. package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +607 -224
  245. package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +494 -330
  246. package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +217 -78
  247. package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +358 -309
  248. package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +391 -491
  249. package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +396 -632
  250. package/contracts/minter-suite/Minters/MinterDAExpV5.sol +212 -273
  251. package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +393 -488
  252. package/contracts/minter-suite/Minters/MinterDALinV5.sol +220 -277
  253. package/contracts/minter-suite/Minters/MinterRAMV0.sol +1205 -0
  254. package/contracts/minter-suite/Minters/MinterSEAV1.sol +329 -677
  255. package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +287 -303
  256. package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +355 -446
  257. package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +328 -416
  258. package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +552 -622
  259. package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +429 -553
  260. package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +180 -227
  261. package/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol +446 -0
  262. package/contracts/mock/BytecodeV2LibCallsMock.sol +128 -0
  263. package/contracts/mock/BytecodeV2TextCR_DMock.sol +316 -0
  264. package/contracts/mock/ForceSendMock.sol +22 -0
  265. package/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol +3 -10
  266. package/contracts/mock/Mock0xSplitsV2PullFactory.sol +75 -0
  267. package/contracts/mock/Mock0xSplitsV2Splitter.sol +47 -0
  268. package/contracts/mock/MockAdminACLV0.sol +21 -0
  269. package/contracts/mock/MockAdminACLV0_PROHIBITION.sol +21 -0
  270. package/contracts/mock/ReentrancyGenArt721MinterMock.sol +47 -0
  271. package/contracts/mock/ReentrancyHolderMockShared.sol +59 -0
  272. package/contracts/mock/ReentrancyMerkleMockShared.sol +58 -0
  273. package/contracts/mock/ReentrancyMockShared.sol +48 -0
  274. package/contracts/mock/ReentrancySEAMockShared.sol +40 -0
  275. package/contracts/mock/ReentrancySplitterMocks.sol +67 -0
  276. package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +1 -1
  277. package/contracts/randomizer/shared/SharedRandomizerV0.sol +79 -71
  278. package/contracts/split/SplitAtomicFactoryV0.sol +121 -0
  279. package/contracts/split/SplitAtomicV0.sol +265 -0
  280. package/contracts/split/split-provider/SplitProviderV0.sol +201 -0
  281. package/package.json +79 -45
  282. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +0 -1965
  283. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +0 -1939
  284. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +0 -1127
  285. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +0 -768
  286. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +0 -208
  287. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol/GenArt721RoyaltyOverride_PBAB.json +0 -301
  288. package/contracts/royalty-registry/GenArt721RoyaltyOverride.sol +0 -168
  289. package/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol +0 -221
@@ -0,0 +1,58 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ import "../interfaces/v0.8.x/ISharedMinterMerkleV0.sol";
5
+
6
+ pragma solidity ^0.8.0;
7
+
8
+ contract ReentrancyMerkleMockShared {
9
+ uint256 public currentQtyToPurchase;
10
+ uint256 public currentProjectId;
11
+ address public currentCoreContract;
12
+ uint256 public currentPriceToPay;
13
+ bytes32[3] currentProof;
14
+
15
+ /**
16
+ @notice This function can be called to induce controlled reentrency attacks
17
+ on the shared AB minter filter suite.
18
+ Note that _priceToPay should be > project price per token to induce refund,
19
+ making reentrency possible via fallback function.
20
+ */
21
+ function attack(
22
+ uint256 _qtyToPurchase,
23
+ address _minterContractAddress,
24
+ uint256 _projectId,
25
+ address _coreContract,
26
+ uint256 _priceToPay,
27
+ bytes32[] memory _proof
28
+ ) external payable {
29
+ // update state variables so that receive() knows what to do
30
+ currentQtyToPurchase = _qtyToPurchase;
31
+ currentProjectId = _projectId;
32
+ currentCoreContract = _coreContract;
33
+ currentPriceToPay = _priceToPay;
34
+ currentProof[0] = _proof[0];
35
+ currentProof[1] = _proof[1];
36
+ currentProof[2] = _proof[2];
37
+ ISharedMinterMerkleV0(_minterContractAddress).purchase{
38
+ value: _priceToPay
39
+ }(_projectId, _coreContract, _proof);
40
+ }
41
+
42
+ // receiver is called when minter sends refunded Ether to this contract.
43
+ receive() external payable {
44
+ // decrement num to be purchased
45
+ currentQtyToPurchase--;
46
+ if (currentQtyToPurchase > 0) {
47
+ // rebuild _proof
48
+ bytes32[] memory _proof = new bytes32[](3);
49
+ _proof[0] = currentProof[0];
50
+ _proof[1] = currentProof[1];
51
+ _proof[2] = currentProof[2];
52
+ // purchase again!
53
+ ISharedMinterMerkleV0(msg.sender).purchase{
54
+ value: currentPriceToPay
55
+ }(currentProjectId, currentCoreContract, _proof);
56
+ }
57
+ }
58
+ }
@@ -0,0 +1,48 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ import "../interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol";
5
+
6
+ pragma solidity ^0.8.0;
7
+
8
+ contract ReentrancyMockShared {
9
+ uint256 public currentQtyToPurchase;
10
+ uint256 public currentProjectId;
11
+ address public currentCoreContract;
12
+ uint256 public currentPriceToPay;
13
+
14
+ /**
15
+ @notice This function can be called to induce controlled reentrency attacks
16
+ on the shared AB minter filter suite.
17
+ Note that _priceToPay should be > project price per token to induce refund,
18
+ making reentrency possible via fallback function.
19
+ */
20
+ function attack(
21
+ uint256 _qtyToPurchase,
22
+ address _minterContractAddress,
23
+ uint256 _projectId,
24
+ address _coreContract,
25
+ uint256 _priceToPay
26
+ ) external payable {
27
+ // update state variables so that receive() knows what to do
28
+ currentQtyToPurchase = _qtyToPurchase;
29
+ currentProjectId = _projectId;
30
+ currentCoreContract = _coreContract;
31
+ currentPriceToPay = _priceToPay;
32
+ ISharedMinterSimplePurchaseV0(_minterContractAddress).purchase{
33
+ value: _priceToPay
34
+ }(_projectId, _coreContract);
35
+ }
36
+
37
+ // receiver is called when minter sends refunded Ether to this contract.
38
+ receive() external payable {
39
+ // decrement num to be purchased
40
+ currentQtyToPurchase--;
41
+ if (currentQtyToPurchase > 0) {
42
+ // purchase again!
43
+ ISharedMinterSimplePurchaseV0(msg.sender).purchase{
44
+ value: currentPriceToPay
45
+ }(currentProjectId, currentCoreContract);
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,40 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ import "../interfaces/v0.8.x/ISharedMinterSEAV0.sol";
5
+
6
+ pragma solidity ^0.8.0;
7
+
8
+ contract ReentrancySEAAutoBidderMockShared {
9
+ uint256 public targetTokenId;
10
+ address public targetCoreContract;
11
+
12
+ /**
13
+ @notice This function can be called to induce controlled reentrency attacks
14
+ on AB minter filter suite.
15
+ Note that _priceToPay should be > project price per token to induce refund,
16
+ making reentrency possible via fallback function.
17
+ */
18
+ function attack(
19
+ uint256 _targetTokenId,
20
+ address _targetCoreContract,
21
+ address _minterContractAddress,
22
+ uint256 _initialBidValue
23
+ ) external payable {
24
+ targetTokenId = _targetTokenId;
25
+ targetCoreContract = _targetCoreContract;
26
+ ISharedMinterSEAV0(_minterContractAddress).createBid{
27
+ value: _initialBidValue
28
+ }(_targetTokenId, _targetCoreContract);
29
+ }
30
+
31
+ // receiver is called when minter sends refunded Ether to this contract, when outbid
32
+ receive() external payable {
33
+ // auto-rebid
34
+ uint256 newBidValue = (msg.value * 110) / 100;
35
+ ISharedMinterSEAV0(msg.sender).createBid{value: newBidValue}(
36
+ targetTokenId,
37
+ targetCoreContract
38
+ );
39
+ }
40
+ }
@@ -0,0 +1,67 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ import "../interfaces/v0.8.x/ISplitAtomicV0.sol";
5
+
6
+ pragma solidity ^0.8.0;
7
+
8
+ contract ReentrancySplitterSendETHMock {
9
+ address public currentSplitterAddress;
10
+ bool public haveReentered;
11
+
12
+ receive() external payable {
13
+ // only re-enter once to prevent infinite loop
14
+ if (haveReentered) {
15
+ return;
16
+ }
17
+ // update state
18
+ haveReentered = true;
19
+ // re-enter via sending ETH to splitter's receive function
20
+ (bool success, ) = currentSplitterAddress.call{value: msg.value}("");
21
+ require(success, "attack failed");
22
+ // reset state
23
+ haveReentered = false;
24
+ }
25
+
26
+ /**
27
+ @notice This function can be called to induce controlled reentrency attacks
28
+ on AB minter filter suite.
29
+ Note that _priceToPay should be > project price per token to induce refund,
30
+ making reentrency possible via fallback function.
31
+ */
32
+ function attack(address splitterAddress) external payable {
33
+ currentSplitterAddress = splitterAddress;
34
+ (bool success, ) = splitterAddress.call{value: msg.value}("");
35
+ require(success, "attack failed");
36
+ }
37
+ }
38
+
39
+ contract ReentrancySplitterDrainETHMock {
40
+ address public currentSplitterAddress;
41
+ bool public haveReentered;
42
+
43
+ receive() external payable {
44
+ // only re-enter once to prevent infinite loop
45
+ if (haveReentered) {
46
+ return;
47
+ }
48
+ // update state
49
+ haveReentered = true;
50
+ // re-enter via calling splitter's drainETH function
51
+ ISplitAtomicV0(currentSplitterAddress).drainETH();
52
+ // reset state
53
+ haveReentered = false;
54
+ }
55
+
56
+ /**
57
+ @notice This function can be called to induce controlled reentrency attacks
58
+ on AB minter filter suite.
59
+ Note that _priceToPay should be > project price per token to induce refund,
60
+ making reentrency possible via fallback function.
61
+ */
62
+ function attack(address splitterAddress) external payable {
63
+ currentSplitterAddress = splitterAddress;
64
+ (bool success, ) = splitterAddress.call{value: msg.value}("");
65
+ require(success, "attack failed");
66
+ }
67
+ }
@@ -10,7 +10,7 @@ import "../../interfaces/v0.8.x/IPseudorandomAtomic.sol";
10
10
  * @author Art Blocks Inc.
11
11
  * @notice This contract atomically returns a pseudorandom value.
12
12
  */
13
- contract PseudorandomAtomic {
13
+ contract PseudorandomAtomic is IPseudorandomAtomic {
14
14
  // base class that returns
15
15
  function getPseudorandomAtomic(
16
16
  bytes32 _entropy
@@ -1,6 +1,8 @@
1
1
  // SPDX-License-Identifier: LGPL-3.0-only
2
2
  // Creatd By: Art Blocks Inc.
3
3
 
4
+ // @dev fixed to specific solidity version for clarity and for more clear
5
+ // source code verification purposes.
4
6
  pragma solidity 0.8.19;
5
7
 
6
8
  import "../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
@@ -59,26 +61,26 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
59
61
  // @dev this mapping is only used when the project is configured as using
60
62
  // a hash seed setter contract. It is not populated when the project is
61
63
  // using pseudorandomAtomicContract.
62
- mapping(address => mapping(uint256 => bytes12))
64
+ mapping(address coreContract => mapping(uint256 tokenId => bytes12 preAssignedHashSeed))
63
65
  private _preAssignedHashSeeds;
64
66
 
65
67
  // mapping of core contract => project ID => usesHashSeedSetter Contract
66
- mapping(address => mapping(uint256 => bool))
68
+ mapping(address coreContract => mapping(uint256 projectId => bool usesHashSeedSetter))
67
69
  private _projectUsesHashSeedSetter;
68
70
 
69
71
  // mapping of core contract => projectId => hash seed setter contract
70
- mapping(address => mapping(uint256 => address))
72
+ mapping(address coreContract => mapping(uint256 projectId => address hashSeedSetterContract))
71
73
  private _hashSeedSetterContracts;
72
74
 
73
75
  // modifier to restrict access to only Artist allowed calls
74
76
  function _onlyArtist(
75
- address _coreContract,
76
- uint256 _projectId
77
+ address coreContract,
78
+ uint256 projectId
77
79
  ) internal view {
78
80
  require(
79
81
  msg.sender ==
80
- IGenArt721CoreContractV3_Base(_coreContract)
81
- .projectIdToArtistAddress(_projectId),
82
+ IGenArt721CoreContractV3_Base(coreContract)
83
+ .projectIdToArtistAddress(projectId),
82
84
  "Only Artist"
83
85
  );
84
86
  }
@@ -86,32 +88,32 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
86
88
  /**
87
89
  * Modifier to restrict access to only calls by the hash seed setter
88
90
  * contract of a given project.
89
- * @param _coreContract core contract address associated with the project
90
- * @param _projectId project ID being set
91
+ * @param coreContract core contract address associated with the project
92
+ * @param projectId project ID being set
91
93
  */
92
94
  function _onlyHashSeedSetterContract(
93
- address _coreContract,
94
- uint256 _projectId
95
+ address coreContract,
96
+ uint256 projectId
95
97
  ) internal view {
96
98
  require(
97
- msg.sender == _hashSeedSetterContracts[_coreContract][_projectId],
99
+ msg.sender == _hashSeedSetterContracts[coreContract][projectId],
98
100
  "Only Hash Seed Setter Contract"
99
101
  );
100
102
  }
101
103
 
102
104
  /**
103
105
  *
104
- * @param _pseudorandomAtomicContract Address of the pseudorandom atomic
106
+ * @param pseudorandomAtomicContract_ Address of the pseudorandom atomic
105
107
  * contract to use for atomically generating random values. This contract
106
108
  * does not have an owner, and therefore the pseudorandom atomic contract
107
109
  * address cannot be changed after deployment.
108
110
  */
109
- constructor(address _pseudorandomAtomicContract) {
111
+ constructor(address pseudorandomAtomicContract_) {
110
112
  pseudorandomAtomicContract = IPseudorandomAtomic(
111
- _pseudorandomAtomicContract
113
+ pseudorandomAtomicContract_
112
114
  );
113
115
  emit PseudorandomAtomicContractUpdated({
114
- pseudorandomAtomicContract: _pseudorandomAtomicContract
116
+ pseudorandomAtomicContract: pseudorandomAtomicContract_
115
117
  });
116
118
  }
117
119
 
@@ -119,18 +121,18 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
119
121
  * @inheritdoc ISharedRandomizerV0
120
122
  */
121
123
  function setHashSeedSetterContract(
122
- address _coreContract,
123
- uint256 _projectId,
124
- address _hashSeedSetterContract
124
+ address coreContract,
125
+ uint256 projectId,
126
+ address hashSeedSetterContract
125
127
  ) external {
126
- _onlyArtist(_coreContract, _projectId);
127
- _hashSeedSetterContracts[_coreContract][
128
- _projectId
129
- ] = _hashSeedSetterContract;
128
+ _onlyArtist({projectId: projectId, coreContract: coreContract});
129
+ _hashSeedSetterContracts[coreContract][
130
+ projectId
131
+ ] = hashSeedSetterContract;
130
132
  emit HashSeedSetterForProjectUpdated({
131
- coreContract: _coreContract,
132
- projectId: _projectId,
133
- hashSeedSetterContract: _hashSeedSetterContract
133
+ coreContract: coreContract,
134
+ projectId: projectId,
135
+ hashSeedSetterContract: hashSeedSetterContract
134
136
  });
135
137
  }
136
138
 
@@ -138,18 +140,18 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
138
140
  * @inheritdoc ISharedRandomizerV0
139
141
  */
140
142
  function toggleProjectUseAssignedHashSeed(
141
- address _coreContract,
142
- uint256 _projectId
143
+ address coreContract,
144
+ uint256 projectId
143
145
  ) external {
144
- _onlyArtist(_coreContract, _projectId);
145
- _projectUsesHashSeedSetter[_coreContract][
146
- _projectId
147
- ] = !_projectUsesHashSeedSetter[_coreContract][_projectId];
146
+ _onlyArtist({projectId: projectId, coreContract: coreContract});
147
+ _projectUsesHashSeedSetter[coreContract][
148
+ projectId
149
+ ] = !_projectUsesHashSeedSetter[coreContract][projectId];
148
150
  emit ProjectUsingHashSeedSetterUpdated({
149
- coreContract: _coreContract,
150
- projectId: _projectId,
151
- usingHashSeedSetter: _projectUsesHashSeedSetter[_coreContract][
152
- _projectId
151
+ coreContract: coreContract,
152
+ projectId: projectId,
153
+ usingHashSeedSetter: _projectUsesHashSeedSetter[coreContract][
154
+ projectId
153
155
  ]
154
156
  });
155
157
  }
@@ -158,13 +160,16 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
158
160
  * @inheritdoc ISharedRandomizerV0
159
161
  */
160
162
  function preSetHashSeed(
161
- address _coreContract,
162
- uint256 _tokenId,
163
- bytes12 _hashSeed
163
+ address coreContract,
164
+ uint256 tokenId,
165
+ bytes12 hashSeed
164
166
  ) external {
165
- uint256 projectId = _tokenIdToProjectId(_tokenId);
166
- _onlyHashSeedSetterContract(_coreContract, projectId);
167
- _preAssignedHashSeeds[_coreContract][_tokenId] = _hashSeed;
167
+ uint256 projectId = _tokenIdToProjectId(tokenId);
168
+ _onlyHashSeedSetterContract({
169
+ projectId: projectId,
170
+ coreContract: coreContract
171
+ });
172
+ _preAssignedHashSeeds[coreContract][tokenId] = hashSeed;
168
173
  // @dev event indicating token hash seed assigned is not required for
169
174
  // subgraph indexing because token hash seeds are still assigned
170
175
  // atomically in `assignTokenHash` function. If token hash seeds were
@@ -175,7 +180,7 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
175
180
  /**
176
181
  * @inheritdoc IRandomizer_V3CoreBase
177
182
  */
178
- function assignTokenHash(uint256 _tokenId) external {
183
+ function assignTokenHash(uint256 tokenId) external {
179
184
  // @dev This function is not specifically gated to any specific caller,
180
185
  // but will only call back to the calling contract, `msg.sender`, to
181
186
  // set the specified token's hash seed.
@@ -183,78 +188,81 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
183
188
  // the token hash seed on a different core contract.
184
189
  // @dev variables are named to improve readability
185
190
  address coreContract = msg.sender;
186
- uint256 projectId = _tokenIdToProjectId(_tokenId);
191
+ uint256 projectId = _tokenIdToProjectId(tokenId);
187
192
  bytes32 hashSeed;
188
193
  if (_projectUsesHashSeedSetter[coreContract][projectId]) {
189
- hashSeed = _preAssignedHashSeeds[coreContract][_tokenId];
194
+ hashSeed = _preAssignedHashSeeds[coreContract][tokenId];
190
195
  } else {
191
- hashSeed = _getPseudorandomAtomic(coreContract, _tokenId);
196
+ hashSeed = _getPseudorandomAtomic({
197
+ coreContract: coreContract,
198
+ tokenId: tokenId
199
+ });
192
200
  }
193
201
  // verify that the hash seed is non-zero
194
202
  require(hashSeed != 0, "Only non-zero hash seed");
195
203
  // assign the token hash seed on the core contract
196
- IGenArt721CoreContractV3_Base(coreContract).setTokenHash_8PT(
197
- _tokenId,
198
- hashSeed
199
- );
204
+ IGenArt721CoreContractV3_Base(coreContract).setTokenHash_8PT({
205
+ _tokenId: tokenId,
206
+ _hash: hashSeed
207
+ });
200
208
  }
201
209
 
202
210
  /**
203
211
  * @inheritdoc ISharedRandomizerV0
204
212
  */
205
213
  function projectUsesHashSeedSetter(
206
- address _coreContract,
207
- uint256 _projectId
208
- ) external view returns (bool _usingHashSeedSetter) {
209
- return _projectUsesHashSeedSetter[_coreContract][_projectId];
214
+ address coreContract,
215
+ uint256 projectId
216
+ ) external view returns (bool usingHashSeedSetter) {
217
+ return _projectUsesHashSeedSetter[coreContract][projectId];
210
218
  }
211
219
 
212
220
  /**
213
221
  * @inheritdoc ISharedRandomizerV0
214
222
  */
215
223
  function hashSeedSetterContracts(
216
- address _coreContract,
217
- uint256 _projectId
224
+ address coreContract,
225
+ uint256 projectId
218
226
  ) external view returns (address _hashSeedSetterContract) {
219
- return _hashSeedSetterContracts[_coreContract][_projectId];
227
+ return _hashSeedSetterContracts[coreContract][projectId];
220
228
  }
221
229
 
222
230
  /**
223
231
  * @inheritdoc ISharedRandomizerV0
224
232
  */
225
233
  function preAssignedHashSeed(
226
- address _coreContract,
227
- uint256 _tokenId
234
+ address coreContract,
235
+ uint256 tokenId
228
236
  ) external view returns (bytes12 _hashSeed) {
229
- return _preAssignedHashSeeds[_coreContract][_tokenId];
237
+ return _preAssignedHashSeeds[coreContract][tokenId];
230
238
  }
231
239
 
232
240
  /**
233
241
  * @notice Internal function to atomically obtain a pseudorandom number
234
242
  * from the configured pseudorandom contract.
235
- * @param _coreContract - The core contract that is requesting an atomic
243
+ * @param coreContract - The core contract that is requesting an atomic
236
244
  * pseudorandom number.
237
- * @param _tokenId - The token ID on `_coreContract` that is associated
245
+ * @param tokenId - The token ID on `coreContract` that is associated
238
246
  * with the pseudorandom number request.
239
247
  */
240
248
  function _getPseudorandomAtomic(
241
- address _coreContract,
242
- uint256 _tokenId
243
- ) internal view returns (bytes32) {
249
+ address coreContract,
250
+ uint256 tokenId
251
+ ) internal returns (bytes32) {
244
252
  return
245
253
  pseudorandomAtomicContract.getPseudorandomAtomic(
246
- keccak256(abi.encodePacked(_coreContract, _tokenId))
254
+ keccak256(abi.encodePacked(coreContract, tokenId))
247
255
  );
248
256
  }
249
257
 
250
258
  /**
251
- * @notice Gets the project ID for a given `_tokenId`.
252
- * @param _tokenId Token ID to be queried.
253
- * @return projectId Project ID for given `_tokenId`.
259
+ * @notice Gets the project ID for a given `tokenId`.
260
+ * @param tokenId Token ID to be queried.
261
+ * @return projectId Project ID for given `tokenId`.
254
262
  */
255
263
  function _tokenIdToProjectId(
256
- uint256 _tokenId
264
+ uint256 tokenId
257
265
  ) internal pure returns (uint256 projectId) {
258
- return _tokenId / ONE_MILLION;
266
+ return tokenId / ONE_MILLION;
259
267
  }
260
268
  }
@@ -0,0 +1,121 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ // @dev fixed to specific solidity version for clarity and for more clear
5
+ // source code verification purposes.
6
+ pragma solidity 0.8.22;
7
+
8
+ import {ISplitAtomicV0, Split} from "../interfaces/v0.8.x/ISplitAtomicV0.sol";
9
+ import {ISplitAtomicFactoryV0} from "../interfaces/v0.8.x/ISplitAtomicFactoryV0.sol";
10
+
11
+ import {Clones} from "@openzeppelin-5.0/contracts/proxy/Clones.sol";
12
+
13
+ /**
14
+ * @title SplitAtomicFactoryV0
15
+ * @author Art Blocks Inc.
16
+ * @notice Factory contract for creating new split atomic contracts.
17
+ * @dev This contract is deployed once, and then used to create new split
18
+ * atomic contracts. The contract may be abandoned once it is no longer needed.
19
+ * Once abandoned, the contract can no longer be used to create new split
20
+ * atomic contracts.
21
+ * The contract is initialized with a required split address and basis points.
22
+ * All splits must include the required split address and basis points.
23
+ * The contract is initialized with an implementation contract, which is cloned
24
+ * when creating new split atomic contracts.
25
+ */
26
+ contract SplitAtomicFactoryV0 is ISplitAtomicFactoryV0 {
27
+ // public type
28
+ bytes32 public constant type_ = "SplitAtomicFactoryV0";
29
+
30
+ /**
31
+ * The implementation contract that is cloned when creating new split
32
+ * atomic contracts.
33
+ */
34
+ address public immutable splitAtomicImplementation;
35
+
36
+ // required split address and basis points
37
+ // @dev make immutable to avoid SLOAD on every createSplit call
38
+ address public immutable requiredSplitAddress;
39
+ uint16 public immutable requiredSplitBasisPoints;
40
+
41
+ // deployer of the contract is the only one who may abandon the contract
42
+ address public immutable deployer;
43
+
44
+ /**
45
+ * Indicates whether the contract is abandoned.
46
+ * Once abandoned, the contract can no longer be used to create new split
47
+ * atomic contracts.
48
+ */
49
+ bool public isAbandoned; // default false
50
+
51
+ /**
52
+ * @notice validates and assigns immutable configuration variables
53
+ * @param splitAtomicImplementation_ address of the split atomic
54
+ * implementation contract
55
+ * @param requiredSplitAddress_ address that must be included in all splits
56
+ * @param requiredSplitBasisPoints_ basis points that must be included in
57
+ * all splits, for the required split address. Must be <= 10_000.
58
+ */
59
+ constructor(
60
+ address splitAtomicImplementation_,
61
+ address requiredSplitAddress_,
62
+ uint16 requiredSplitBasisPoints_
63
+ ) {
64
+ // input validation
65
+ require(
66
+ requiredSplitBasisPoints_ <= 10_000,
67
+ "only reqd split BPS <= 10_000"
68
+ );
69
+ splitAtomicImplementation = splitAtomicImplementation_;
70
+ requiredSplitAddress = requiredSplitAddress_;
71
+ requiredSplitBasisPoints = requiredSplitBasisPoints_;
72
+ deployer = msg.sender;
73
+ // emit event
74
+ emit Deployed({
75
+ implementation: splitAtomicImplementation_,
76
+ type_: type_,
77
+ requiredSplitAddress: requiredSplitAddress_,
78
+ requiredSplitBasisPoints: requiredSplitBasisPoints_
79
+ });
80
+ }
81
+
82
+ /**
83
+ * @notice Creates a new split atomic contract with the provided `splits`.
84
+ * @param splits Splits to configure the contract with. Must add up to
85
+ * 10_000 BPS, and the first split must be the required split; reverts
86
+ * otherwise.
87
+ * @return splitAtomic The address of the newly created split atomic
88
+ * contract. The address is also emitted in the `SplitAtomicCreated` event.
89
+ */
90
+ function createSplit(
91
+ Split[] calldata splits
92
+ ) external returns (address splitAtomic) {
93
+ require(!isAbandoned, "factory is abandoned");
94
+ // validate first split is initial split
95
+ require(
96
+ splits[0].recipient == requiredSplitAddress &&
97
+ splits[0].basisPoints == requiredSplitBasisPoints,
98
+ "splits[0] must be required split"
99
+ );
100
+ // Create the EIP 1167 split atomic contract
101
+ splitAtomic = Clones.clone({implementation: splitAtomicImplementation});
102
+ // initialize the new split atomic contract
103
+ ISplitAtomicV0(splitAtomic).initialize(splits);
104
+ // emit event
105
+ emit SplitAtomicCreated(splitAtomic);
106
+ }
107
+
108
+ /**
109
+ * @notice Abandons the contract, preventing it from being used to create
110
+ * new split atomic contracts.
111
+ * Only callable by the deployer, and only once; reverts otherwise.
112
+ */
113
+ function abandon() external {
114
+ require(!isAbandoned, "factory is abandoned");
115
+ require(msg.sender == deployer, "only deployer may abandon");
116
+ // set isAbandoned to true
117
+ isAbandoned = true;
118
+ // emit event
119
+ emit Abandoned();
120
+ }
121
+ }