@artblocks/contracts 1.0.3 → 1.1.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 (383) hide show
  1. package/README.md +32 -25
  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 +212 -17
  5. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +6 -6
  6. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV0.sol/MinterDAExpV0.json +2 -2
  7. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV1.sol/MinterDAExpV1.json +2 -2
  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/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  11. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  12. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV0.sol/MinterDALinV0.json +2 -2
  13. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV1.sol/MinterDALinV1.json +2 -2
  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/archive/minter-suite/Minters/MinterHolder/MinterHolderV0.sol/MinterHolderV0.json +2 -2
  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/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV0.sol/MinterMerkleV0.json +2 -2
  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/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV0.sol/MinterSetPriceV0.json +2 -2
  26. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV1.sol/MinterSetPriceV1.json +2 -2
  27. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  28. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  29. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol/MinterSetPriceERC20V0.json +2 -2
  30. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol/MinterSetPriceERC20V1.json +2 -2
  31. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  32. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  33. package/artifacts/contracts/engine/V2/GenArt721CoreV2_ENGINE_FLEX.sol/GenArt721CoreV2_ENGINE_FLEX.json +2 -2
  34. package/artifacts/contracts/engine/V2/GenArt721CoreV2_PBAB.sol/GenArt721CoreV2_PBAB.json +2 -2
  35. package/artifacts/contracts/engine/V2/GenArt721CoreV2_PRTNR.sol/GenArt721CoreV2_PRTNR.json +2 -2
  36. package/artifacts/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol/GenArt721MinterBurner_PBAB.json +2 -2
  37. package/artifacts/contracts/engine/V2/GenArt721MinterDAExp_PBAB.sol/GenArt721MinterDAExp_PBAB.json +2 -2
  38. package/artifacts/contracts/engine/V2/GenArt721Minter_PBAB.sol/GenArt721Minter_PBAB.json +2 -2
  39. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +6 -11
  40. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +6 -11
  41. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +6 -11
  42. package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +2 -2
  43. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +6 -11
  44. package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +12 -12
  45. package/artifacts/contracts/engine-registry/EngineRegistryV0.sol/EngineRegistryV0.json +2 -2
  46. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +6 -6
  47. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IBonusContract.sol/IBonusContract.json +1 -1
  48. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreContractV1.sol/IGenArt721CoreContractV1.json +1 -1
  49. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreV2_PBAB.sol/IGenArt721CoreV2_PBAB.json +1 -1
  50. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IRandomizer.sol/IRandomizer.json +1 -1
  51. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IAdminACLV0.sol/IAdminACLV0.json +1 -1
  52. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IArtblocksRoyaltyOverride.sol/IArtblocksRoyaltyOverride.json +1 -1
  53. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IBonusContract.sol/IBonusContract.json +1 -1
  54. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IBytecodeStorageReader.sol/IBytecodeStorageReader.json +1 -1
  55. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/ICoreRegistryV1.sol/ICoreRegistryV1.json +7 -7
  56. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IDelegationRegistry.sol/IDelegationRegistry.json +1 -1
  57. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryCompatibleV0.sol/IDependencyRegistryCompatibleV0.json +1 -1
  58. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +22 -3
  59. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IEngineRegistryV0.sol/IEngineRegistryV0.json +1 -1
  60. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV0.sol/IFilteredMinterDAExpSettlementV0.json +1 -1
  61. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV1.sol/IFilteredMinterDAExpSettlementV1.json +1 -1
  62. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlement_Mixin.sol/IFilteredMinterDAExpSettlement_Mixin.json +1 -1
  63. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV0.sol/IFilteredMinterDAExpV0.json +1 -1
  64. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV1.sol/IFilteredMinterDAExpV1.json +1 -1
  65. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV0.sol/IFilteredMinterDALinV0.json +1 -1
  66. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV1.sol/IFilteredMinterDALinV1.json +1 -1
  67. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV0.sol/IFilteredMinterHolderV0.json +1 -1
  68. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV1.sol/IFilteredMinterHolderV1.json +1 -1
  69. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV2.sol/IFilteredMinterHolderV2.json +1 -1
  70. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV0.sol/IFilteredMinterMerkleV0.json +1 -1
  71. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV1.sol/IFilteredMinterMerkleV1.json +1 -1
  72. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV2.sol/IFilteredMinterMerkleV2.json +1 -1
  73. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterSEAV0.sol/IFilteredMinterSEAV0.json +1 -1
  74. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV0.sol/IFilteredMinterV0.json +1 -1
  75. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV1.sol/IFilteredMinterV1.json +1 -1
  76. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV2.sol/IFilteredMinterV2.json +1 -1
  77. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractExposesHashSeed.sol/IGenArt721CoreContractExposesHashSeed.json +1 -1
  78. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV1.sol/IGenArt721CoreContractV1.json +1 -1
  79. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +1 -1
  80. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol/IGenArt721CoreContractV3WithSharedRandomizer.json +24 -0
  81. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +1 -1
  82. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +1 -1
  83. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +1 -1
  84. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreV2_PBAB.sol/IGenArt721CoreV2_PBAB.json +1 -1
  85. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IManifold.sol/IManifold.json +1 -1
  86. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMinterBaseV0.sol/IMinterBaseV0.json +1 -1
  87. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV0.sol/IMinterFilterV0.json +1 -1
  88. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV1.sol/IMinterFilterV1.json +104 -19
  89. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPICoreV0.sol/IMintingAPICoreV0.json +1 -1
  90. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPIMinterV0.sol/IMintingAPIMinterV0.json +1 -1
  91. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IPseudorandomAtomic.sol/IPseudorandomAtomic.json +1 -1
  92. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizer.sol/IRandomizer.json +1 -1
  93. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerPolyptychV0.sol/IRandomizerPolyptychV0.json +1 -1
  94. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerV2.sol/IRandomizerV2.json +1 -1
  95. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizer_V3CoreBase.sol/IRandomizer_V3CoreBase.json +1 -1
  96. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol/ISharedMinterDAExpSettlementV0.json +114 -0
  97. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol/ISharedMinterDAExpV0.json +37 -0
  98. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol/ISharedMinterDALinV0.json +37 -0
  99. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol/ISharedMinterDAV0.json +50 -0
  100. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol/ISharedMinterHolderERC20V0.json +158 -0
  101. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol/ISharedMinterHolderV0.json +128 -0
  102. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol/ISharedMinterMerkleV0.json +97 -0
  103. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol/ISharedMinterSEAV0.json +29 -0
  104. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol/ISharedMinterSimplePurchaseV0.json +64 -0
  105. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterV0.sol/ISharedMinterV0.json +117 -0
  106. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/ISharedRandomizerV0.sol/ISharedRandomizerV0.json +52 -36
  107. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IWETH.sol/IWETH.json +1 -1
  108. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Address.json +2 -2
  109. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Counters.json +2 -2
  110. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/CustomERC721Metadata.json +2 -2
  111. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/ERC721.json +2 -2
  112. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/ERC721Enumerable.json +2 -2
  113. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/GenArt721CoreV1.json +2 -2
  114. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/SafeMath.json +2 -2
  115. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Strings.json +2 -2
  116. package/artifacts/contracts/legacy/GenArt721LegacyMinter.sol/GenArt721LegacyMinter.json +2 -2
  117. package/artifacts/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol/DelegationRegistry.json +2 -2
  118. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/CustomERC721Metadata.sol/CustomERC721Metadata.json +3 -3
  119. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/IERC20.sol/IERC20.json +1 -1
  120. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/SafeMath.sol/SafeMath.json +3 -3
  121. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/Strings.sol/Strings.json +3 -3
  122. package/artifacts/contracts/libs/v0.8.x/ABHelpers.sol/ABHelpers.json +10 -0
  123. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +10 -0
  124. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV0.sol/BytecodeStorage.json +3 -3
  125. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV1.sol/BytecodeStorageReader.json +3 -3
  126. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV1.sol/BytecodeStorageWriter.json +3 -3
  127. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/Bytes32Strings.sol/Bytes32Strings.json +3 -3
  128. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +3 -3
  129. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/SSTORE2.sol/SSTORE2.json +3 -3
  130. package/artifacts/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol/DAExpLib.json +67 -0
  131. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALib.sol/DALib.json +30 -0
  132. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +67 -0
  133. package/artifacts/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol/GenericMinterEventsLib.json +346 -0
  134. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +36 -0
  135. package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +37 -0
  136. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +10 -0
  137. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +261 -0
  138. package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +55 -0
  139. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +48 -0
  140. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +42 -0
  141. package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +86 -0
  142. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV0.sol/MinterFilterV0.json +2 -2
  143. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  144. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +96 -40
  145. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +662 -0
  146. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -20
  147. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +619 -0
  148. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV4.sol/MinterDAExpV4.json +2 -2
  149. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +418 -0
  150. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +662 -0
  151. package/artifacts/contracts/minter-suite/Minters/MinterDALinV4.sol/MinterDALinV4.json +2 -2
  152. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +418 -0
  153. package/artifacts/contracts/minter-suite/Minters/MinterHolderV4.sol/MinterHolderV4.json +2 -2
  154. package/artifacts/contracts/minter-suite/Minters/MinterMerkleV5.sol/MinterMerkleV5.json +2 -2
  155. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
  156. package/artifacts/contracts/minter-suite/Minters/MinterSEAV0.sol/MinterSEAV0.json +2 -2
  157. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +659 -0
  158. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
  159. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +452 -0
  160. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +600 -0
  161. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +633 -0
  162. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +782 -0
  163. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +676 -0
  164. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV4.sol/MinterSetPriceV4.json +2 -2
  165. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +356 -0
  166. package/artifacts/contracts/mock/BytecodeV0TextCR_DMock.sol/BytecodeV0TextCR_DMock.json +2 -2
  167. package/artifacts/contracts/mock/BytecodeV1LibCallsMock.sol/BytecodeV1LibCallsMock.json +2 -2
  168. package/artifacts/contracts/mock/BytecodeV1TextCR_DMock.sol/BytecodeV1TextCR_DMock.json +4 -4
  169. package/artifacts/contracts/mock/DeadReceiverBidderMock.sol/DeadReceiverBidderMock.json +25 -2
  170. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
  171. package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +28 -2
  172. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +6 -11
  173. package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +2 -2
  174. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +2 -2
  175. package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +2 -2
  176. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  177. package/artifacts/contracts/mock/ReentrancyHolderMock.sol/ReentrancyHolderMock.json +2 -2
  178. package/artifacts/contracts/mock/ReentrancyHolderMockShared.sol/ReentrancyHolderMockShared.json +136 -0
  179. package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
  180. package/artifacts/contracts/mock/ReentrancyMerkleMockShared.sol/ReentrancyMerkleMockShared.json +105 -0
  181. package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
  182. package/artifacts/contracts/mock/ReentrancyMockShared.sol/ReentrancyMockShared.json +100 -0
  183. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +2 -2
  184. package/artifacts/contracts/mock/ReentrancySEAMockShared.sol/ReentrancySEAAutoBidderMockShared.json +69 -0
  185. package/artifacts/contracts/mock/SSTORE2Mock.sol/SSTORE2Mock.json +2 -2
  186. package/artifacts/contracts/randomizer/deprecated/BasicRandomizer.sol/BasicRandomizer.json +2 -2
  187. package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +2 -2
  188. package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +2 -2
  189. package/artifacts/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol/PseudorandomAtomic.json +2 -2
  190. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +58 -42
  191. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +2 -2
  192. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol/GenArt721RoyaltyOverride_PBAB.json +2 -2
  193. package/contracts/AdminACLV0.sol +1 -1
  194. package/contracts/AdminACLV1.sol +1 -1
  195. package/contracts/DependencyRegistryV0.sol +300 -123
  196. package/contracts/GenArt721CoreV3.sol +27 -12
  197. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV0.sol +3 -3
  198. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV1.sol +3 -3
  199. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol +3 -3
  200. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol +3 -3
  201. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +3 -3
  202. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol +3 -3
  203. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV0.sol +3 -3
  204. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV1.sol +3 -3
  205. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol +3 -3
  206. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol +3 -3
  207. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV0.sol +3 -3
  208. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol +3 -3
  209. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol +4 -4
  210. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol +4 -4
  211. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV0.sol +3 -3
  212. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol +3 -3
  213. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol +4 -4
  214. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol +4 -4
  215. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol +4 -4
  216. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV0.sol +3 -3
  217. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV1.sol +3 -3
  218. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol +3 -3
  219. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol +3 -3
  220. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol +3 -3
  221. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol +3 -3
  222. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol +3 -3
  223. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol +3 -3
  224. package/contracts/archive/readme.md +16 -0
  225. package/contracts/engine/README.md +21 -0
  226. package/contracts/engine/V2/GenArt721CoreV2_ENGINE_FLEX.sol +2 -2
  227. package/contracts/engine/V2/GenArt721CoreV2_PBAB.sol +2 -2
  228. package/contracts/engine/V2/GenArt721CoreV2_PRTNR.sol +3 -3
  229. package/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol +2 -2
  230. package/contracts/engine/V2/GenArt721MinterDAExp_PBAB.sol +1 -1
  231. package/contracts/engine/V2/GenArt721Minter_PBAB.sol +2 -2
  232. package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +31 -22
  233. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +31 -22
  234. package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +12 -18
  235. package/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol +1 -1
  236. package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +23 -24
  237. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IAdminACLV0_PROHIBITION.sol +1 -1
  238. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +1 -1
  239. package/contracts/engine-registry/CoreRegistryV1.sol +58 -65
  240. package/contracts/engine-registry/EngineRegistryV0.sol +1 -1
  241. package/contracts/explorations/GenArt721CoreV3_Explorations.sol +27 -12
  242. package/contracts/interfaces/{0.8.x → v0.8.x}/ICoreRegistryV1.sol +6 -8
  243. package/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryV0.sol +5 -2
  244. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol +23 -0
  245. package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV1.sol +45 -19
  246. package/contracts/interfaces/v0.8.x/IRandomizer_V3CoreBase.sol +23 -0
  247. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +28 -0
  248. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol +12 -0
  249. package/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol +12 -0
  250. package/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol +13 -0
  251. package/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol +47 -0
  252. package/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol +41 -0
  253. package/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol +34 -0
  254. package/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol +15 -0
  255. package/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol +28 -0
  256. package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +43 -0
  257. package/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol +123 -0
  258. package/contracts/legacy/GenArt721CoreV1.sol +2 -2
  259. package/contracts/legacy/GenArt721LegacyMinter.sol +5 -5
  260. package/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol +1 -1
  261. package/contracts/libs/v0.8.x/ABHelpers.sol +55 -0
  262. package/contracts/libs/v0.8.x/AuthLib.sol +196 -0
  263. package/contracts/libs/{0.8.x → v0.8.x}/Bytes32Strings.sol +5 -5
  264. package/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol +250 -0
  265. package/contracts/libs/v0.8.x/minter-libs/DALib.sol +26 -0
  266. package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +216 -0
  267. package/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol +171 -0
  268. package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +488 -0
  269. package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +384 -0
  270. package/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol +240 -0
  271. package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +995 -0
  272. package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +166 -0
  273. package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +770 -0
  274. package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +741 -0
  275. package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +291 -0
  276. package/contracts/minter-suite/MinterFilter/MinterFilterV0.sol +3 -3
  277. package/contracts/minter-suite/MinterFilter/MinterFilterV1.sol +5 -5
  278. package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +414 -297
  279. package/contracts/minter-suite/Minters/MinterBase_v0_1_1.sol +4 -4
  280. package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +866 -0
  281. package/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol +4 -57
  282. package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +886 -0
  283. package/contracts/minter-suite/Minters/MinterDAExpV4.sol +3 -3
  284. package/contracts/minter-suite/Minters/MinterDAExpV5.sol +545 -0
  285. package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +857 -0
  286. package/contracts/minter-suite/Minters/MinterDALinV4.sol +3 -3
  287. package/contracts/minter-suite/Minters/MinterDALinV5.sol +534 -0
  288. package/contracts/minter-suite/Minters/MinterHolderV4.sol +4 -4
  289. package/contracts/minter-suite/Minters/MinterMerkleV5.sol +4 -4
  290. package/contracts/minter-suite/Minters/MinterPolyptychV0.sol +6 -6
  291. package/contracts/minter-suite/Minters/MinterSEAV0.sol +3 -3
  292. package/contracts/minter-suite/Minters/MinterSEAV1.sol +853 -0
  293. package/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol +5 -5
  294. package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +545 -0
  295. package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +730 -0
  296. package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +714 -0
  297. package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +1012 -0
  298. package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +868 -0
  299. package/contracts/minter-suite/Minters/MinterSetPriceV4.sol +3 -3
  300. package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +414 -0
  301. package/contracts/mock/BytecodeV0TextCR_DMock.sol +1 -1
  302. package/contracts/mock/BytecodeV1LibCallsMock.sol +1 -1
  303. package/contracts/mock/BytecodeV1TextCR_DMock.sol +1 -1
  304. package/contracts/mock/DeadReceiverBidderMock.sol +15 -0
  305. package/contracts/mock/DummySharedMinter.sol +2 -2
  306. package/contracts/mock/ERC20Mock.sol +16 -0
  307. package/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol +11 -18
  308. package/contracts/mock/MockAdminACLV0.sol +1 -1
  309. package/contracts/mock/MockAdminACLV0_PROHIBITION.sol +1 -1
  310. package/contracts/mock/OriginRegisterMock.sol +1 -1
  311. package/contracts/mock/ReentrancyHolderMock.sol +1 -1
  312. package/contracts/mock/ReentrancyHolderMockShared.sol +59 -0
  313. package/contracts/mock/ReentrancyMerkleMock.sol +1 -1
  314. package/contracts/mock/ReentrancyMerkleMockShared.sol +58 -0
  315. package/contracts/mock/ReentrancyMock.sol +1 -1
  316. package/contracts/mock/ReentrancyMockShared.sol +48 -0
  317. package/contracts/mock/ReentrancySEAMock.sol +1 -1
  318. package/contracts/mock/ReentrancySEAMockShared.sol +40 -0
  319. package/contracts/mock/SSTORE2Mock.sol +1 -1
  320. package/contracts/randomizer/deprecated/BasicRandomizer.sol +1 -1
  321. package/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol +2 -2
  322. package/contracts/randomizer/deprecated/RandomizerV2.sol +2 -2
  323. package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +1 -1
  324. package/contracts/randomizer/shared/SharedRandomizerV0.sol +134 -111
  325. package/contracts/royalty-registry/GenArt721RoyaltyOverride.sol +2 -2
  326. package/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol +2 -2
  327. package/package.json +57 -36
  328. package/LICENSE +0 -165
  329. package/contracts/interfaces/0.8.x/IRandomizer_V3CoreBase.sol +0 -10
  330. package/contracts/interfaces/0.8.x/ISharedRandomizerV0.sol +0 -105
  331. /package/contracts/interfaces/{0.5.x → v0.5.x}/IBonusContract.sol +0 -0
  332. /package/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreContractV1.sol +0 -0
  333. /package/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreV2_PBAB.sol +0 -0
  334. /package/contracts/interfaces/{0.5.x → v0.5.x}/IRandomizer.sol +0 -0
  335. /package/contracts/interfaces/{0.8.x → v0.8.x}/IAdminACLV0.sol +0 -0
  336. /package/contracts/interfaces/{0.8.x → v0.8.x}/IArtblocksRoyaltyOverride.sol +0 -0
  337. /package/contracts/interfaces/{0.8.x → v0.8.x}/IBonusContract.sol +0 -0
  338. /package/contracts/interfaces/{0.8.x → v0.8.x}/IBytecodeStorageReader.sol +0 -0
  339. /package/contracts/interfaces/{0.8.x → v0.8.x}/IDelegationRegistry.sol +0 -0
  340. /package/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryCompatibleV0.sol +0 -0
  341. /package/contracts/interfaces/{0.8.x → v0.8.x}/IEngineRegistryV0.sol +0 -0
  342. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV0.sol +0 -0
  343. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV1.sol +0 -0
  344. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlement_Mixin.sol +0 -0
  345. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV0.sol +0 -0
  346. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV1.sol +0 -0
  347. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV0.sol +0 -0
  348. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV1.sol +0 -0
  349. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV0.sol +0 -0
  350. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV1.sol +0 -0
  351. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV2.sol +0 -0
  352. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV0.sol +0 -0
  353. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV1.sol +0 -0
  354. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV2.sol +0 -0
  355. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterSEAV0.sol +0 -0
  356. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV0.sol +0 -0
  357. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV1.sol +0 -0
  358. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV2.sol +0 -0
  359. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractExposesHashSeed.sol +0 -0
  360. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV1.sol +0 -0
  361. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3.sol +0 -0
  362. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Base.sol +0 -0
  363. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine.sol +0 -0
  364. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine_Flex.sol +0 -0
  365. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreV2_PBAB.sol +0 -0
  366. /package/contracts/interfaces/{0.8.x → v0.8.x}/IManifold.sol +0 -0
  367. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterBaseV0.sol +0 -0
  368. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV0.sol +0 -0
  369. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPICoreV0.sol +0 -0
  370. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPIMinterV0.sol +0 -0
  371. /package/contracts/interfaces/{0.8.x → v0.8.x}/IPseudorandomAtomic.sol +0 -0
  372. /package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizer.sol +0 -0
  373. /package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerPolyptychV0.sol +0 -0
  374. /package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerV2.sol +0 -0
  375. /package/contracts/interfaces/{0.8.x → v0.8.x}/IWETH.sol +0 -0
  376. /package/contracts/libs/{0.5.x → v0.5.x}/CustomERC721Metadata.sol +0 -0
  377. /package/contracts/libs/{0.5.x → v0.5.x}/IERC20.sol +0 -0
  378. /package/contracts/libs/{0.5.x → v0.5.x}/SafeMath.sol +0 -0
  379. /package/contracts/libs/{0.5.x → v0.5.x}/Strings.sol +0 -0
  380. /package/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV0.sol +0 -0
  381. /package/contracts/libs/{0.8.x → v0.8.x}/BytecodeStorageV1.sol +0 -0
  382. /package/contracts/libs/{0.8.x → v0.8.x}/ERC721_PackedHashSeed.sol +0 -0
  383. /package/contracts/libs/{0.8.x → v0.8.x}/SSTORE2.sol +0 -0
@@ -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
+ }
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: LGPL-3.0-only
2
2
  // Created By: Art Blocks Inc.
3
3
 
4
- import "../interfaces/0.8.x/IFilteredMinterV0.sol";
4
+ import "../interfaces/v0.8.x/IFilteredMinterV0.sol";
5
5
 
6
6
  pragma solidity ^0.8.0;
7
7
 
@@ -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
+ }
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: LGPL-3.0-only
2
2
  // Created By: Art Blocks Inc.
3
3
 
4
- import "../interfaces/0.8.x/IFilteredMinterSEAV0.sol";
4
+ import "../interfaces/v0.8.x/IFilteredMinterSEAV0.sol";
5
5
 
6
6
  pragma solidity ^0.8.0;
7
7
 
@@ -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
+ }
@@ -3,7 +3,7 @@ pragma solidity 0.8.19;
3
3
 
4
4
  // Created By: Art Blocks Inc.
5
5
 
6
- import "../libs/0.8.x/SSTORE2.sol";
6
+ import "../libs/v0.8.x/SSTORE2.sol";
7
7
 
8
8
  /**
9
9
  * @title Art Blocks SSTORE2Mock.
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: LGPL-3.0-only
2
2
  // Creatd By: Art Blocks Inc.
3
3
 
4
- import "../../interfaces/0.8.x/IRandomizer.sol";
4
+ import "../../interfaces/v0.8.x/IRandomizer.sol";
5
5
 
6
6
  pragma solidity 0.8.9;
7
7
 
@@ -3,8 +3,8 @@
3
3
 
4
4
  pragma solidity 0.8.19;
5
5
 
6
- import "../../interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol";
7
- import "../../interfaces/0.8.x/IRandomizerPolyptychV0.sol";
6
+ import "../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
7
+ import "../../interfaces/v0.8.x/IRandomizerPolyptychV0.sol";
8
8
  import "./BasicRandomizerBase_v0_0_0.sol";
9
9
 
10
10
  import "@openzeppelin-4.7/contracts/access/Ownable.sol";
@@ -3,8 +3,8 @@
3
3
 
4
4
  pragma solidity 0.8.19;
5
5
 
6
- import "../../interfaces/0.8.x/IRandomizerV2.sol";
7
- import "../../interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol";
6
+ import "../../interfaces/v0.8.x/IRandomizerV2.sol";
7
+ import "../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
8
8
  import "./BasicRandomizerBase_v0_0_0.sol";
9
9
 
10
10
  import "@openzeppelin-4.7/contracts/access/Ownable.sol";
@@ -3,7 +3,7 @@
3
3
 
4
4
  pragma solidity 0.8.19;
5
5
 
6
- import "../../interfaces/0.8.x/IPseudorandomAtomic.sol";
6
+ import "../../interfaces/v0.8.x/IPseudorandomAtomic.sol";
7
7
 
8
8
  /**
9
9
  * @title PseudorandomAtomic
@@ -1,11 +1,13 @@
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
- import "../../interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol";
7
- import "../../interfaces/0.8.x/ISharedRandomizerV0.sol";
8
- import "../../interfaces/0.8.x/IPseudorandomAtomic.sol";
8
+ import "../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
9
+ import "../../interfaces/v0.8.x/ISharedRandomizerV0.sol";
10
+ import "../../interfaces/v0.8.x/IPseudorandomAtomic.sol";
9
11
 
10
12
  /**
11
13
  * @title A shared randomizer contract that enables support of many Art Blocks
@@ -16,36 +18,35 @@ import "../../interfaces/0.8.x/IPseudorandomAtomic.sol";
16
18
  * `assignTokenHash` function, as long as the call does not revert.
17
19
  *
18
20
  * The randomizer generates a token's hash seed in one of two ways:
19
- * 1. If the project of the token is specified as a polyptych, the randomizer
20
- * will assign the token the hash seed as previously set by the project's hash
21
- * seed setter contract. If no hash seed has been set, the randomizer will
22
- * revert.
23
- * 2. If the project of the token is not specified as a polyptych, the
24
- * randomizer will generate a new hash seed using the `IPseudorandomAtomic`
25
- * contract, which is immutable and set during deployment.
21
+ * 1. If the project of the token is specified as using a hash seed setter
22
+ * contract, the randomizer will assign the token the hash seed as previously
23
+ * pre-set by the project's hash seed setter contract. If no hash seed has
24
+ * been set, the randomizer will revert (will not assign null token hash).
25
+ * 2. If the project of the token is not specified as using a hash seed setter
26
+ * contract, the randomizer will generate a new hash seed using the
27
+ * `IPseudorandomAtomic` contract, which is immutable and set during
28
+ * deployment.
26
29
  *
27
- * When using this randomizer for ployptych minting, several requirements may
28
- * be required by the hash seed setter contract, including the possibility
30
+ * @dev When using this randomizer for ployptych minting, several requirements
31
+ * may be required by the hash seed setter contract, including the possibility
29
32
  * that a token's hash seed must be available in a public getter function on
30
33
  * the core contract. Please inspect the hash seed setter contract to ensure
31
34
  * that all requirements are met.
32
35
  *
33
36
  * @notice Privileged Roles and Ownership:
34
- * Privileged roles and abilities are controlled by each core contract's admin
35
- * ACL contract and artists. Both of these roles hold extensive power and can
36
- * influence the behavior of this randomizer.
37
- * Care must be taken to ensure that the admin ACL contract and artist
38
- * addresses are secure behind a multi-sig or other access control mechanism.
39
- * ----------------------------------------------------------------------------
40
- * The following function is restricted to each core's Admin ACL contract:
41
- * - setHashSeedSetterContract
37
+ * Privileged roles and abilities are controlled by each core contract's
38
+ * artists.
39
+ * These roles hold extensive power and can influence the behavior of this
40
+ * randomizer.
41
+ * Care must be taken to ensure that the artist addresses are secure.
42
42
  * ----------------------------------------------------------------------------
43
43
  * The following functions are restricted to only the Artist address:
44
- * - toggleProjectIsPolyptych
44
+ * - setHashSeedSetterContract
45
+ * - toggleProjectUseAssignedHashSeed
45
46
  * ----------------------------------------------------------------------------
46
47
  * The following function is restricted to only the hash seed setter contract
47
48
  * of a given core contract:
48
- * - setPolyptychHashSeed
49
+ * - preSetHashSeed
49
50
  * ----------------------------------------------------------------------------
50
51
  * Additional admin and artist privileged roles may be described on minters,
51
52
  * registries, and other contracts that may interact with this randomizer.
@@ -56,66 +57,63 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
56
57
  // constant used to obtain the project ID from the token ID
57
58
  uint256 internal constant ONE_MILLION = 1_000_000;
58
59
 
59
- // mapping of core contract => token ID => hash seed
60
- mapping(address => mapping(uint256 => bytes12)) private _polyptychHashSeed;
60
+ // mapping of core contract => token ID => pre-assigned hash seed
61
+ // @dev this mapping is only used when the project is configured as using
62
+ // a hash seed setter contract. It is not populated when the project is
63
+ // using pseudorandomAtomicContract.
64
+ mapping(address coreContract => mapping(uint256 tokenId => bytes12 preAssignedHashSeed))
65
+ private _preAssignedHashSeeds;
61
66
 
62
- // mapping of core contract => project ID => is polyptych
63
- mapping(address => mapping(uint256 => bool)) private _projectIsPolyptych;
67
+ // mapping of core contract => project ID => usesHashSeedSetter Contract
68
+ mapping(address coreContract => mapping(uint256 projectId => bool usesHashSeedSetter))
69
+ private _projectUsesHashSeedSetter;
64
70
 
65
- // mapping of core contract => hash seed setter contract
66
- mapping(address => address) private _hashSeedSetterContracts;
67
-
68
- // modifier to restrict access to only AdminACL allowed calls
69
- // @dev defers to ACL contract being used to the core contract
70
- function _onlyCoreAdminACL(
71
- address _coreContract,
72
- bytes4 _selector
73
- ) internal {
74
- require(
75
- IGenArt721CoreContractV3_Base(_coreContract).adminACLAllowed(
76
- msg.sender,
77
- address(this),
78
- _selector
79
- ),
80
- "Only Core AdminACL allowed"
81
- );
82
- }
71
+ // mapping of core contract => projectId => hash seed setter contract
72
+ mapping(address coreContract => mapping(uint256 projectId => address hashSeedSetterContract))
73
+ private _hashSeedSetterContracts;
83
74
 
84
75
  // modifier to restrict access to only Artist allowed calls
85
76
  function _onlyArtist(
86
- address _coreContract,
87
- uint256 _projectId
77
+ address coreContract,
78
+ uint256 projectId
88
79
  ) internal view {
89
80
  require(
90
81
  msg.sender ==
91
- IGenArt721CoreContractV3_Base(_coreContract)
92
- .projectIdToArtistAddress(_projectId),
82
+ IGenArt721CoreContractV3_Base(coreContract)
83
+ .projectIdToArtistAddress(projectId),
93
84
  "Only Artist"
94
85
  );
95
86
  }
96
87
 
97
- // modifier to restrict access to only calls by the hash seed setter
98
- // contract of a given core contract
99
- function _onlyHashSeedSetterContract(address _coreContract) internal view {
88
+ /**
89
+ * Modifier to restrict access to only calls by the hash seed setter
90
+ * contract of a given project.
91
+ * @param coreContract core contract address associated with the project
92
+ * @param projectId project ID being set
93
+ */
94
+ function _onlyHashSeedSetterContract(
95
+ address coreContract,
96
+ uint256 projectId
97
+ ) internal view {
100
98
  require(
101
- msg.sender == _hashSeedSetterContracts[_coreContract],
99
+ msg.sender == _hashSeedSetterContracts[coreContract][projectId],
102
100
  "Only Hash Seed Setter Contract"
103
101
  );
104
102
  }
105
103
 
106
104
  /**
107
105
  *
108
- * @param _pseudorandomAtomicContract Address of the pseudorandom atomic
106
+ * @param pseudorandomAtomicContract_ Address of the pseudorandom atomic
109
107
  * contract to use for atomically generating random values. This contract
110
108
  * does not have an owner, and therefore the pseudorandom atomic contract
111
109
  * address cannot be changed after deployment.
112
110
  */
113
- constructor(address _pseudorandomAtomicContract) {
111
+ constructor(address pseudorandomAtomicContract_) {
114
112
  pseudorandomAtomicContract = IPseudorandomAtomic(
115
- _pseudorandomAtomicContract
113
+ pseudorandomAtomicContract_
116
114
  );
117
115
  emit PseudorandomAtomicContractUpdated({
118
- pseudorandomAtomicContract: _pseudorandomAtomicContract
116
+ pseudorandomAtomicContract: pseudorandomAtomicContract_
119
117
  });
120
118
  }
121
119
 
@@ -123,48 +121,55 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
123
121
  * @inheritdoc ISharedRandomizerV0
124
122
  */
125
123
  function setHashSeedSetterContract(
126
- address _coreContract,
127
- address _hashSeedSetterContract
124
+ address coreContract,
125
+ uint256 projectId,
126
+ address hashSeedSetterContract
128
127
  ) external {
129
- _onlyCoreAdminACL(
130
- _coreContract,
131
- this.setHashSeedSetterContract.selector
132
- );
133
- _hashSeedSetterContracts[_coreContract] = _hashSeedSetterContract;
134
- emit HashSeedSetterForCoreUpdated({
135
- coreContract: _coreContract,
136
- hashSeedSetterContract: _hashSeedSetterContract
128
+ _onlyArtist({projectId: projectId, coreContract: coreContract});
129
+ _hashSeedSetterContracts[coreContract][
130
+ projectId
131
+ ] = hashSeedSetterContract;
132
+ emit HashSeedSetterForProjectUpdated({
133
+ coreContract: coreContract,
134
+ projectId: projectId,
135
+ hashSeedSetterContract: hashSeedSetterContract
137
136
  });
138
137
  }
139
138
 
140
139
  /**
141
140
  * @inheritdoc ISharedRandomizerV0
142
141
  */
143
- function toggleProjectIsPolyptych(
144
- address _coreContract,
145
- uint256 _projectId
142
+ function toggleProjectUseAssignedHashSeed(
143
+ address coreContract,
144
+ uint256 projectId
146
145
  ) external {
147
- _onlyArtist(_coreContract, _projectId);
148
- _projectIsPolyptych[_coreContract][_projectId] = !_projectIsPolyptych[
149
- _coreContract
150
- ][_projectId];
151
- emit ProjectIsPolyptychUpdated({
152
- coreContract: _coreContract,
153
- projectId: _projectId,
154
- isPolyptych: _projectIsPolyptych[_coreContract][_projectId]
146
+ _onlyArtist({projectId: projectId, coreContract: coreContract});
147
+ _projectUsesHashSeedSetter[coreContract][
148
+ projectId
149
+ ] = !_projectUsesHashSeedSetter[coreContract][projectId];
150
+ emit ProjectUsingHashSeedSetterUpdated({
151
+ coreContract: coreContract,
152
+ projectId: projectId,
153
+ usingHashSeedSetter: _projectUsesHashSeedSetter[coreContract][
154
+ projectId
155
+ ]
155
156
  });
156
157
  }
157
158
 
158
159
  /**
159
160
  * @inheritdoc ISharedRandomizerV0
160
161
  */
161
- function setPolyptychHashSeed(
162
- address _coreContract,
163
- uint256 _tokenId,
164
- bytes12 _hashSeed
162
+ function preSetHashSeed(
163
+ address coreContract,
164
+ uint256 tokenId,
165
+ bytes12 hashSeed
165
166
  ) external {
166
- _onlyHashSeedSetterContract(_coreContract);
167
- _polyptychHashSeed[_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,71 +180,89 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
175
180
  /**
176
181
  * @inheritdoc IRandomizer_V3CoreBase
177
182
  */
178
- function assignTokenHash(uint256 _tokenId) external {
179
- // @dev this function is callable by any core contract, and does not
180
- // does not require any gating.
181
- // @dev naming variables for readability
183
+ function assignTokenHash(uint256 tokenId) external {
184
+ // @dev This function is not specifically gated to any specific caller,
185
+ // but will only call back to the calling contract, `msg.sender`, to
186
+ // set the specified token's hash seed.
187
+ // A third party contract calling this function will not be able to set
188
+ // the token hash seed on a different core contract.
189
+ // @dev variables are named to improve readability
182
190
  address coreContract = msg.sender;
183
- uint256 projectId = _tokenId / ONE_MILLION;
191
+ uint256 projectId = _tokenIdToProjectId(tokenId);
184
192
  bytes32 hashSeed;
185
- if (_projectIsPolyptych[coreContract][projectId]) {
186
- hashSeed = _polyptychHashSeed[coreContract][_tokenId];
193
+ if (_projectUsesHashSeedSetter[coreContract][projectId]) {
194
+ hashSeed = _preAssignedHashSeeds[coreContract][tokenId];
187
195
  } else {
188
- hashSeed = _getPseudorandomAtomic(coreContract, _tokenId);
196
+ hashSeed = _getPseudorandomAtomic({
197
+ coreContract: coreContract,
198
+ tokenId: tokenId
199
+ });
189
200
  }
190
201
  // verify that the hash seed is non-zero
191
202
  require(hashSeed != 0, "Only non-zero hash seed");
192
203
  // assign the token hash seed on the core contract
193
- IGenArt721CoreContractV3_Base(coreContract).setTokenHash_8PT(
194
- _tokenId,
195
- hashSeed
196
- );
204
+ IGenArt721CoreContractV3_Base(coreContract).setTokenHash_8PT({
205
+ _tokenId: tokenId,
206
+ _hash: hashSeed
207
+ });
197
208
  }
198
209
 
199
210
  /**
200
211
  * @inheritdoc ISharedRandomizerV0
201
212
  */
202
- function projectIsPolyptych(
203
- address _coreContract,
204
- uint256 _projectId
205
- ) external view returns (bool _isPolyptych) {
206
- return _projectIsPolyptych[_coreContract][_projectId];
213
+ function projectUsesHashSeedSetter(
214
+ address coreContract,
215
+ uint256 projectId
216
+ ) external view returns (bool usingHashSeedSetter) {
217
+ return _projectUsesHashSeedSetter[coreContract][projectId];
207
218
  }
208
219
 
209
220
  /**
210
221
  * @inheritdoc ISharedRandomizerV0
211
222
  */
212
223
  function hashSeedSetterContracts(
213
- address _coreContract
224
+ address coreContract,
225
+ uint256 projectId
214
226
  ) external view returns (address _hashSeedSetterContract) {
215
- return _hashSeedSetterContracts[_coreContract];
227
+ return _hashSeedSetterContracts[coreContract][projectId];
216
228
  }
217
229
 
218
230
  /**
219
231
  * @inheritdoc ISharedRandomizerV0
220
232
  */
221
- function polyptychHashSeed(
222
- address _coreContract,
223
- uint256 _tokenId
233
+ function preAssignedHashSeed(
234
+ address coreContract,
235
+ uint256 tokenId
224
236
  ) external view returns (bytes12 _hashSeed) {
225
- return _polyptychHashSeed[_coreContract][_tokenId];
237
+ return _preAssignedHashSeeds[coreContract][tokenId];
226
238
  }
227
239
 
228
240
  /**
229
241
  * @notice Internal function to atomically obtain a pseudorandom number
230
242
  * from the configured pseudorandom contract.
231
- * @param _coreContract - The core contract that is requesting an atomic
243
+ * @param coreContract - The core contract that is requesting an atomic
232
244
  * pseudorandom number.
233
- * @param _tokenId - The token ID on `_coreContract` that is associated
245
+ * @param tokenId - The token ID on `coreContract` that is associated
234
246
  * with the pseudorandom number request.
235
247
  */
236
248
  function _getPseudorandomAtomic(
237
- address _coreContract,
238
- uint256 _tokenId
249
+ address coreContract,
250
+ uint256 tokenId
239
251
  ) internal view returns (bytes32) {
240
252
  return
241
253
  pseudorandomAtomicContract.getPseudorandomAtomic(
242
- keccak256(abi.encodePacked(_coreContract, _tokenId))
254
+ keccak256(abi.encodePacked(coreContract, tokenId))
243
255
  );
244
256
  }
257
+
258
+ /**
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`.
262
+ */
263
+ function _tokenIdToProjectId(
264
+ uint256 tokenId
265
+ ) internal pure returns (uint256 projectId) {
266
+ return tokenId / ONE_MILLION;
267
+ }
245
268
  }
@@ -1,8 +1,8 @@
1
1
  // SPDX-License-Identifier: LGPL-3.0-only
2
2
  // Created By: Art Blocks Inc.
3
3
 
4
- import "../interfaces/0.8.x/IArtblocksRoyaltyOverride.sol";
5
- import "../interfaces/0.8.x/IGenArt721CoreContractV3.sol";
4
+ import "../interfaces/v0.8.x/IArtblocksRoyaltyOverride.sol";
5
+ import "../interfaces/v0.8.x/IGenArt721CoreContractV3.sol";
6
6
 
7
7
  import "@openzeppelin-4.5/contracts/utils/introspection/ERC165.sol";
8
8
 
@@ -1,8 +1,8 @@
1
1
  // SPDX-License-Identifier: LGPL-3.0-only
2
2
  // Created By: Art Blocks Inc.
3
3
 
4
- import "../interfaces/0.8.x/IArtblocksRoyaltyOverride.sol";
5
- import "../interfaces/0.8.x/IGenArt721CoreV2_PBAB.sol";
4
+ import "../interfaces/v0.8.x/IArtblocksRoyaltyOverride.sol";
5
+ import "../interfaces/v0.8.x/IGenArt721CoreV2_PBAB.sol";
6
6
 
7
7
  import "@openzeppelin-4.5/contracts/utils/introspection/ERC165.sol";
8
8