@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,197 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ import "../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
7
+ import "../../interfaces/v0.8.x/IMinterFilterV1.sol";
8
+
9
+ /**
10
+ * @title Art Blocks Authorization Minter Library
11
+ * @notice This library contains helper functions that may be used contracts to
12
+ * check authorization for performing operations in the Art Blocks V3 core
13
+ * contract ecosystem.
14
+ * @author Art Blocks Inc.
15
+ */
16
+
17
+ library AuthLib {
18
+ /**
19
+ * function to restrict access to only AdminACL allowed calls, where
20
+ * AdminACL is the admin of an IMinterFilterV1.
21
+ * Reverts if not allowed.
22
+ * @param _minterFilterAddress address of the minter filter to be checked,
23
+ * should implement IMinterFilterV1
24
+ * @param _sender address of the caller
25
+ * @param _contract address of the contract being called
26
+ * @param _selector selector of the function being called
27
+ */
28
+ function onlyMinterFilterAdminACL(
29
+ address _minterFilterAddress,
30
+ address _sender,
31
+ address _contract,
32
+ bytes4 _selector
33
+ ) internal {
34
+ require(
35
+ _minterFilterAdminACLAllowed({
36
+ _minterFilterAddress: _minterFilterAddress,
37
+ _sender: _sender,
38
+ _contract: _contract,
39
+ _selector: _selector
40
+ }),
41
+ "Only MinterFilter AdminACL"
42
+ );
43
+ }
44
+
45
+ /**
46
+ * Function to restrict access to only AdminACL allowed calls, where
47
+ * AdminACL is the admin of a core contract at `_coreContract`.
48
+ * Reverts if not allowed.
49
+ * @param _coreContract address of the core contract to be checked
50
+ * @param _sender address of the caller
51
+ * @param _contract address of the contract being called
52
+ * @param _selector selector of the function being called
53
+ */
54
+ function onlyCoreAdminACL(
55
+ address _coreContract,
56
+ address _sender,
57
+ address _contract,
58
+ bytes4 _selector
59
+ ) internal {
60
+ require(
61
+ _coreAdminACLAllowed({
62
+ _coreContract: _coreContract,
63
+ _sender: _sender,
64
+ _contract: _contract,
65
+ _selector: _selector
66
+ }),
67
+ "Only Core AdminACL allowed"
68
+ );
69
+ }
70
+
71
+ /**
72
+ * @notice Throws if `_sender` is any account other than the artist of the
73
+ * specified project `_projectId` on core contract `_coreContract`.
74
+ * Requirements: `msg.sender` must be the artist associated with
75
+ * `_projectId` on `_coreContract`.
76
+ * @param _projectId The ID of the project being checked.
77
+ * @param _coreContract The address of the GenArt721CoreContractV3_Base
78
+ * contract.
79
+ * @param _sender Wallet to check. Typically, the address of the caller.
80
+ */
81
+ function onlyArtist(
82
+ uint256 _projectId,
83
+ address _coreContract,
84
+ address _sender
85
+ ) internal view {
86
+ require(
87
+ _senderIsArtist({
88
+ _projectId: _projectId,
89
+ _coreContract: _coreContract,
90
+ _sender: _sender
91
+ }),
92
+ "Only Artist"
93
+ );
94
+ }
95
+
96
+ /**
97
+ * function to restrict access to only the artist of a project, or AdminACL
98
+ * allowed calls, where AdminACL is the admin of a core contract at
99
+ * `_coreContract`.
100
+ * @param _projectId id of the project
101
+ * @param _coreContract address of the core contract to be checked
102
+ * @param _sender address of the caller
103
+ * @param _contract address of the contract being called
104
+ * @param _selector selector of the function being called
105
+ */
106
+ function onlyCoreAdminACLOrArtist(
107
+ uint256 _projectId,
108
+ address _coreContract,
109
+ address _sender,
110
+ address _contract,
111
+ bytes4 _selector
112
+ ) internal {
113
+ require(
114
+ _senderIsArtist({
115
+ _projectId: _projectId,
116
+ _coreContract: _coreContract,
117
+ _sender: _sender
118
+ }) ||
119
+ _coreAdminACLAllowed({
120
+ _coreContract: _coreContract,
121
+ _sender: _sender,
122
+ _contract: _contract,
123
+ _selector: _selector
124
+ }),
125
+ "Only Artist or Core Admin ACL"
126
+ );
127
+ }
128
+
129
+ // ------------------------------------------------------------------------
130
+ // Private functions used internally by this library
131
+ // ------------------------------------------------------------------------
132
+
133
+ /**
134
+ * Private function that returns if minter filter contract's AdminACL
135
+ * allows `_sender` to call function with selector `_selector` on contract
136
+ * `_contract`.
137
+ * @param _minterFilterAddress address of the minter filter to be checked.
138
+ * Should implement IMinterFilterV1.
139
+ * @param _sender address of the caller
140
+ * @param _contract address of the contract being called
141
+ * @param _selector selector of the function being called
142
+ */
143
+ function _minterFilterAdminACLAllowed(
144
+ address _minterFilterAddress,
145
+ address _sender,
146
+ address _contract,
147
+ bytes4 _selector
148
+ ) private returns (bool) {
149
+ return
150
+ IMinterFilterV1(_minterFilterAddress).adminACLAllowed({
151
+ _sender: _sender,
152
+ _contract: _contract,
153
+ _selector: _selector
154
+ });
155
+ }
156
+
157
+ /**
158
+ * Private function that returns if core contract's AdminACL allows
159
+ * `_sender` to call function with selector `_selector` on contract
160
+ * `_contract`.
161
+ * @param _coreContract address of the core contract to be checked
162
+ * @param _sender address of the caller
163
+ * @param _contract address of the contract being called
164
+ * @param _selector selector of the function being called
165
+ */
166
+ function _coreAdminACLAllowed(
167
+ address _coreContract,
168
+ address _sender,
169
+ address _contract,
170
+ bytes4 _selector
171
+ ) private returns (bool) {
172
+ return
173
+ IGenArt721CoreContractV3_Base(_coreContract).adminACLAllowed({
174
+ _sender: _sender,
175
+ _contract: _contract,
176
+ _selector: _selector
177
+ });
178
+ }
179
+
180
+ /**
181
+ * Private function that returns if `_sender` is the artist of `_projectId`
182
+ * on `_coreContract`.
183
+ * @param _projectId project ID to check
184
+ * @param _coreContract core contract to check
185
+ * @param _sender wallet to check
186
+ */
187
+ function _senderIsArtist(
188
+ uint256 _projectId,
189
+ address _coreContract,
190
+ address _sender
191
+ ) private view returns (bool senderIsArtist) {
192
+ return
193
+ _sender ==
194
+ IGenArt721CoreContractV3_Base(_coreContract)
195
+ .projectIdToArtistAddress(_projectId);
196
+ }
197
+ }
@@ -0,0 +1,399 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ /**
7
+ * @title Art Blocks Script Storage Library
8
+ * @notice Utilize contract bytecode as persistent storage for large chunks of script string data.
9
+ * This library is intended to have an external deployed copy that is released in the future,
10
+ * and, as such, has been designed to support both updated V1 (versioned, with purging removed)
11
+ * reads as well as backwards-compatible reads for both a) the unversioned "V0" storage contracts
12
+ * which were deployed by the original version of this libary and b) contracts that were deployed
13
+ * using one of the SSTORE2 implementations referenced below.
14
+ * For these pre-V1 storage contracts (which themselves did not have any explicit versioning semantics)
15
+ * backwards-compatible reads are optimistic, and only expected to work for contracts actually
16
+ * deployed by the original version of this library – and may fail ungracefully if attempted to be
17
+ * used to read from other contracts.
18
+ * This library is split into two components, intended to be updated in tandem, and thus included
19
+ * here in the same source file. One component is an internal library that is intended to be embedded
20
+ * directly into other contracts and provides all _write_ functionality. The other is a public library
21
+ * that is intended to be deployed as a standalone contract and provides all _read_ functionality.
22
+ *
23
+ * @author Art Blocks Inc.
24
+ * @author Modified from 0xSequence (https://github.com/0xsequence/sstore2/blob/master/contracts/SSTORE2.sol)
25
+ * @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SSTORE2.sol)
26
+ *
27
+ * @dev Compared to the above two rerferenced libraries, this contracts-as-storage implementation makes a few
28
+ * notably different design decisions:
29
+ * - uses the `string` data type for input/output on reads, rather than speaking in bytes directly
30
+ * - stores the "writer" address (library user) in the deployed contract bytes, which is useful for
31
+ * on-chain introspection and provenance purposes
32
+ * - stores a very simple versioning string in the deployed contract bytes, which captures the version
33
+ * of the library that was used to deploy the storage contract and useful for supporting future
34
+ * compatibility management as this library evolves (e.g. in response to EOF v1 migration plans)
35
+ * Also, given that much of this library is written in assembly, this library makes use of a slightly
36
+ * different convention (when compared to the rest of the Art Blocks smart contract repo) around
37
+ * pre-defining return values in some cases in order to simplify need to directly memory manage these
38
+ * return values.
39
+ */
40
+
41
+ /**
42
+ * @title Art Blocks Script Storage Library (Public, Reads)
43
+ * @author Art Blocks Inc.
44
+ * @notice The public library for reading from storage contracts. This library is intended to be deployed as a
45
+ * standalone contract, and provides all _read_ functionality.
46
+ */
47
+ library BytecodeStorageReader {
48
+ // Define the set of known valid version strings that may be stored in the deployed storage contract bytecode
49
+ // note: These are all intentionally exactly 32-bytes and are null-terminated. Null-termination is used due
50
+ // to this being the standard expected formatting in common web3 tooling such as ethers.js. Please see
51
+ // the following for additional context: https://docs.ethers.org/v5/api/utils/strings/#Bytes32String
52
+ // Used for storage contracts that were deployed by an unknown source
53
+ bytes32 public constant UNKNOWN_VERSION_STRING =
54
+ "UNKNOWN_VERSION_STRING_________ ";
55
+ // Pre-dates versioning string, so this doesn't actually exist in any deployed contracts,
56
+ // but is useful for backwards-compatible semantics with original version of this library
57
+ bytes32 public constant V0_VERSION_STRING =
58
+ "BytecodeStorage_V0.0.0_________ ";
59
+ // The first versioned storage contract, deployed by an updated version of this library
60
+ bytes32 public constant V1_VERSION_STRING =
61
+ "BytecodeStorage_V1.0.0_________ ";
62
+ // The current version of this library.
63
+ bytes32 public constant CURRENT_VERSION = V1_VERSION_STRING;
64
+
65
+ //---------------------------------------------------------------------------------------------------------------//
66
+ // Starting Index | Size | Ending Index | Description //
67
+ //---------------------------------------------------------------------------------------------------------------//
68
+ // 0 | N/A | 0 | //
69
+ // 0 | 1 | 1 | single byte opcode for making the storage contract non-executable //
70
+ // 1 | 32 | 33 | the 32 byte slot used for storing a basic versioning string //
71
+ // 33 | 32 | 65 | the 32 bytes for storing the deploying contract's (0-padded) address //
72
+ //---------------------------------------------------------------------------------------------------------------//
73
+ // Define the offset for where the "meta bytes" end, and the "data bytes" begin. Note that this is a manually
74
+ // calculated value, and must be updated if the above table is changed. It is expected that tests will fail
75
+ // loudly if these values are not updated in-step with eachother.
76
+ uint256 private constant VERSION_OFFSET = 1;
77
+ uint256 private constant ADDRESS_OFFSET = 33;
78
+ uint256 private constant DATA_OFFSET = 65;
79
+
80
+ // Define the set of known *historic* offset values for where the "meta bytes" end, and the "data bytes" begin.
81
+ // SSTORE2 deployed storage contracts take the general format of:
82
+ // concat(0x00, data)
83
+ // note: this is true for both variants of the SSTORE2 library
84
+ uint256 private constant SSTORE2_DATA_OFFSET = 1;
85
+ // V0 deployed storage contracts take the general format of:
86
+ // concat(gated-cleanup-logic, deployer-address, data)
87
+ uint256 private constant V0_ADDRESS_OFFSET = 72;
88
+ uint256 private constant V0_DATA_OFFSET = 104;
89
+ // V1 deployed storage contracts take the general format of:
90
+ // concat(invalid opcode, version, deployer-address, data)
91
+ uint256 private constant V1_ADDRESS_OFFSET = ADDRESS_OFFSET;
92
+ uint256 private constant V1_DATA_OFFSET = DATA_OFFSET;
93
+
94
+ /*//////////////////////////////////////////////////////////////
95
+ READ LOGIC
96
+ //////////////////////////////////////////////////////////////*/
97
+
98
+ /**
99
+ * @notice Read a string from contract bytecode
100
+ * @param _address address of deployed contract with bytecode stored in the V0 or V1 format
101
+ * @return data string read from contract bytecode
102
+ * @dev This function performs input validation that the contract to read is in an expected format
103
+ */
104
+ function readFromBytecode(
105
+ address _address
106
+ ) public view returns (string memory data) {
107
+ uint256 dataOffset = _bytecodeDataOffsetAt(_address);
108
+ return string(readBytesFromBytecode(_address, dataOffset));
109
+ }
110
+
111
+ /**
112
+ * @notice Read the bytes from contract bytecode that was written to the EVM using SSTORE2
113
+ * @param _address address of deployed contract with bytecode stored in the SSTORE2 format
114
+ * @return data bytes read from contract bytecode
115
+ * @dev This function performs no input validation on the provided contract,
116
+ * other than that there is content to read (but not that its a "storage contract")
117
+ */
118
+ function readBytesFromSSTORE2Bytecode(
119
+ address _address
120
+ ) public view returns (bytes memory data) {
121
+ return readBytesFromBytecode(_address, SSTORE2_DATA_OFFSET);
122
+ }
123
+
124
+ /**
125
+ * @notice Read the bytes from contract bytecode, with an explicitly provided starting offset
126
+ * @param _address address of deployed contract with bytecode stored in the V0 or V1 format
127
+ * @param _offset offset to read from in contract bytecode, explicitly provided (not calculated)
128
+ * @return data bytes read from contract bytecode
129
+ * @dev This function performs no input validation on the provided contract,
130
+ * other than that there is content to read (but not that its a "storage contract")
131
+ */
132
+ function readBytesFromBytecode(
133
+ address _address,
134
+ uint256 _offset
135
+ ) public view returns (bytes memory data) {
136
+ // get the size of the bytecode
137
+ uint256 bytecodeSize = _bytecodeSizeAt(_address);
138
+ // handle case where address contains code < _offset
139
+ if (bytecodeSize < _offset) {
140
+ revert("ContractAsStorage: Read Error");
141
+ }
142
+
143
+ // handle case where address contains code >= dataOffset
144
+ // decrement by dataOffset to account for header info
145
+ uint256 size;
146
+ unchecked {
147
+ size = bytecodeSize - _offset;
148
+ }
149
+
150
+ assembly {
151
+ // allocate free memory
152
+ data := mload(0x40)
153
+ // update free memory pointer
154
+ // use and(x, not(0x1f) as cheaper equivalent to sub(x, mod(x, 0x20)).
155
+ // adding 0x1f to size + logic above ensures the free memory pointer
156
+ // remains word-aligned, following the Solidity convention.
157
+ mstore(0x40, add(data, and(add(add(size, 0x20), 0x1f), not(0x1f))))
158
+ // store length of data in first 32 bytes
159
+ mstore(data, size)
160
+ // copy code to memory, excluding the deployer-address
161
+ extcodecopy(_address, add(data, 0x20), _offset, size)
162
+ }
163
+ }
164
+
165
+ /**
166
+ * @notice Get address for deployer for given contract bytecode
167
+ * @param _address address of deployed contract with bytecode stored in the V0 or V1 format
168
+ * @return writerAddress address read from contract bytecode
169
+ */
170
+ function getWriterAddressForBytecode(
171
+ address _address
172
+ ) public view returns (address) {
173
+ // get the size of the data
174
+ uint256 bytecodeSize = _bytecodeSizeAt(_address);
175
+ // the dataOffset for the bytecode
176
+ uint256 addressOffset = _bytecodeAddressOffsetAt(_address);
177
+ // handle case where address contains code < addressOffset + 32 (address takes a whole slot)
178
+ if (bytecodeSize < (addressOffset + 32)) {
179
+ revert("ContractAsStorage: Read Error");
180
+ }
181
+
182
+ assembly {
183
+ // allocate free memory
184
+ let writerAddress := mload(0x40)
185
+ // shift free memory pointer by one slot
186
+ mstore(0x40, add(mload(0x40), 0x20))
187
+ // copy the 32-byte address of the data contract writer to memory
188
+ // note: this relies on the assumption noted at the top-level of
189
+ // this file that the storage layout for the deployed
190
+ // contracts-as-storage contract looks like::
191
+ // | invalid opcode | version-string (unless v0) | deployer-address (padded) | data |
192
+ extcodecopy(
193
+ _address,
194
+ writerAddress,
195
+ addressOffset,
196
+ 0x20 // full 32-bytes, as address is expected to be zero-padded
197
+ )
198
+ return(
199
+ writerAddress,
200
+ 0x20 // return size is entire slot, as it is zero-padded
201
+ )
202
+ }
203
+ }
204
+
205
+ /**
206
+ * @notice Get version for given contract bytecode
207
+ * @param _address address of deployed contract with bytecode stored in the V0 or V1 format
208
+ * @return version version read from contract bytecode
209
+ */
210
+ function getLibraryVersionForBytecode(
211
+ address _address
212
+ ) public view returns (bytes32) {
213
+ return _bytecodeVersionAt(_address);
214
+ }
215
+
216
+ /*//////////////////////////////////////////////////////////////
217
+ INTERNAL HELPER LOGIC
218
+ //////////////////////////////////////////////////////////////*/
219
+
220
+ /**
221
+ * @notice Returns the size of the bytecode at address `_address`
222
+ * @param _address address that may or may not contain bytecode
223
+ * @return size size of the bytecode code at `_address`
224
+ */
225
+ function _bytecodeSizeAt(
226
+ address _address
227
+ ) private view returns (uint256 size) {
228
+ assembly {
229
+ size := extcodesize(_address)
230
+ }
231
+ if (size == 0) {
232
+ revert("ContractAsStorage: Read Error");
233
+ }
234
+ }
235
+
236
+ /**
237
+ * @notice Returns the offset of the data in the bytecode at address `_address`
238
+ * @param _address address that may or may not contain bytecode
239
+ * @return dataOffset offset of data in bytecode if a known version, otherwise 0
240
+ */
241
+ function _bytecodeDataOffsetAt(
242
+ address _address
243
+ ) private view returns (uint256 dataOffset) {
244
+ bytes32 version = _bytecodeVersionAt(_address);
245
+ if (version == V1_VERSION_STRING) {
246
+ dataOffset = V1_DATA_OFFSET;
247
+ } else if (version == V0_VERSION_STRING) {
248
+ dataOffset = V0_DATA_OFFSET;
249
+ } else {
250
+ // unknown version, revert
251
+ revert("ContractAsStorage: Unsupported Version");
252
+ }
253
+ }
254
+
255
+ /**
256
+ * @notice Returns the offset of the address in the bytecode at address `_address`
257
+ * @param _address address that may or may not contain bytecode
258
+ * @return addressOffset offset of address in bytecode if a known version, otherwise 0
259
+ */
260
+ function _bytecodeAddressOffsetAt(
261
+ address _address
262
+ ) private view returns (uint256 addressOffset) {
263
+ bytes32 version = _bytecodeVersionAt(_address);
264
+ if (version == V1_VERSION_STRING) {
265
+ addressOffset = V1_ADDRESS_OFFSET;
266
+ } else if (version == V0_VERSION_STRING) {
267
+ addressOffset = V0_ADDRESS_OFFSET;
268
+ } else {
269
+ // unknown version, revert
270
+ revert("ContractAsStorage: Unsupported Version");
271
+ }
272
+ }
273
+
274
+ /**
275
+ * @notice Get version string for given contract bytecode
276
+ * @param _address address of deployed contract with bytecode stored in the V0 or V1 format
277
+ * @return version version string read from contract bytecode
278
+ */
279
+ function _bytecodeVersionAt(
280
+ address _address
281
+ ) private view returns (bytes32 version) {
282
+ // get the size of the data
283
+ uint256 bytecodeSize = _bytecodeSizeAt(_address);
284
+ // handle case where address contains code < minimum expected version string size,
285
+ // by returning early with the unknown version string
286
+ if (bytecodeSize < (VERSION_OFFSET + 32)) {
287
+ return UNKNOWN_VERSION_STRING;
288
+ }
289
+
290
+ assembly {
291
+ // allocate free memory
292
+ let versionString := mload(0x40)
293
+ // shift free memory pointer by one slot
294
+ mstore(0x40, add(mload(0x40), 0x20))
295
+ // copy the 32-byte version string of the bytecode library to memory
296
+ // note: this relies on the assumption noted at the top-level of
297
+ // this file that the storage layout for the deployed
298
+ // contracts-as-storage contract looks like:
299
+ // | invalid opcode | version-string (unless v0) | deployer-address (padded) | data |
300
+ extcodecopy(
301
+ _address,
302
+ versionString,
303
+ VERSION_OFFSET,
304
+ 0x20 // 32-byte version string
305
+ )
306
+ // note: must check against literal strings, as Yul does not allow for
307
+ // dynamic strings in switch statements.
308
+ switch mload(versionString)
309
+ case "BytecodeStorage_V1.0.0_________ " {
310
+ version := V1_VERSION_STRING
311
+ }
312
+ case 0x2060486000396000513314601057fe5b60013614601957fe5b6000357fff0000 {
313
+ // the v0 variant of this library pre-dates formal versioning w/ version strings,
314
+ // so we check the first 32 bytes of the execution bytecode itself which
315
+ // is static and known across all storage contracts deployed with the first version
316
+ // of this library.
317
+ version := V0_VERSION_STRING
318
+ }
319
+ default {
320
+ version := UNKNOWN_VERSION_STRING
321
+ }
322
+ }
323
+ }
324
+ }
325
+
326
+ /**
327
+ * @title Art Blocks Script Storage Library (Internal, Writes)
328
+ * @author Art Blocks Inc.
329
+ * @notice The internal library for writing to storage contracts. This library is intended to be deployed
330
+ * within library client contracts that use this library to perform _write_ operations on storage.
331
+ */
332
+ library BytecodeStorageWriter {
333
+ /*//////////////////////////////////////////////////////////////
334
+ WRITE LOGIC
335
+ //////////////////////////////////////////////////////////////*/
336
+
337
+ /**
338
+ * @notice Write a string to contract bytecode
339
+ * @param _data string to be written to contract. No input validation is performed on this parameter.
340
+ * @param address_ address of deployed contract with bytecode stored in the V0 or V1 format
341
+ */
342
+ function writeToBytecode(
343
+ string memory _data
344
+ ) internal returns (address address_) {
345
+ // prefix bytecode with
346
+ bytes memory creationCode = abi.encodePacked(
347
+ //---------------------------------------------------------------------------------------------------------------//
348
+ // Opcode | Opcode + Arguments | Description | Stack View //
349
+ //---------------------------------------------------------------------------------------------------------------//
350
+ // a.) creation code returns all code in the contract except for the first 11 (0B in hex) bytes, as these 11
351
+ // bytes are the creation code itself which we do not want to store in the deployed storage contract result
352
+ //---------------------------------------------------------------------------------------------------------------//
353
+ // 0x60 | 0x60_0B | PUSH1 11 | codeOffset //
354
+ // 0x59 | 0x59 | MSIZE | 0 codeOffset //
355
+ // 0x81 | 0x81 | DUP2 | codeOffset 0 codeOffset //
356
+ // 0x38 | 0x38 | CODESIZE | codeSize codeOffset 0 codeOffset //
357
+ // 0x03 | 0x03 | SUB | (codeSize - codeOffset) 0 codeOffset //
358
+ // 0x80 | 0x80 | DUP | (codeSize - codeOffset) (codeSize - codeOffset) 0 codeOffset //
359
+ // 0x92 | 0x92 | SWAP3 | codeOffset (codeSize - codeOffset) 0 (codeSize - codeOffset) //
360
+ // 0x59 | 0x59 | MSIZE | 0 codeOffset (codeSize - codeOffset) 0 (codeSize - codeOffset) //
361
+ // 0x39 | 0x39 | CODECOPY | 0 (codeSize - codeOffset) //
362
+ // 0xF3 | 0xF3 | RETURN | //
363
+ //---------------------------------------------------------------------------------------------------------------//
364
+ // (11 bytes)
365
+ hex"60_0B_59_81_38_03_80_92_59_39_F3",
366
+ //---------------------------------------------------------------------------------------------------------------//
367
+ // b.) ensure that the deployed storage contract is non-executeable (first opcode is the `invalid` opcode)
368
+ //---------------------------------------------------------------------------------------------------------------//
369
+ //---------------------------------------------------------------------------------------------------------------//
370
+ // 0xFE | 0xFE | INVALID | //
371
+ //---------------------------------------------------------------------------------------------------------------//
372
+ // (1 byte)
373
+ hex"FE",
374
+ //---------------------------------------------------------------------------------------------------------------//
375
+ // c.) store the version string, which is already represented as a 32-byte value
376
+ //---------------------------------------------------------------------------------------------------------------//
377
+ // (32 bytes)
378
+ BytecodeStorageReader.CURRENT_VERSION,
379
+ //---------------------------------------------------------------------------------------------------------------//
380
+ // d.) store the deploying-contract's address with 0-padding to fit a 20-byte address into a 32-byte slot
381
+ //---------------------------------------------------------------------------------------------------------------//
382
+ // (12 bytes)
383
+ hex"00_00_00_00_00_00_00_00_00_00_00_00",
384
+ // (20 bytes)
385
+ address(this),
386
+ // uploaded data (stored as bytecode) comes last
387
+ _data
388
+ );
389
+
390
+ assembly {
391
+ // deploy a new contract with the generated creation code.
392
+ // start 32 bytes into creationCode to avoid copying the byte length.
393
+ address_ := create(0, add(creationCode, 0x20), mload(creationCode))
394
+ }
395
+
396
+ // address must be non-zero if contract was deployed successfully
397
+ require(address_ != address(0), "ContractAsStorage: Write Error");
398
+ }
399
+ }