@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,384 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ import {GenericMinterEventsLib} from "./GenericMinterEventsLib.sol";
7
+
8
+ import {MerkleProof} from "@openzeppelin-4.7/contracts/utils/cryptography/MerkleProof.sol";
9
+
10
+ /**
11
+ * @title Art Blocks Merkle Library
12
+ * @notice This library is designed to manage and verify merkle based gating for Art Blocks projects.
13
+ * It provides functionalities such as updating the merkle root of project, verifying an address against a proof,
14
+ * and setting the maximum number of invocations per address for a project.
15
+ * @author Art Blocks Inc.
16
+ */
17
+
18
+ library MerkleLib {
19
+ using MerkleProof for bytes32[];
20
+
21
+ /// Events specific to this library ///
22
+ /**
23
+ * @notice Notifies of the contract's default maximum mints allowed per
24
+ * user for a given project, on this minter. This value can be overridden
25
+ * by the artist of any project at any time.
26
+ * @param defaultMaxInvocationsPerAddress The default maximum mints allowed
27
+ */
28
+ event DefaultMaxInvocationsPerAddress(
29
+ uint256 defaultMaxInvocationsPerAddress
30
+ );
31
+ /**
32
+ * @notice Notifies of the contracts' current delegation registry address.
33
+ * @param delegationRegistry The address of the delegation registry
34
+ */
35
+ event DelegationRegistryUpdated(address delegationRegistry);
36
+
37
+ // position of Merkle Lib storage, using a diamond storage pattern for this
38
+ // library
39
+ bytes32 constant MERKLE_LIB_STORAGE_POSITION =
40
+ keccak256("merklelib.storage");
41
+
42
+ /// @notice Default maximum invocations per address
43
+ uint256 internal constant DEFAULT_MAX_INVOCATIONS_PER_ADDRESS = 1;
44
+ bytes32 internal constant CONFIG_MERKLE_ROOT = "merkleRoot";
45
+ bytes32 internal constant CONFIG_USE_MAX_INVOCATIONS_PER_ADDRESS_OVERRIDE =
46
+ "useMaxMintsPerAddrOverride"; // shortened to fit in 32 bytes
47
+ bytes32 internal constant CONFIG_MAX_INVOCATIONS_OVERRIDE =
48
+ "maxMintsPerAddrOverride"; // shortened to match format of previous key
49
+
50
+ struct MerkleProjectConfig {
51
+ // If true, the maxInvocationsPerAddressOverride will be used.
52
+ // If false, the default max invocations per address will be used.
53
+ bool useMaxInvocationsPerAddressOverride;
54
+ // Maximum invocations allowed per address.
55
+ // This will be used if useMaxInvocationsPerAddressOverride is true.
56
+ // A value of 0 means no limit.
57
+ // @dev Safe to use uint24 because maxInvocationsPerAddressOverride <= 1_000_000
58
+ // and 1_000_000 << max uint24
59
+ uint24 maxInvocationsPerAddressOverride;
60
+ // The root of the Merkle tree for this project.
61
+ bytes32 merkleRoot;
62
+ // The number of current invocations for this project from a given user address.
63
+ mapping(address user => uint256 mintInvocations) userMintInvocations;
64
+ }
65
+
66
+ // Diamond storage pattern is used in this library
67
+ struct MerkleLibStorage {
68
+ mapping(address coreContract => mapping(uint256 projectId => MerkleProjectConfig)) merkleProjectConfigs;
69
+ }
70
+
71
+ /**
72
+ * @notice Sets the maximum number of invocations per address for a project.
73
+ * @param projectId The ID of the project to set the maximum invocations for.
74
+ * @param coreContract The address of the core contract.
75
+ * @param maxInvocationsPerAddress The maximum number of invocations per address.
76
+ */
77
+ function setProjectInvocationsPerAddress(
78
+ uint256 projectId,
79
+ address coreContract,
80
+ uint24 maxInvocationsPerAddress
81
+ ) internal {
82
+ MerkleProjectConfig
83
+ storage merkleProjectConfig = getMerkleProjectConfig({
84
+ projectId: projectId,
85
+ coreContract: coreContract
86
+ });
87
+ merkleProjectConfig.useMaxInvocationsPerAddressOverride = true;
88
+ merkleProjectConfig
89
+ .maxInvocationsPerAddressOverride = maxInvocationsPerAddress;
90
+ emit GenericMinterEventsLib.ConfigValueSet({
91
+ projectId: projectId,
92
+ coreContract: coreContract,
93
+ key: CONFIG_USE_MAX_INVOCATIONS_PER_ADDRESS_OVERRIDE,
94
+ value: true
95
+ });
96
+ emit GenericMinterEventsLib.ConfigValueSet({
97
+ projectId: projectId,
98
+ coreContract: coreContract,
99
+ key: CONFIG_MAX_INVOCATIONS_OVERRIDE,
100
+ value: uint256(maxInvocationsPerAddress)
101
+ });
102
+ }
103
+
104
+ /**
105
+ * @notice Updates the Merkle root of a project.
106
+ * @param projectId The ID of the project to update.
107
+ * @param coreContract The address of the core contract.
108
+ * @param root The new Merkle root.
109
+ */
110
+ function updateMerkleRoot(
111
+ uint256 projectId,
112
+ address coreContract,
113
+ bytes32 root
114
+ ) internal {
115
+ require(root != bytes32(0), "Root must be provided");
116
+ MerkleProjectConfig
117
+ storage merkleProjectConfig = getMerkleProjectConfig({
118
+ projectId: projectId,
119
+ coreContract: coreContract
120
+ });
121
+ merkleProjectConfig.merkleRoot = root;
122
+ emit GenericMinterEventsLib.ConfigValueSet({
123
+ projectId: projectId,
124
+ coreContract: coreContract,
125
+ key: CONFIG_MERKLE_ROOT,
126
+ value: root
127
+ });
128
+ }
129
+
130
+ /**
131
+ * @notice Checks that a given proof is valid for the vault address, and
132
+ * also checks that the vault address has not exceeded the maximum number
133
+ * of invocations per address for the project.
134
+ * Reverts if the proof is invalid or if the vault address has exceeded the
135
+ * maximum number of invocations per address for the project.
136
+ * @param projectId project id to check
137
+ * @param coreContract core contract address to check
138
+ * @param proof Merkle proof to check
139
+ * @param vault address to check proof against
140
+ */
141
+ function preMintChecks(
142
+ uint256 projectId,
143
+ address coreContract,
144
+ bytes32[] calldata proof,
145
+ address vault
146
+ ) internal view {
147
+ MerkleProjectConfig
148
+ storage merkleProjectConfig = getMerkleProjectConfig({
149
+ projectId: projectId,
150
+ coreContract: coreContract
151
+ });
152
+ // require valid Merkle proof
153
+ require(
154
+ _verifyAddress({
155
+ proofRoot: merkleProjectConfig.merkleRoot,
156
+ proof: proof,
157
+ address_: vault
158
+ }),
159
+ "Invalid Merkle proof"
160
+ );
161
+
162
+ // limit mints per address by project
163
+ uint256 maxProjectInvocationsPerAddress = projectMaxInvocationsPerAddress(
164
+ merkleProjectConfig
165
+ );
166
+
167
+ // note that mint limits index off of the `vault` (when applicable)
168
+ require(
169
+ merkleProjectConfig.userMintInvocations[vault] <
170
+ maxProjectInvocationsPerAddress ||
171
+ maxProjectInvocationsPerAddress == 0,
172
+ "Max invocations reached"
173
+ );
174
+ }
175
+
176
+ /**
177
+ * @notice Updates the number of invocations for the `vault` address on the
178
+ * given project.
179
+ * @param projectId Project Id to mint on
180
+ * @param coreContract Core contract address to mint on
181
+ * @param vault Address being used to mint (the allowlisted address)
182
+ */
183
+ function mintEffects(
184
+ uint256 projectId,
185
+ address coreContract,
186
+ address vault
187
+ ) internal {
188
+ MerkleProjectConfig
189
+ storage merkleProjectConfig = getMerkleProjectConfig({
190
+ projectId: projectId,
191
+ coreContract: coreContract
192
+ });
193
+ // increment mint invocations for vault address
194
+ unchecked {
195
+ // this will never overflow since user's invocations on a project
196
+ // are limited by the project's max invocations
197
+ merkleProjectConfig.userMintInvocations[vault]++;
198
+ }
199
+ }
200
+
201
+ /**
202
+ * @notice Hashes an address.
203
+ * @param address_ The address to hash.
204
+ * @return The hash of the address.
205
+ */
206
+ function hashAddress(address address_) internal pure returns (bytes32) {
207
+ return keccak256(abi.encodePacked(address_));
208
+ }
209
+
210
+ /**
211
+ * @notice Processes a proof for an address.
212
+ * @param proof The proof to process.
213
+ * @param address_ The address to process the proof for.
214
+ * @return The resulting hash from processing the proof.
215
+ */
216
+ function processProofForAddress(
217
+ bytes32[] calldata proof,
218
+ address address_
219
+ ) internal pure returns (bytes32) {
220
+ return proof.processProofCalldata(hashAddress(address_));
221
+ }
222
+
223
+ /**
224
+ * @notice Returns the maximum number of invocations per address for a project.
225
+ * @param projectConfig The merkle project config to check.
226
+ * @return The maximum number of invocations per address.
227
+ */
228
+ function projectMaxInvocationsPerAddress(
229
+ MerkleProjectConfig storage projectConfig
230
+ ) internal view returns (uint256) {
231
+ if (projectConfig.useMaxInvocationsPerAddressOverride) {
232
+ return uint256(projectConfig.maxInvocationsPerAddressOverride);
233
+ } else {
234
+ return DEFAULT_MAX_INVOCATIONS_PER_ADDRESS;
235
+ }
236
+ }
237
+
238
+ /**
239
+ * @notice Returns the maximum number of invocations per address for a project.
240
+ * @param projectId Project Id to get config for
241
+ * @param coreContract Core contract address to get config for
242
+ * @return The maximum number of invocations per address.
243
+ */
244
+ function projectMaxInvocationsPerAddress(
245
+ uint256 projectId,
246
+ address coreContract
247
+ ) internal view returns (uint256) {
248
+ MerkleProjectConfig storage projectConfig = getMerkleProjectConfig({
249
+ projectId: projectId,
250
+ coreContract: coreContract
251
+ });
252
+ return projectMaxInvocationsPerAddress(projectConfig);
253
+ }
254
+
255
+ /**
256
+ * @notice Returns the number of invocations for a given address on a given
257
+ * project.
258
+ * @param projectId Project Id to query
259
+ * @param coreContract Core contract address to query
260
+ * @param purchaser Address to query
261
+ */
262
+ function projectUserMintInvocations(
263
+ uint256 projectId,
264
+ address coreContract,
265
+ address purchaser
266
+ ) internal view returns (uint256) {
267
+ MerkleProjectConfig storage projectConfig = getMerkleProjectConfig({
268
+ projectId: projectId,
269
+ coreContract: coreContract
270
+ });
271
+ return projectConfig.userMintInvocations[purchaser];
272
+ }
273
+
274
+ /**
275
+ * @notice Returns remaining invocations for a given address.
276
+ * If `projectLimitsMintInvocationsPerAddress` is false, individual
277
+ * addresses are only limited by the project's maximum invocations, and a
278
+ * dummy value of zero is returned for `mintInvocationsRemaining`.
279
+ * If `projectLimitsMintInvocationsPerAddress` is true, the quantity of
280
+ * remaining mint invocations for address `address` is returned as
281
+ * `mintInvocationsRemaining`.
282
+ * Note that mint invocations per address can be changed at any time by the
283
+ * artist of a project.
284
+ * Also note that all mint invocations are limited by a project's maximum
285
+ * invocations as defined on the core contract. This function may return
286
+ * a value greater than the project's remaining invocations.
287
+ * @param projectId Project Id to get remaining invocations on
288
+ * @param coreContract Core contract address of project
289
+ * @param address_ Address to get remaining invocations for
290
+ * @return projectLimitsMintInvocationsPerAddress If true, the project
291
+ * limits mint invocations per address. If false, the project does not
292
+ * limit mint invocations per address.
293
+ * @return mintInvocationsRemaining The number of remaining mint invocations
294
+ * for address `address_`. If `projectLimitsMintInvocationsPerAddress` is
295
+ * false, this value is always dummy zero.
296
+ */
297
+ function projectRemainingInvocationsForAddress(
298
+ uint256 projectId,
299
+ address coreContract,
300
+ address address_
301
+ )
302
+ internal
303
+ view
304
+ returns (
305
+ bool projectLimitsMintInvocationsPerAddress,
306
+ uint256 mintInvocationsRemaining
307
+ )
308
+ {
309
+ MerkleProjectConfig storage projectConfig = getMerkleProjectConfig({
310
+ projectId: projectId,
311
+ coreContract: coreContract
312
+ });
313
+ uint256 maxInvocationsPerAddress = projectMaxInvocationsPerAddress(
314
+ projectConfig
315
+ );
316
+ if (maxInvocationsPerAddress == 0) {
317
+ // project does not limit mint invocations per address, so leave
318
+ // `projectLimitsMintInvocationsPerAddress` at solidity initial
319
+ // value of false. Also leave `mintInvocationsRemaining` at
320
+ // solidity initial value of zero, as indicated in this function's
321
+ // documentation.
322
+ } else {
323
+ projectLimitsMintInvocationsPerAddress = true;
324
+ uint256 userMintInvocations = projectConfig.userMintInvocations[
325
+ address_
326
+ ];
327
+ // if user has not reached max invocations per address, return
328
+ // remaining invocations
329
+ if (maxInvocationsPerAddress > userMintInvocations) {
330
+ unchecked {
331
+ // will never underflow due to the check above
332
+ mintInvocationsRemaining =
333
+ maxInvocationsPerAddress -
334
+ userMintInvocations;
335
+ }
336
+ }
337
+ // else user has reached their maximum invocations, so leave
338
+ // `mintInvocationsRemaining` at solidity initial value of zero
339
+ }
340
+ }
341
+
342
+ /**
343
+ * Loads the MerkleProjectConfig for a given project and core contract.
344
+ * @param projectId Project Id to get config for
345
+ * @param coreContract Core contract address to get config for
346
+ */
347
+ function getMerkleProjectConfig(
348
+ uint256 projectId,
349
+ address coreContract
350
+ ) internal view returns (MerkleProjectConfig storage) {
351
+ return s().merkleProjectConfigs[coreContract][projectId];
352
+ }
353
+
354
+ /**
355
+ * @notice Return the storage struct for reading and writing. This library
356
+ * uses a diamond storage pattern when managing storage.
357
+ * @return storageStruct The MerkleLibStorage struct.
358
+ */
359
+ function s()
360
+ internal
361
+ pure
362
+ returns (MerkleLibStorage storage storageStruct)
363
+ {
364
+ bytes32 position = MERKLE_LIB_STORAGE_POSITION;
365
+ assembly ("memory-safe") {
366
+ storageStruct.slot := position
367
+ }
368
+ }
369
+
370
+ /**
371
+ * @notice Verifies an address against a proof.
372
+ * @param proofRoot The root of the proof to verify agaisnst.
373
+ * @param proof The proof to verify.
374
+ * @param address_ The address to verify.
375
+ * @return True if the address is verified, false otherwise.
376
+ */
377
+ function _verifyAddress(
378
+ bytes32 proofRoot,
379
+ bytes32[] calldata proof,
380
+ address address_
381
+ ) private pure returns (bool) {
382
+ return proof.verifyCalldata(proofRoot, hashAddress(address_));
383
+ }
384
+ }
@@ -0,0 +1,240 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ import {IGenArt721CoreContractV3_Base} from "../../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
7
+ import {IGenArt721CoreContractExposesHashSeed} from "../../../interfaces/v0.8.x/IGenArt721CoreContractExposesHashSeed.sol";
8
+ import {IGenArt721CoreContractV3WithSharedRandomizer} from "../../../interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol";
9
+ import {ISharedRandomizerV0} from "../../../interfaces/v0.8.x/ISharedRandomizerV0.sol";
10
+
11
+ import {GenericMinterEventsLib} from "./GenericMinterEventsLib.sol";
12
+
13
+ import {IERC20} from "@openzeppelin-4.7/contracts/token/ERC20/IERC20.sol";
14
+
15
+ /**
16
+ * @title Art Blocks Polyptych Minter Library
17
+ * @notice This library is designed for the Art Blocks platform. It includes
18
+ * structs and functions to help configure Polyptych minters.
19
+ * @author Art Blocks Inc.
20
+ */
21
+
22
+ library PolyptychLib {
23
+ bytes32 constant POLYPTYCH_PANEL_ID = "polyptychPanelId";
24
+
25
+ // position of Polyptych Lib storage, using a diamond storage pattern
26
+ // for this library
27
+ bytes32 constant POLYPTYCH_LIB_STORAGE_POSITION =
28
+ keccak256("polyptychlib.storage");
29
+
30
+ struct PolyptychProjectConfig {
31
+ // @dev uint24 provides sufficient qty of panels, and could be packed
32
+ // in the future if other values are added to this struct.
33
+ uint24 polyptychPanelId;
34
+ // Stores whether a panel with an ID has been minted for a given token hash seed
35
+ mapping(uint256 panelId => mapping(bytes12 hashSeed => bool panelIsMinted)) polyptychPanelHashSeedIsMinted;
36
+ }
37
+
38
+ // Diamond storage pattern is used in this library
39
+ struct PolyptychLibStorage {
40
+ mapping(address coreContract => mapping(uint256 projectId => PolyptychProjectConfig)) polyptychProjectConfigs;
41
+ }
42
+
43
+ /**
44
+ * @notice Increments the minter to the next polyptych panel of a given project
45
+ * @param projectId Project ID to increment panel ID for
46
+ * @param coreContract Core contract address that _projectId is on
47
+ */
48
+ function incrementPolyptychProjectPanelId(
49
+ uint256 projectId,
50
+ address coreContract
51
+ ) internal {
52
+ PolyptychProjectConfig
53
+ storage polyptychProjectConfig = getPolyptychProjectConfig({
54
+ projectId: projectId,
55
+ coreContract: coreContract
56
+ });
57
+ // increment panel ID
58
+ ++polyptychProjectConfig.polyptychPanelId;
59
+
60
+ // index the update
61
+ emit GenericMinterEventsLib.ConfigValueSet({
62
+ projectId: projectId,
63
+ coreContract: coreContract,
64
+ key: PolyptychLib.POLYPTYCH_PANEL_ID,
65
+ value: polyptychProjectConfig.polyptychPanelId
66
+ });
67
+ }
68
+
69
+ /**
70
+ * Validate the polyptych-related effects after a purchase on a polyptych
71
+ * minter.
72
+ * Verifies that the token hash seed is non-zero, and also enforces that
73
+ * the hash seed can only be used up to one time per panel.
74
+ * @param projectId Project ID to validate
75
+ * @param coreContract Core contract address to validate
76
+ * @param tokenHashSeed token hash seed
77
+ */
78
+ function validatePolyptychEffects(
79
+ uint256 projectId,
80
+ address coreContract,
81
+ bytes12 tokenHashSeed
82
+ ) internal {
83
+ PolyptychProjectConfig
84
+ storage polyptychProjectConfig = getPolyptychProjectConfig({
85
+ projectId: projectId,
86
+ coreContract: coreContract
87
+ });
88
+ // ensure non-zero hash seed
89
+ require(tokenHashSeed != bytes12(0), "Only non-zero hash seeds");
90
+ // verify that the hash seed has not been used on the current panel
91
+ uint256 panelId = polyptychProjectConfig.polyptychPanelId;
92
+ require(
93
+ !polyptychProjectConfig.polyptychPanelHashSeedIsMinted[panelId][
94
+ tokenHashSeed
95
+ ],
96
+ "Panel already minted"
97
+ );
98
+ // mark hash seed as used for the current panel
99
+ polyptychProjectConfig.polyptychPanelHashSeedIsMinted[panelId][
100
+ tokenHashSeed
101
+ ] = true;
102
+ }
103
+
104
+ /**
105
+ * @notice Sets the polyptych token hash seed on shared randomizer for a
106
+ * token ID on a core contract.
107
+ * @dev This function assumes the core contract is configured to use a
108
+ * shared randomizer that supports polyptych minting.
109
+ * @param coreContract Core contract address
110
+ * @param tokenId Token ID to set hash seed for
111
+ * @param hashSeed Hash seed to set
112
+ */
113
+ function setPolyptychHashSeed(
114
+ address coreContract,
115
+ uint256 tokenId,
116
+ bytes12 hashSeed
117
+ ) internal {
118
+ IGenArt721CoreContractV3WithSharedRandomizer(coreContract)
119
+ .randomizerContract()
120
+ .preSetHashSeed({
121
+ coreContract: coreContract,
122
+ tokenId: tokenId,
123
+ hashSeed: hashSeed
124
+ });
125
+ }
126
+
127
+ /**
128
+ * Validates that token hash seed is assigned to the token ID `tokenId` on
129
+ * the core contract `coreContract`.
130
+ * Reverts if hash seed is not assigned to the token ID.
131
+ * @param coreContract Core contract address
132
+ * @param tokenId Token ID to validate
133
+ * @param targetHashSeed target hash seed of `tokenId` on `coreContract`
134
+ */
135
+ function validateAssignedHashSeed(
136
+ address coreContract,
137
+ uint256 tokenId,
138
+ bytes12 targetHashSeed
139
+ ) internal view {
140
+ bytes12 assignedHashSeed = getTokenHashSeed({
141
+ coreContract: coreContract,
142
+ tokenId: tokenId
143
+ });
144
+ require(
145
+ assignedHashSeed == targetHashSeed,
146
+ "Unexpected token hash seed"
147
+ );
148
+ }
149
+
150
+ /**
151
+ * Gets token hash seed from core contract.
152
+ * Note that this function assumes the core contract conforms to
153
+ * `IGenArt721CoreContractExposesHashSeed`, which early versions of V3
154
+ * core contracts do not. If a contract does not conform to this interface,
155
+ * this function will revert.
156
+ * @param coreContract Core contract address
157
+ * @param tokenId Token ID to query hash seed for
158
+ */
159
+ function getTokenHashSeed(
160
+ address coreContract,
161
+ uint256 tokenId
162
+ ) internal view returns (bytes12) {
163
+ return
164
+ IGenArt721CoreContractExposesHashSeed(coreContract)
165
+ .tokenIdToHashSeed(tokenId);
166
+ }
167
+
168
+ /**
169
+ * Gets the current polyptych panel ID from polyptych project config.
170
+ * Polyptych panel ID is an incremented value that is used to track the
171
+ * current panel of a polyptych project.
172
+ * @param projectId Project ID to query
173
+ * @param coreContract Core contract address to query
174
+ */
175
+ function getPolyptychPanelId(
176
+ uint256 projectId,
177
+ address coreContract
178
+ ) internal view returns (uint256) {
179
+ PolyptychProjectConfig
180
+ storage polyptychProjectConfig = getPolyptychProjectConfig({
181
+ projectId: projectId,
182
+ coreContract: coreContract
183
+ });
184
+ return polyptychProjectConfig.polyptychPanelId;
185
+ }
186
+
187
+ /**
188
+ * Gets if a polyptych panel has already been minted for a given panel ID
189
+ * and hash seed.
190
+ * @param projectId Project ID to query
191
+ * @param coreContract Core contract address to query
192
+ * @param panelId Polyptych panel ID to query
193
+ * @param hashSeed Hash seed of panel to query
194
+ */
195
+ function getPolyptychPanelHashSeedIsMinted(
196
+ uint256 projectId,
197
+ address coreContract,
198
+ uint256 panelId,
199
+ bytes12 hashSeed
200
+ ) internal view returns (bool) {
201
+ PolyptychProjectConfig
202
+ storage polyptychProjectConfig = getPolyptychProjectConfig({
203
+ projectId: projectId,
204
+ coreContract: coreContract
205
+ });
206
+ return
207
+ polyptychProjectConfig.polyptychPanelHashSeedIsMinted[panelId][
208
+ hashSeed
209
+ ];
210
+ }
211
+
212
+ /**
213
+ * Loads the PolyptychProjectConfig for a given project and core
214
+ * contract.
215
+ * @param projectId Project Id to get config for
216
+ * @param coreContract Core contract address to get config for
217
+ */
218
+ function getPolyptychProjectConfig(
219
+ uint256 projectId,
220
+ address coreContract
221
+ ) internal view returns (PolyptychProjectConfig storage) {
222
+ return s().polyptychProjectConfigs[coreContract][projectId];
223
+ }
224
+
225
+ /**
226
+ * @notice Return the storage struct for reading and writing. This library
227
+ * uses a diamond storage pattern when managing storage.
228
+ * @return storageStruct The PolyptychLibStorage struct.
229
+ */
230
+ function s()
231
+ internal
232
+ pure
233
+ returns (PolyptychLibStorage storage storageStruct)
234
+ {
235
+ bytes32 position = POLYPTYCH_LIB_STORAGE_POSITION;
236
+ assembly ("memory-safe") {
237
+ storageStruct.slot := position
238
+ }
239
+ }
240
+ }