@artblocks/contracts 1.0.2 → 1.0.4

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 (387) hide show
  1. package/README.md +56 -21
  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 +141 -15
  5. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +42 -5
  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/{GenArt721CoreV2_ENGINE_FLEX.sol → V2/GenArt721CoreV2_ENGINE_FLEX.sol}/GenArt721CoreV2_ENGINE_FLEX.json +3 -3
  34. package/artifacts/contracts/engine/{GenArt721CoreV2_PBAB.sol → V2/GenArt721CoreV2_PBAB.sol}/GenArt721CoreV2_PBAB.json +3 -3
  35. package/artifacts/contracts/engine/{GenArt721CoreV2_PRTNR.sol → V2/GenArt721CoreV2_PRTNR.sol}/GenArt721CoreV2_PRTNR.json +3 -3
  36. package/artifacts/contracts/engine/{GenArt721MinterBurner_PBAB.sol → V2/GenArt721MinterBurner_PBAB.sol}/GenArt721MinterBurner_PBAB.json +3 -3
  37. package/artifacts/contracts/engine/{GenArt721MinterDAExp_PBAB.sol → V2/GenArt721MinterDAExp_PBAB.sol}/GenArt721MinterDAExp_PBAB.json +3 -3
  38. package/artifacts/contracts/engine/{GenArt721Minter_PBAB.sol → V2/GenArt721Minter_PBAB.sol}/GenArt721Minter_PBAB.json +3 -3
  39. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +1960 -0
  40. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +2247 -0
  41. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +2247 -0
  42. package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +401 -0
  43. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +2281 -0
  44. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IAdminACLV0_PROHIBITION.sol/IAdminACLV0_PROHIBITION.json +359 -0
  45. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +1094 -0
  46. package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +242 -0
  47. package/artifacts/contracts/engine-registry/EngineRegistryV0.sol/EngineRegistryV0.json +2 -2
  48. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +41 -4
  49. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IBonusContract.sol/IBonusContract.json +1 -1
  50. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreContractV1.sol/IGenArt721CoreContractV1.json +1 -1
  51. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreV2_PBAB.sol/IGenArt721CoreV2_PBAB.json +1 -1
  52. package/artifacts/contracts/interfaces/{0.5.x → v0.5.x}/IRandomizer.sol/IRandomizer.json +1 -1
  53. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IAdminACLV0.sol/IAdminACLV0.json +1 -1
  54. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IArtblocksRoyaltyOverride.sol/IArtblocksRoyaltyOverride.json +1 -1
  55. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IBonusContract.sol/IBonusContract.json +1 -1
  56. package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReader.sol/IBytecodeStorageReader.json +111 -0
  57. package/artifacts/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol/ICoreRegistryV1.json +172 -0
  58. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IDelegationRegistry.sol/IDelegationRegistry.json +1 -1
  59. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryCompatibleV0.sol/IDependencyRegistryCompatibleV0.json +1 -1
  60. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +3 -3
  61. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IEngineRegistryV0.sol/IEngineRegistryV0.json +1 -1
  62. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV0.sol/IFilteredMinterDAExpSettlementV0.json +1 -1
  63. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV1.sol/IFilteredMinterDAExpSettlementV1.json +1 -1
  64. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlement_Mixin.sol/IFilteredMinterDAExpSettlement_Mixin.json +1 -1
  65. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV0.sol/IFilteredMinterDAExpV0.json +1 -1
  66. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV1.sol/IFilteredMinterDAExpV1.json +1 -1
  67. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV0.sol/IFilteredMinterDALinV0.json +1 -1
  68. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV1.sol/IFilteredMinterDALinV1.json +1 -1
  69. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV0.sol/IFilteredMinterHolderV0.json +1 -1
  70. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV1.sol/IFilteredMinterHolderV1.json +1 -1
  71. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV2.sol/IFilteredMinterHolderV2.json +1 -1
  72. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV0.sol/IFilteredMinterMerkleV0.json +1 -1
  73. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV1.sol/IFilteredMinterMerkleV1.json +1 -1
  74. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV2.sol/IFilteredMinterMerkleV2.json +1 -1
  75. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterSEAV0.sol/IFilteredMinterSEAV0.json +56 -54
  76. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV0.sol/IFilteredMinterV0.json +1 -1
  77. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV1.sol/IFilteredMinterV1.json +1 -1
  78. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV2.sol/IFilteredMinterV2.json +1 -1
  79. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractExposesHashSeed.sol/IGenArt721CoreContractExposesHashSeed.json +30 -0
  80. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV1.sol/IGenArt721CoreContractV1.json +1 -1
  81. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +14 -1
  82. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol/IGenArt721CoreContractV3WithSharedRandomizer.json +24 -0
  83. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +14 -1
  84. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +8 -14
  85. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +8 -14
  86. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreV2_PBAB.sol/IGenArt721CoreV2_PBAB.json +1 -1
  87. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IManifold.sol/IManifold.json +1 -1
  88. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMinterBaseV0.sol/IMinterBaseV0.json +1 -1
  89. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV0.sol/IMinterFilterV0.json +1 -1
  90. package/artifacts/contracts/interfaces/v0.8.x/IMinterFilterV1.sol/IMinterFilterV1.json +514 -0
  91. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPICoreV0.sol/IMintingAPICoreV0.json +1 -1
  92. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPIMinterV0.sol/IMintingAPIMinterV0.json +1 -1
  93. package/artifacts/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol/IPseudorandomAtomic.json +30 -0
  94. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizer.sol/IRandomizer.json +1 -1
  95. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerPolyptychV0.sol/IRandomizerPolyptychV0.json +1 -1
  96. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerV2.sol/IRandomizerV2.json +1 -1
  97. package/artifacts/contracts/interfaces/v0.8.x/IRandomizer_V3CoreBase.sol/IRandomizer_V3CoreBase.json +24 -0
  98. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol/ISharedMinterDAExpSettlementV0.json +207 -0
  99. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol/ISharedMinterDAExpV0.json +93 -0
  100. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol/ISharedMinterDALinV0.json +93 -0
  101. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol/ISharedMinterDAV0.json +69 -0
  102. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol/ISharedMinterHolderV0.json +203 -0
  103. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol/ISharedMinterMerkleV0.json +123 -0
  104. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol/ISharedMinterSEAV0.json +261 -0
  105. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol/ISharedMinterSimplePurchaseV0.json +64 -0
  106. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterV0.sol/ISharedMinterV0.json +533 -0
  107. package/artifacts/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol/ISharedRandomizerV0.json +223 -0
  108. package/artifacts/contracts/interfaces/{0.8.x → v0.8.x}/IWETH.sol/IWETH.json +1 -1
  109. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Address.json +2 -2
  110. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Counters.json +2 -2
  111. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/CustomERC721Metadata.json +2 -2
  112. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/ERC721.json +2 -2
  113. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/ERC721Enumerable.json +2 -2
  114. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/GenArt721CoreV1.json +2 -2
  115. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/SafeMath.json +2 -2
  116. package/artifacts/contracts/legacy/GenArt721CoreV1.sol/Strings.json +2 -2
  117. package/artifacts/contracts/legacy/GenArt721LegacyMinter.sol/GenArt721LegacyMinter.json +2 -2
  118. package/artifacts/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol/DelegationRegistry.json +2 -2
  119. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeMock.sol/GnosisSafeMock.json +2 -2
  120. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeProxyFactoryMock.sol/GnosisSafeProxyFactoryMock.json +2 -2
  121. package/artifacts/contracts/libs/integration-refs/gnosis-safe/MultiSendMock.sol/MultiSendMock.json +2 -2
  122. package/artifacts/contracts/libs/integration-refs/weth9/weth9.sol/WETH9_.json +2 -2
  123. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/CustomERC721Metadata.sol/CustomERC721Metadata.json +3 -3
  124. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/IERC20.sol/IERC20.json +1 -1
  125. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/SafeMath.sol/SafeMath.json +3 -3
  126. package/artifacts/contracts/libs/{0.5.x → v0.5.x}/Strings.sol/Strings.json +3 -3
  127. package/artifacts/contracts/libs/v0.8.x/ABHelpers.sol/ABHelpers.json +10 -0
  128. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +10 -0
  129. package/artifacts/contracts/libs/{0.8.x/BytecodeStorage.sol → v0.8.x/BytecodeStorageV0.sol}/BytecodeStorage.json +3 -3
  130. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageReader.json +163 -0
  131. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageWriter.json +10 -0
  132. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/Bytes32Strings.sol/Bytes32Strings.json +3 -3
  133. package/artifacts/contracts/libs/{0.8.x → v0.8.x}/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +3 -3
  134. package/artifacts/contracts/libs/v0.8.x/SSTORE2.sol/SSTORE2.json +10 -0
  135. package/artifacts/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol/DAExpLib.json +10 -0
  136. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +10 -0
  137. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +10 -0
  138. package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +10 -0
  139. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +10 -0
  140. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +10 -0
  141. package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +10 -0
  142. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +10 -0
  143. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +10 -0
  144. package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +10 -0
  145. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV0.sol/MinterFilterV0.json +2 -2
  146. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  147. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +748 -0
  148. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +1228 -0
  149. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -2
  150. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +1146 -0
  151. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV4.sol/MinterDAExpV4.json +2 -2
  152. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +909 -0
  153. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +1228 -0
  154. package/artifacts/contracts/minter-suite/Minters/MinterDALinV4.sol/MinterDALinV4.json +2 -2
  155. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +909 -0
  156. package/artifacts/contracts/minter-suite/Minters/MinterHolderV4.sol/MinterHolderV4.json +2 -2
  157. package/artifacts/contracts/minter-suite/Minters/MinterMerkleV5.sol/MinterMerkleV5.json +2 -2
  158. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +10 -160
  159. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
  160. package/artifacts/contracts/minter-suite/Minters/MinterSEAV0.sol/MinterSEAV0.json +59 -80
  161. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +1325 -0
  162. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
  163. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +848 -0
  164. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +1091 -0
  165. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +1075 -0
  166. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +1243 -0
  167. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +1167 -0
  168. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV4.sol/MinterSetPriceV4.json +2 -2
  169. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +772 -0
  170. package/artifacts/contracts/mock/{BytecodeTextCR_DMock.sol/BytecodeTextCR_DMock.json → BytecodeV0TextCR_DMock.sol/BytecodeV0TextCR_DMock.json} +4 -4
  171. package/artifacts/contracts/mock/BytecodeV1LibCallsMock.sol/BytecodeV1LibCallsMock.json +135 -0
  172. package/artifacts/contracts/mock/BytecodeV1TextCR_DMock.sol/BytecodeV1TextCR_DMock.json +301 -0
  173. package/artifacts/contracts/mock/DeadReceiverBidderMock.sol/DeadReceiverBidderMock.json +25 -2
  174. package/artifacts/contracts/mock/DeadReceiverMock.sol/DeadReceiverMock.json +2 -2
  175. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +114 -0
  176. package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +28 -2
  177. package/artifacts/contracts/mock/GasLimitReceiverBidderMock.sol/GasLimitReceiverBidderMock.json +2 -2
  178. package/artifacts/contracts/mock/GasLimitReceiverMock.sol/GasLimitReceiverMock.json +2 -2
  179. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +22 -4
  180. package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +2 -2
  181. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +440 -0
  182. package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +39 -0
  183. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  184. package/artifacts/contracts/mock/ReentrancyHolderMock.sol/ReentrancyHolderMock.json +2 -2
  185. package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
  186. package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
  187. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +2 -2
  188. package/artifacts/contracts/mock/SSTORE2Mock.sol/SSTORE2Mock.json +118 -0
  189. package/artifacts/contracts/randomizer/{BasicRandomizer.sol → deprecated/BasicRandomizer.sol}/BasicRandomizer.json +3 -3
  190. package/artifacts/contracts/randomizer/{BasicRandomizerBase_v0_0_0.sol → deprecated/BasicRandomizerBase_v0_0_0.sol}/RandomizerBase.json +1 -1
  191. package/artifacts/contracts/randomizer/{PolyptychRandomizerV0.sol → deprecated/PolyptychRandomizerV0.sol}/BasicPolyptychRandomizerV0.json +3 -3
  192. package/artifacts/contracts/randomizer/{RandomizerV2.sol → deprecated/RandomizerV2.sol}/BasicRandomizerV2.json +3 -3
  193. package/artifacts/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol/PseudorandomAtomic.json +30 -0
  194. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +247 -0
  195. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +2 -2
  196. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol/GenArt721RoyaltyOverride_PBAB.json +2 -2
  197. package/contracts/AdminACLV0.sol +2 -2
  198. package/contracts/AdminACLV1.sol +2 -2
  199. package/contracts/DependencyRegistryV0.sol +219 -123
  200. package/contracts/GenArt721CoreV3.sol +60 -42
  201. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV0.sol +3 -3
  202. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV1.sol +3 -3
  203. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol +4 -4
  204. package/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol +4 -4
  205. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +4 -4
  206. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol +4 -4
  207. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV0.sol +3 -3
  208. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV1.sol +3 -3
  209. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol +4 -4
  210. package/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol +4 -4
  211. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV0.sol +3 -3
  212. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol +4 -4
  213. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol +5 -5
  214. package/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol +5 -5
  215. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV0.sol +3 -3
  216. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol +4 -4
  217. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol +5 -5
  218. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol +5 -5
  219. package/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol +5 -5
  220. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV0.sol +3 -3
  221. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV1.sol +3 -3
  222. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol +4 -4
  223. package/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol +4 -4
  224. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol +3 -3
  225. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol +3 -3
  226. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol +4 -4
  227. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol +4 -4
  228. package/contracts/engine/{GenArt721CoreV2_ENGINE_FLEX.sol → V2/GenArt721CoreV2_ENGINE_FLEX.sol} +2 -2
  229. package/contracts/engine/{GenArt721CoreV2_PBAB.sol → V2/GenArt721CoreV2_PBAB.sol} +2 -2
  230. package/contracts/engine/{GenArt721CoreV2_PRTNR.sol → V2/GenArt721CoreV2_PRTNR.sol} +3 -3
  231. package/contracts/engine/{GenArt721MinterBurner_PBAB.sol → V2/GenArt721MinterBurner_PBAB.sol} +2 -2
  232. package/contracts/engine/{GenArt721MinterDAExp_PBAB.sol → V2/GenArt721MinterDAExp_PBAB.sol} +2 -2
  233. package/contracts/engine/{GenArt721Minter_PBAB.sol → V2/GenArt721Minter_PBAB.sol} +2 -2
  234. package/contracts/{GenArt721CoreV3_Engine.sol → engine/V3/GenArt721CoreV3_Engine.sol} +48 -24
  235. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +2298 -0
  236. package/contracts/{GenArt721CoreV3_Engine_Flex.sol → engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol} +50 -31
  237. package/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol +281 -0
  238. package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +2359 -0
  239. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IAdminACLV0_PROHIBITION.sol +123 -0
  240. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +29 -0
  241. package/contracts/engine-registry/CoreRegistryV1.sol +254 -0
  242. package/contracts/engine-registry/EngineRegistryV0.sol +2 -2
  243. package/contracts/explorations/GenArt721CoreV3_Explorations.sol +58 -40
  244. package/contracts/interfaces/v0.8.x/IBytecodeStorageReader.sol +62 -0
  245. package/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol +27 -0
  246. package/contracts/interfaces/{0.8.x → v0.8.x}/IDelegationRegistry.sol +1 -1
  247. package/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryCompatibleV0.sol +1 -1
  248. package/contracts/interfaces/{0.8.x → v0.8.x}/IDependencyRegistryV0.sol +3 -3
  249. package/contracts/interfaces/{0.8.x → v0.8.x}/IEngineRegistryV0.sol +1 -1
  250. package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterSEAV0.sol +34 -15
  251. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractExposesHashSeed.sol +11 -0
  252. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol +23 -0
  253. package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Base.sol +3 -0
  254. package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine.sol +0 -5
  255. package/contracts/interfaces/v0.8.x/IMinterFilterV1.sol +184 -0
  256. package/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol +16 -0
  257. package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerPolyptychV0.sol +1 -1
  258. package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizerV2.sol +2 -5
  259. package/contracts/interfaces/v0.8.x/IRandomizer_V3CoreBase.sol +23 -0
  260. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +37 -0
  261. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol +25 -0
  262. package/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol +26 -0
  263. package/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol +19 -0
  264. package/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol +69 -0
  265. package/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol +44 -0
  266. package/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol +78 -0
  267. package/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol +28 -0
  268. package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +191 -0
  269. package/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol +123 -0
  270. package/contracts/legacy/GenArt721CoreV1.sol +2 -2
  271. package/contracts/legacy/GenArt721LegacyMinter.sol +5 -5
  272. package/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol +2 -2
  273. package/contracts/libs/integration-refs/weth9/weth9.sol +2 -0
  274. package/contracts/libs/v0.8.x/ABHelpers.sol +55 -0
  275. package/contracts/libs/v0.8.x/AuthLib.sol +197 -0
  276. package/contracts/libs/v0.8.x/BytecodeStorageV1.sol +399 -0
  277. package/contracts/libs/v0.8.x/SSTORE2.sol +109 -0
  278. package/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol +125 -0
  279. package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +109 -0
  280. package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +348 -0
  281. package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +175 -0
  282. package/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol +160 -0
  283. package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +320 -0
  284. package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +44 -0
  285. package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +390 -0
  286. package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +583 -0
  287. package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +153 -0
  288. package/contracts/minter-suite/MinterFilter/MinterFilterV0.sol +3 -3
  289. package/contracts/minter-suite/MinterFilter/MinterFilterV1.sol +6 -6
  290. package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +830 -0
  291. package/contracts/minter-suite/Minters/MinterBase_v0_1_1.sol +4 -4
  292. package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +966 -0
  293. package/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol +4 -4
  294. package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +1126 -0
  295. package/contracts/minter-suite/Minters/MinterDAExpV4.sol +4 -4
  296. package/contracts/minter-suite/Minters/MinterDAExpV5.sol +606 -0
  297. package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +952 -0
  298. package/contracts/minter-suite/Minters/MinterDALinV4.sol +4 -4
  299. package/contracts/minter-suite/Minters/MinterDALinV5.sol +591 -0
  300. package/contracts/minter-suite/Minters/MinterHolderV4.sol +5 -5
  301. package/contracts/minter-suite/Minters/MinterMerkleV5.sol +5 -5
  302. package/contracts/minter-suite/Minters/MinterPolyptychV0.sol +18 -17
  303. package/contracts/minter-suite/Minters/MinterSEAV0.sol +235 -186
  304. package/contracts/minter-suite/Minters/MinterSEAV1.sol +1190 -0
  305. package/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol +6 -6
  306. package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +570 -0
  307. package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +821 -0
  308. package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +802 -0
  309. package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +1096 -0
  310. package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +992 -0
  311. package/contracts/minter-suite/Minters/MinterSetPriceV4.sol +4 -4
  312. package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +461 -0
  313. package/contracts/mock/{BytecodeTextCR_DMock.sol → BytecodeV0TextCR_DMock.sol} +5 -5
  314. package/contracts/mock/BytecodeV1LibCallsMock.sol +114 -0
  315. package/contracts/mock/BytecodeV1TextCR_DMock.sol +233 -0
  316. package/contracts/mock/DeadReceiverBidderMock.sol +16 -1
  317. package/contracts/mock/DeadReceiverMock.sol +1 -1
  318. package/contracts/mock/DummySharedMinter.sol +75 -0
  319. package/contracts/mock/ERC20Mock.sol +16 -0
  320. package/contracts/mock/GasLimitReceiverBidderMock.sol +1 -1
  321. package/contracts/mock/GasLimitReceiverMock.sol +1 -1
  322. package/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol +22 -35
  323. package/contracts/mock/MockAdminACLV0.sol +2 -2
  324. package/contracts/mock/MockAdminACLV0_PROHIBITION.sol +207 -0
  325. package/contracts/mock/OriginRegisterMock.sol +27 -0
  326. package/contracts/mock/RandomizerV2_NoAssignMock.sol +2 -2
  327. package/contracts/mock/ReentrancyHolderMock.sol +1 -1
  328. package/contracts/mock/ReentrancyMerkleMock.sol +1 -1
  329. package/contracts/mock/ReentrancyMock.sol +1 -1
  330. package/contracts/mock/ReentrancySEAMock.sol +1 -1
  331. package/contracts/mock/SSTORE2Mock.sol +93 -0
  332. package/contracts/randomizer/{BasicRandomizer.sol → deprecated/BasicRandomizer.sol} +1 -1
  333. package/contracts/randomizer/{BasicRandomizerBase_v0_0_0.sol → deprecated/BasicRandomizerBase_v0_0_0.sol} +1 -1
  334. package/contracts/randomizer/{PolyptychRandomizerV0.sol → deprecated/PolyptychRandomizerV0.sol} +3 -3
  335. package/contracts/randomizer/{RandomizerV2.sol → deprecated/RandomizerV2.sol} +3 -3
  336. package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +30 -0
  337. package/contracts/randomizer/shared/SharedRandomizerV0.sol +260 -0
  338. package/contracts/royalty-registry/GenArt721RoyaltyOverride.sol +2 -2
  339. package/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol +2 -2
  340. package/package.json +51 -43
  341. package/.env.example +0 -17
  342. package/LICENSE +0 -165
  343. package/artifacts/contracts/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +0 -1942
  344. package/artifacts/contracts/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +0 -2229
  345. package/artifacts/contracts/engine-registry/future/EngineRegistryV1.sol/EngineRegistryV1.json +0 -109
  346. package/contracts/engine-registry/future/EngineRegistryV1.sol +0 -86
  347. /package/contracts/interfaces/{0.5.x → v0.5.x}/IBonusContract.sol +0 -0
  348. /package/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreContractV1.sol +0 -0
  349. /package/contracts/interfaces/{0.5.x → v0.5.x}/IGenArt721CoreV2_PBAB.sol +0 -0
  350. /package/contracts/interfaces/{0.5.x → v0.5.x}/IRandomizer.sol +0 -0
  351. /package/contracts/interfaces/{0.8.x → v0.8.x}/IAdminACLV0.sol +0 -0
  352. /package/contracts/interfaces/{0.8.x → v0.8.x}/IArtblocksRoyaltyOverride.sol +0 -0
  353. /package/contracts/interfaces/{0.8.x → v0.8.x}/IBonusContract.sol +0 -0
  354. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV0.sol +0 -0
  355. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlementV1.sol +0 -0
  356. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpSettlement_Mixin.sol +0 -0
  357. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV0.sol +0 -0
  358. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDAExpV1.sol +0 -0
  359. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV0.sol +0 -0
  360. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterDALinV1.sol +0 -0
  361. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV0.sol +0 -0
  362. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV1.sol +0 -0
  363. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterHolderV2.sol +0 -0
  364. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV0.sol +0 -0
  365. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV1.sol +0 -0
  366. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterMerkleV2.sol +0 -0
  367. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV0.sol +0 -0
  368. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV1.sol +0 -0
  369. /package/contracts/interfaces/{0.8.x → v0.8.x}/IFilteredMinterV2.sol +0 -0
  370. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV1.sol +0 -0
  371. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3.sol +0 -0
  372. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreContractV3_Engine_Flex.sol +0 -0
  373. /package/contracts/interfaces/{0.8.x → v0.8.x}/IGenArt721CoreV2_PBAB.sol +0 -0
  374. /package/contracts/interfaces/{0.8.x → v0.8.x}/IManifold.sol +0 -0
  375. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterBaseV0.sol +0 -0
  376. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMinterFilterV0.sol +0 -0
  377. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPICoreV0.sol +0 -0
  378. /package/contracts/interfaces/{0.8.x → v0.8.x}/IMintingAPIMinterV0.sol +0 -0
  379. /package/contracts/interfaces/{0.8.x → v0.8.x}/IRandomizer.sol +0 -0
  380. /package/contracts/interfaces/{0.8.x → v0.8.x}/IWETH.sol +0 -0
  381. /package/contracts/libs/{0.5.x → v0.5.x}/CustomERC721Metadata.sol +0 -0
  382. /package/contracts/libs/{0.5.x → v0.5.x}/IERC20.sol +0 -0
  383. /package/contracts/libs/{0.5.x → v0.5.x}/SafeMath.sol +0 -0
  384. /package/contracts/libs/{0.5.x → v0.5.x}/Strings.sol +0 -0
  385. /package/contracts/libs/{0.8.x/BytecodeStorage.sol → v0.8.x/BytecodeStorageV0.sol} +0 -0
  386. /package/contracts/libs/{0.8.x → v0.8.x}/Bytes32Strings.sol +0 -0
  387. /package/contracts/libs/{0.8.x → v0.8.x}/ERC721_PackedHashSeed.sol +0 -0
@@ -0,0 +1,583 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ import "../../../interfaces/v0.8.x/IMinterBaseV0.sol";
5
+ import "../../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
6
+ import "../../../interfaces/v0.8.x/IGenArt721CoreContractV3.sol";
7
+ import "../../../interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol";
8
+
9
+ import "@openzeppelin-4.7/contracts/token/ERC20/IERC20.sol";
10
+
11
+ pragma solidity ^0.8.0;
12
+
13
+ /**
14
+ * @title Art Blocks Split Funds Library
15
+ * @notice This library is designed for the Art Blocks platform. It splits
16
+ * Ether (ETH) and ERC20 token funds among stakeholders, such as sender
17
+ * (if refund is applicable), providers, artists, and artists' additional
18
+ * payees.
19
+ * @author Art Blocks Inc.
20
+ */
21
+
22
+ library SplitFundsLib {
23
+ // contract-level variables
24
+ struct IsEngineCache {
25
+ bool isEngine;
26
+ bool isCached;
27
+ }
28
+
29
+ // project-level variables
30
+ struct SplitFundsProjectConfig {
31
+ address currencyAddress; // address(0) if ETH
32
+ string currencySymbol; // Assumed to be ETH if null
33
+ }
34
+
35
+ /**
36
+ * @notice splits ETH funds between sender (if refund), providers,
37
+ * artist, and artist's additional payee for a token purchased on
38
+ * project `_projectId`.
39
+ * WARNING: This function uses msg.value and msg.sender to determine
40
+ * refund amounts, and therefore may not be applicable to all use cases
41
+ * (e.g. do not use with Dutch Auctions with on-chain settlement).
42
+ * @dev This function relies on msg.sender and msg.value, so it must be
43
+ * called directly from the contract that is receiving the payment.
44
+ * @dev possible DoS during splits is acknowledged, and mitigated by
45
+ * business practices, including end-to-end testing on mainnet, and
46
+ * admin-accepted artist payment addresses.
47
+ * @param _projectId Project ID for which funds shall be split.
48
+ * @param _pricePerTokenInWei Current price of token, in Wei.
49
+ * @param _coreContract Address of the GenArt721CoreContract associated
50
+ * with the project.
51
+ * @param _isEngine Whether the core contract is an engine contract.
52
+ */
53
+ function splitFundsETH(
54
+ uint256 _projectId,
55
+ uint256 _pricePerTokenInWei,
56
+ address _coreContract,
57
+ bool _isEngine
58
+ ) internal {
59
+ if (msg.value > 0) {
60
+ bool success_;
61
+ // send refund to sender
62
+ uint256 refund = msg.value - _pricePerTokenInWei;
63
+ if (refund > 0) {
64
+ (success_, ) = msg.sender.call{value: refund}("");
65
+ require(success_, "Refund failed");
66
+ }
67
+ // split revenues
68
+ splitRevenuesETH(
69
+ _projectId,
70
+ _pricePerTokenInWei,
71
+ _coreContract,
72
+ _isEngine
73
+ );
74
+ }
75
+ }
76
+
77
+ /**
78
+ * @notice Splits ETH revenues between providers, artist, and artist's
79
+ * additional payee for revenue generated by project `_projectId`.
80
+ * @dev possible DoS during splits is acknowledged, and mitigated by
81
+ * business practices, including end-to-end testing on mainnet, and
82
+ * admin-accepted artist payment addresses.
83
+ * @param _projectId Project ID for which funds shall be split.
84
+ * @param _valueInWei Value to be split, in Wei.
85
+ * @param _coreContract Address of the GenArt721CoreContract
86
+ * associated with the project.
87
+ * @param _isEngine Whether the core contract is an engine contract.
88
+ */
89
+ function splitRevenuesETH(
90
+ uint256 _projectId,
91
+ uint256 _valueInWei,
92
+ address _coreContract,
93
+ bool _isEngine
94
+ ) internal {
95
+ if (_valueInWei == 0) {
96
+ return; // return early
97
+ }
98
+ bool success;
99
+ // split funds between platforms, artist, and artist's
100
+ // additional payee
101
+ uint256 renderProviderRevenue_;
102
+ address payable renderProviderAddress_;
103
+ uint256 artistRevenue_;
104
+ address payable artistAddress_;
105
+ uint256 additionalPayeePrimaryRevenue_;
106
+ address payable additionalPayeePrimaryAddress_;
107
+
108
+ if (_isEngine) {
109
+ // get engine splits
110
+ uint256 platformProviderRevenue_;
111
+ address payable platformProviderAddress_;
112
+ (
113
+ renderProviderRevenue_,
114
+ renderProviderAddress_,
115
+ platformProviderRevenue_,
116
+ platformProviderAddress_,
117
+ artistRevenue_,
118
+ artistAddress_,
119
+ additionalPayeePrimaryRevenue_,
120
+ additionalPayeePrimaryAddress_
121
+ ) = IGenArt721CoreContractV3_Engine(_coreContract)
122
+ .getPrimaryRevenueSplits(_projectId, _valueInWei);
123
+ // Platform Provider payment (only possible if engine)
124
+ if (platformProviderRevenue_ > 0) {
125
+ (success, ) = platformProviderAddress_.call{
126
+ value: platformProviderRevenue_
127
+ }("");
128
+ require(success, "Platform Provider payment failed");
129
+ }
130
+ } else {
131
+ // get flagship splits
132
+ (
133
+ renderProviderRevenue_, // artblocks revenue
134
+ renderProviderAddress_, // artblocks address
135
+ artistRevenue_,
136
+ artistAddress_,
137
+ additionalPayeePrimaryRevenue_,
138
+ additionalPayeePrimaryAddress_
139
+ ) = IGenArt721CoreContractV3(_coreContract).getPrimaryRevenueSplits(
140
+ _projectId,
141
+ _valueInWei
142
+ );
143
+ }
144
+ // Render Provider / Art Blocks payment
145
+ if (renderProviderRevenue_ > 0) {
146
+ (success, ) = renderProviderAddress_.call{
147
+ value: renderProviderRevenue_
148
+ }("");
149
+ require(success, "Render Provider payment failed");
150
+ }
151
+ // artist payment
152
+ if (artistRevenue_ > 0) {
153
+ (success, ) = artistAddress_.call{value: artistRevenue_}("");
154
+ require(success, "Artist payment failed");
155
+ }
156
+ // additional payee payment
157
+ if (additionalPayeePrimaryRevenue_ > 0) {
158
+ (success, ) = additionalPayeePrimaryAddress_.call{
159
+ value: additionalPayeePrimaryRevenue_
160
+ }("");
161
+ require(success, "Additional Payee payment failed");
162
+ }
163
+ }
164
+
165
+ /**
166
+ * @notice Splits ERC20 funds between providers, artist, and artist's
167
+ * additional payee, for a token purchased on project `_projectId`.
168
+ * The function performs checks to ensure that the ERC20 token is
169
+ * approved for transfer, and that a non-zero ERC20 token address is
170
+ * configured.
171
+ * @dev This function relies on msg.sender and msg.value, so it must be
172
+ * called directly from the contract that is receiving the payment.
173
+ * @dev possible DoS during splits is acknowledged, and mitigated by
174
+ * business practices, including end-to-end testing on mainnet, and
175
+ * admin-accepted artist payment addresses.
176
+ * @param _splitFundsProjectConfig SplitFundsProjectConfig of the project.
177
+ * @param _projectId Project ID for which funds shall be split.
178
+ * @param _pricePerTokenInWei Current price of token, in Wei.
179
+ * @param _coreContract Core contract address.
180
+ * @param _isEngine Whether the core contract is an engine contract.
181
+ */
182
+ function splitFundsERC20(
183
+ SplitFundsProjectConfig storage _splitFundsProjectConfig,
184
+ uint256 _projectId,
185
+ uint256 _pricePerTokenInWei,
186
+ address _coreContract,
187
+ bool _isEngine
188
+ ) internal {
189
+ if (_pricePerTokenInWei == 0) {
190
+ return; // nothing to split, return early
191
+ }
192
+ address currencyAddress = _splitFundsProjectConfig.currencyAddress;
193
+ require(currencyAddress != address(0), "ERC20: payment not configured");
194
+ require(msg.value == 0, "ERC20: No ETH when using ERC20");
195
+ // ERC20 token is used for payment
196
+ validateERC20Approvals({
197
+ _msgSender: msg.sender,
198
+ _currencyAddress: currencyAddress,
199
+ _pricePerTokenInWei: _pricePerTokenInWei
200
+ });
201
+ IERC20 _projectCurrency = IERC20(currencyAddress);
202
+ // split remaining funds between foundation, artist, and artist's
203
+ // additional payee
204
+ uint256 renderProviderRevenue_;
205
+ address payable renderProviderAddress_;
206
+ uint256 artistRevenue_;
207
+ address payable artistAddress_;
208
+ uint256 additionalPayeePrimaryRevenue_;
209
+ address payable additionalPayeePrimaryAddress_;
210
+
211
+ if (_isEngine) {
212
+ // get engine splits
213
+ uint256 platformProviderRevenue_;
214
+ address payable platformProviderAddress_;
215
+ (
216
+ renderProviderRevenue_,
217
+ renderProviderAddress_,
218
+ platformProviderRevenue_,
219
+ platformProviderAddress_,
220
+ artistRevenue_,
221
+ artistAddress_,
222
+ additionalPayeePrimaryRevenue_,
223
+ additionalPayeePrimaryAddress_
224
+ ) = IGenArt721CoreContractV3_Engine(_coreContract)
225
+ .getPrimaryRevenueSplits(_projectId, _pricePerTokenInWei);
226
+ // Platform Provider payment (only possible if engine)
227
+ if (platformProviderRevenue_ > 0) {
228
+ require(
229
+ _projectCurrency.transferFrom(
230
+ msg.sender,
231
+ platformProviderAddress_,
232
+ platformProviderRevenue_
233
+ ),
234
+ "Platform Provider payment failed"
235
+ );
236
+ }
237
+ } else {
238
+ // get flagship splits
239
+ (
240
+ renderProviderRevenue_, // artblocks revenue
241
+ renderProviderAddress_, // artblocks address
242
+ artistRevenue_,
243
+ artistAddress_,
244
+ additionalPayeePrimaryRevenue_,
245
+ additionalPayeePrimaryAddress_
246
+ ) = IGenArt721CoreContractV3(_coreContract).getPrimaryRevenueSplits(
247
+ _projectId,
248
+ _pricePerTokenInWei
249
+ );
250
+ }
251
+ // Art Blocks payment
252
+ if (renderProviderRevenue_ > 0) {
253
+ require(
254
+ _projectCurrency.transferFrom(
255
+ msg.sender,
256
+ renderProviderAddress_,
257
+ renderProviderRevenue_
258
+ ),
259
+ "Render Provider payment failed"
260
+ );
261
+ }
262
+ // artist payment
263
+ if (artistRevenue_ > 0) {
264
+ require(
265
+ _projectCurrency.transferFrom(
266
+ msg.sender,
267
+ artistAddress_,
268
+ artistRevenue_
269
+ ),
270
+ "Artist payment failed"
271
+ );
272
+ }
273
+ // additional payee payment
274
+ if (additionalPayeePrimaryRevenue_ > 0) {
275
+ // @dev some ERC20 may not revert on transfer failure, so we
276
+ // check the return value
277
+ require(
278
+ _projectCurrency.transferFrom(
279
+ msg.sender,
280
+ additionalPayeePrimaryAddress_,
281
+ additionalPayeePrimaryRevenue_
282
+ ),
283
+ "Additional Payee payment failed"
284
+ );
285
+ }
286
+ }
287
+
288
+ /**
289
+ * @notice Updates payment currency of the referenced
290
+ * SplitFundsProjectConfig to be `_currencySymbol` at address
291
+ * `_currencyAddress`.
292
+ * Only supports setting currency info of ERC20 tokens.
293
+ * @dev artist-defined currency symbol is used instead of any on-chain
294
+ * currency symbol.
295
+ * @param _splitFundsProjectConfig SplitFundsProjectConfig to update.
296
+ * @param _currencySymbol Currency symbol.
297
+ * @param _currencyAddress Currency address.
298
+ */
299
+ function updateProjectCurrencyInfoERC20(
300
+ SplitFundsProjectConfig storage _splitFundsProjectConfig,
301
+ string memory _currencySymbol,
302
+ address _currencyAddress
303
+ ) internal {
304
+ // CHECKS
305
+ require(_currencyAddress != address(0), "null address, only ERC20");
306
+ require(bytes(_currencySymbol).length > 0, "only non-null symbol");
307
+ // EFFECTS
308
+ _splitFundsProjectConfig.currencySymbol = _currencySymbol;
309
+ _splitFundsProjectConfig.currencyAddress = _currencyAddress;
310
+ }
311
+
312
+ /**
313
+ * @notice Force sends `amount` (in wei) ETH to `to`, with a gas stipend
314
+ * equal to `minterRefundGasLimit`.
315
+ * If sending via the normal procedure fails, force sends the ETH by
316
+ * creating a temporary contract which uses `SELFDESTRUCT` to force send
317
+ * the ETH.
318
+ * Reverts if the current contract has insufficient balance.
319
+ * @param _to The address to send ETH to.
320
+ * @param _amount The amount of ETH to send.
321
+ * @dev This function is adapted from the `forceSafeTransferETH` function
322
+ * in the `https://github.com/Vectorized/solady` repository, with
323
+ * modifications to not check if the current contract has sufficient
324
+ * balance. Therefore, the contract should be checked for sufficient
325
+ * balance before calling this function in the minter itself, if
326
+ * applicable.
327
+ */
328
+ function forceSafeTransferETH(
329
+ address _to,
330
+ uint256 _amount,
331
+ uint256 _minterRefundGasLimit
332
+ ) internal {
333
+ // Manually inlined because the compiler doesn't inline functions with
334
+ // branches.
335
+ /// @solidity memory-safe-assembly
336
+ assembly {
337
+ // @dev intentionally do not check if this contract has sufficient
338
+ // balance, because that is not intended to be a valid state.
339
+
340
+ // Transfer the ETH and check if it succeeded or not.
341
+ if iszero(call(_minterRefundGasLimit, _to, _amount, 0, 0, 0, 0)) {
342
+ // if the transfer failed, we create a temporary contract with
343
+ // initialization code that uses `SELFDESTRUCT` to force send
344
+ // the ETH.
345
+ // note: Compatible with `SENDALL`:
346
+ // https://eips.ethereum.org/EIPS/eip-4758
347
+
348
+ //---------------------------------------------------------------------------------------------------------------//
349
+ // Opcode | Opcode + Arguments | Description | Stack View //
350
+ //---------------------------------------------------------------------------------------------------------------//
351
+ // Contract creation code that uses `SELFDESTRUCT` to force send ETH to a specified address. //
352
+ // Creation code summary: 0x73<20-byte toAddress>0xff //
353
+ //---------------------------------------------------------------------------------------------------------------//
354
+ // 0x73 | 0x73_toAddress | PUSH20 toAddress | toAddress //
355
+ // 0xFF | 0xFF | SELFDESTRUCT | //
356
+ //---------------------------------------------------------------------------------------------------------------//
357
+ // Store the address in scratch space, starting at 0x00, which begins the 20-byte address at 32-20=12 in memory
358
+ // @dev use scratch space because we have enough space for simple creation code (less than 0x40 bytes)
359
+ mstore(0x00, _to)
360
+ // store opcode PUSH20 immediately before the address, starting at 0x0b (11) in memory
361
+ mstore8(0x0b, 0x73)
362
+ // store opcode SELFDESTRUCT immediately after the address, starting at 0x20 (32) in memory
363
+ mstore8(0x20, 0xff)
364
+ // this will always succeed because the contract creation code is
365
+ // valid, and the address is valid because it is a 20-byte value
366
+ if iszero(create(_amount, 0x0b, 0x16)) {
367
+ // @dev For better gas estimation.
368
+ if iszero(gt(gas(), 1000000)) {
369
+ revert(0, 0)
370
+ }
371
+ }
372
+ }
373
+ }
374
+ }
375
+
376
+ /**
377
+ * @notice Returns whether or not the provided address `_coreContract`
378
+ * is an Art Blocks Engine core contract. Caches the result for future access.
379
+ * @param _coreContract Address of the core contract to check.
380
+ * @param _isEngineCache The storage pointer to the project's
381
+ * SplitFundsProjectConfig struct.
382
+ */
383
+ function isEngine(
384
+ address _coreContract,
385
+ IsEngineCache storage _isEngineCache
386
+ ) internal returns (bool) {
387
+ if (_isEngineCache.isCached) {
388
+ return _isEngineCache.isEngine;
389
+ } else {
390
+ bool _isEngine = getV3CoreIsEngine(_coreContract, _isEngineCache);
391
+ return _isEngine;
392
+ }
393
+ }
394
+
395
+ /**
396
+ * @notice Returns whether a V3 core contract is an Art Blocks Engine
397
+ * contract or not. Return value of false indicates that the core is a
398
+ * flagship contract. This function does not update the cache state for the
399
+ * given V3 core contract.
400
+ * @dev this function reverts if a core contract does not return the
401
+ * expected number of return values from getPrimaryRevenueSplits() for
402
+ * either a flagship or engine core contract.
403
+ * @dev this function uses the length of the return data (in bytes) to
404
+ * determine whether the core is an engine or not.
405
+ * @param _coreContract The address of the deployed core contract.
406
+ */
407
+ function getV3CoreIsEngineView(
408
+ address _coreContract
409
+ ) internal view returns (bool) {
410
+ // call getPrimaryRevenueSplits() on core contract
411
+ bytes memory payload = abi.encodeWithSignature(
412
+ "getPrimaryRevenueSplits(uint256,uint256)",
413
+ 0,
414
+ 0
415
+ );
416
+ (bool success, bytes memory returnData) = _coreContract.staticcall(
417
+ payload
418
+ );
419
+ require(success, "getPrimaryRevenueSplits() call failed");
420
+ // determine whether core is engine or not, based on return data length
421
+ uint256 returnDataLength = returnData.length;
422
+ if (returnDataLength == 6 * 32) {
423
+ // 6 32-byte words returned if flagship (not engine)
424
+ // @dev 6 32-byte words are expected because the non-engine core
425
+ // contracts return a payout address and uint256 payment value for
426
+ // the artist, and artist's additional payee, and Art Blocks.
427
+ // also note that per Solidity ABI encoding, the address return
428
+ // values are padded to 32 bytes.
429
+
430
+ return false;
431
+ } else if (returnDataLength == 8 * 32) {
432
+ // 8 32-byte words returned if engine
433
+ // @dev 8 32-byte words are expected because the engine core
434
+ // contracts return a payout address and uint256 payment value for
435
+ // the artist, artist's additional payee, render provider
436
+ // typically Art Blocks, and platform provider (partner).
437
+ // also note that per Solidity ABI encoding, the address return
438
+ // values are padded to 32 bytes.
439
+ return true;
440
+ } else {
441
+ // unexpected return value length
442
+ revert("Unexpected revenue split bytes");
443
+ }
444
+ }
445
+
446
+ /**
447
+ * Gets the currency address and symbol for the referenced
448
+ * SplitFundsProjectConfig.
449
+ * Only supports ERC20 tokens - returns currencySymbol of `UNCONFIG` if
450
+ * `currencyAddress` is zero.
451
+ * @param _splitFundsProjectConfig SplitFundsProjectConfig to read
452
+ * @return currencyAddress
453
+ * @return currencySymbol
454
+ */
455
+ function getCurrencyInfoERC20(
456
+ SplitFundsProjectConfig storage _splitFundsProjectConfig
457
+ )
458
+ internal
459
+ view
460
+ returns (address currencyAddress, string memory currencySymbol)
461
+ {
462
+ currencyAddress = _splitFundsProjectConfig.currencyAddress;
463
+ // default to "UNCONFIG" if project currency address is initial value
464
+ currencySymbol = currencyAddress == address(0)
465
+ ? "UNCONFIG"
466
+ : _splitFundsProjectConfig.currencySymbol;
467
+ }
468
+
469
+ /**
470
+ * Get the balance of `_currencyAddress` ERC20 tokens for `_walletAddress`.
471
+ * @param _currencyAddress ERC20 token address.
472
+ * @param _walletAddress wallet address.
473
+ * @return balance
474
+ */
475
+ function getERC20Balance(
476
+ address _currencyAddress,
477
+ address _walletAddress
478
+ ) internal view returns (uint256) {
479
+ return IERC20(_currencyAddress).balanceOf(_walletAddress);
480
+ }
481
+
482
+ /**
483
+ * Gets the allowance of `_spenderAddress` to spend `_walletAddress`'s
484
+ * `_currencyAddress` ERC20 tokens.
485
+ * @param _currencyAddress ERC20 token address.
486
+ * @param _walletAddress wallet address.
487
+ * @param _spenderAddress spender address.
488
+ * @return allowance
489
+ */
490
+ function getERC20Allowance(
491
+ address _currencyAddress,
492
+ address _walletAddress,
493
+ address _spenderAddress
494
+ ) internal view returns (uint256 allowance) {
495
+ allowance = IERC20(_currencyAddress).allowance(
496
+ _walletAddress,
497
+ _spenderAddress
498
+ );
499
+ return allowance;
500
+ }
501
+
502
+ /**
503
+ * @notice Returns whether a V3 core contract is an Art Blocks Engine
504
+ * contract or not. Return value of false indicates that the core is a
505
+ * flagship contract. If this function resolves without reverting, it also
506
+ * updates the cache state for the given V3 core contract.
507
+ * @dev this function reverts if a core contract does not return the
508
+ * expected number of return values from getPrimaryRevenueSplits() for
509
+ * either a flagship or engine core contract.
510
+ * @dev this function uses the length of the return data (in bytes) to
511
+ * determine whether the core is an engine or not.
512
+ * @param _coreContract The address of the deployed core contract.
513
+ * @param _isEngineCache The storage pointer to the project's
514
+ * IsEngineCache struct.
515
+ */
516
+ function getV3CoreIsEngine(
517
+ address _coreContract,
518
+ IsEngineCache storage _isEngineCache
519
+ ) private returns (bool) {
520
+ // call getPrimaryRevenueSplits() on core contract
521
+ bytes memory payload = abi.encodeWithSignature(
522
+ "getPrimaryRevenueSplits(uint256,uint256)",
523
+ 0,
524
+ 0
525
+ );
526
+ (bool success, bytes memory returnData) = _coreContract.call(payload);
527
+ require(success, "getPrimaryRevenueSplits() call failed");
528
+ // determine whether core is engine or not, based on return data length
529
+ uint256 returnDataLength = returnData.length;
530
+ if (returnDataLength == 6 * 32) {
531
+ // 6 32-byte words returned if flagship (not engine)
532
+ // @dev 6 32-byte words are expected because the non-engine core
533
+ // contracts return a payout address and uint256 payment value for
534
+ // the artist, and artist's additional payee, and Art Blocks.
535
+ // also note that per Solidity ABI encoding, the address return
536
+ // values are padded to 32 bytes.
537
+ _isEngineCache.isCached = true;
538
+ _isEngineCache.isEngine = false;
539
+ return false;
540
+ } else if (returnDataLength == 8 * 32) {
541
+ // 8 32-byte words returned if engine
542
+ // @dev 8 32-byte words are expected because the engine core
543
+ // contracts return a payout address and uint256 payment value for
544
+ // the artist, artist's additional payee, render provider
545
+ // typically Art Blocks, and platform provider (partner).
546
+ // also note that per Solidity ABI encoding, the address return
547
+ // values are padded to 32 bytes.
548
+ _isEngineCache.isCached = true;
549
+ _isEngineCache.isEngine = true;
550
+ return true;
551
+ } else {
552
+ // unexpected return value length
553
+ revert("Unexpected revenue split bytes");
554
+ }
555
+ }
556
+
557
+ /**
558
+ * Validate that `_msgSender` has approved the contract to spend at least
559
+ * `_pricePerTokenInWei` of `_currencyAddress` ERC20 tokens, and that
560
+ * `_msgSender` has a balance of at least `_pricePerTokenInWei` of
561
+ * `_currencyAddress` ERC20 tokens.
562
+ * Reverts if insufficient allowance or balance.
563
+ * @param _msgSender Address of the message sender to validate.
564
+ * @param _currencyAddress Address of the ERC20 token to validate.
565
+ * @param _pricePerTokenInWei Price per token in wei to validate.
566
+ */
567
+ function validateERC20Approvals(
568
+ address _msgSender,
569
+ address _currencyAddress,
570
+ uint256 _pricePerTokenInWei
571
+ ) private view {
572
+ require(
573
+ IERC20(_currencyAddress).allowance(_msgSender, address(this)) >=
574
+ _pricePerTokenInWei,
575
+ "Insufficient ERC20 allowance"
576
+ );
577
+ require(
578
+ IERC20(_currencyAddress).balanceOf(_msgSender) >=
579
+ _pricePerTokenInWei,
580
+ "Insufficient ERC20 balance"
581
+ );
582
+ }
583
+ }