@artblocks/contracts 1.0.4 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/README.md +75 -7
  2. package/artifacts/contracts/AdminACLV0.sol/AdminACLV0.json +2 -2
  3. package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
  4. package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +336 -131
  5. package/artifacts/contracts/archive/GenArt721CoreV3.sol/GenArt721CoreV3.json +2047 -0
  6. package/artifacts/contracts/archive/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +2021 -0
  7. package/artifacts/contracts/{minter-suite → archive/minter-suite}/Minters/MinterBase_v0_1_1.sol/MinterBase.json +1 -1
  8. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
  9. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
  10. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExp}/MinterDAExpV4.sol/MinterDAExpV4.json +3 -3
  11. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  12. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  13. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +1109 -0
  14. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
  15. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
  16. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDALin}/MinterDALinV4.sol/MinterDALinV4.json +3 -3
  17. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
  18. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
  19. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
  20. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterHolder}/MinterHolderV4.sol/MinterHolderV4.json +3 -3
  21. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
  22. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
  23. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
  24. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
  25. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterMerkle}/MinterMerkleV5.sol/MinterMerkleV5.json +3 -3
  26. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +31 -63
  27. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol/MinterPolyptychV0.json +3 -3
  28. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSEA}/MinterSEAV0.sol/MinterSEAV0.json +3 -3
  29. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  30. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  31. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPrice}/MinterSetPriceV4.sol/MinterSetPriceV4.json +3 -3
  32. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol/MinterSetPriceERC20V0.json +65 -2
  33. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol/MinterSetPriceERC20V1.json +65 -2
  34. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  35. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  36. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +807 -0
  37. package/artifacts/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol/GenArt721MinterBurner_PBAB.json +65 -2
  38. package/artifacts/contracts/engine/V2/GenArt721Minter_PBAB.sol/GenArt721Minter_PBAB.json +65 -2
  39. package/artifacts/contracts/engine/V3/EngineFactoryV0.sol/EngineFactoryV0.json +606 -0
  40. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +565 -209
  41. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +785 -227
  42. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +40 -15
  43. package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +2 -2
  44. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +40 -15
  45. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +36 -68
  46. package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +12 -12
  47. package/artifacts/contracts/interfaces/v0.8.x/IAdminACLV0_Extended.sol/IAdminACLV0_Extended.json +140 -0
  48. package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol/IBytecodeStorageReaderV2.json +130 -0
  49. package/artifacts/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol/ICoreRegistryV1.json +6 -6
  50. package/artifacts/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +71 -39
  51. package/artifacts/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol/IEngineFactoryV0.json +283 -0
  52. package/artifacts/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV0.sol/IFilteredMinterDAExpSettlementV0.json +12 -12
  53. package/artifacts/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV1.sol/IFilteredMinterDAExpSettlementV1.json +12 -12
  54. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +30 -62
  55. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +30 -62
  56. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +170 -104
  57. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +170 -104
  58. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.json +1028 -0
  59. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol/IGenArt721CoreContractV3_Engine_PreV3p2.json +741 -0
  60. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_ProjectFinance.sol/IGenArt721CoreContractV3_ProjectFinance.json +87 -0
  61. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721Minter_PBAB.sol/IGenArt721Minter_PBAB.json +279 -0
  62. package/artifacts/contracts/interfaces/v0.8.x/IMinterFilterV1.sol/IMinterFilterV1.json +22 -22
  63. package/artifacts/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol/IPseudorandomAtomic.json +1 -1
  64. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol/ISharedMinterDAExpSettlementV0.json +26 -101
  65. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol/ISharedMinterDAExpV0.json +1 -57
  66. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol/ISharedMinterDALinV0.json +1 -57
  67. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol/ISharedMinterDAV0.json +2 -21
  68. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol/ISharedMinterHolderERC20V0.json +158 -0
  69. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol/ISharedMinterHolderV0.json +15 -90
  70. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol/ISharedMinterMerkleV0.json +10 -36
  71. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterRAMV0.sol/ISharedMinterRAMV0.json +62 -0
  72. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterRequired.sol/ISharedMinterRequired.json +37 -0
  73. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol/ISharedMinterSEAV0.json +4 -236
  74. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol/ISharedMinterSimplePurchaseV0.json +5 -5
  75. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterV0.sol/ISharedMinterV0.json +7 -423
  76. package/artifacts/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol/ISharedRandomizerV0.json +17 -17
  77. package/artifacts/contracts/interfaces/v0.8.x/ISplitAtomicFactoryV0.sol/ISplitAtomicFactoryV0.json +170 -0
  78. package/artifacts/contracts/interfaces/v0.8.x/ISplitAtomicV0.sol/ISplitAtomicV0.json +126 -0
  79. package/artifacts/contracts/interfaces/v0.8.x/ISplitProviderV0.sol/ISplitProviderV0.json +98 -0
  80. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/splits-0x-v2/ISplitFactoryV2.sol/ISplitFactoryV2.json +123 -0
  81. package/artifacts/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol/DelegationRegistry.json +2 -2
  82. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeMock.sol/GnosisSafeMock.json +2 -2
  83. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeProxyFactoryMock.sol/GnosisSafeProxyFactoryMock.json +2 -2
  84. package/artifacts/contracts/libs/integration-refs/gnosis-safe/MultiSendMock.sol/MultiSendMock.json +2 -2
  85. package/artifacts/contracts/libs/integration-refs/weth9/weth9.sol/WETH9_.json +2 -2
  86. package/artifacts/contracts/libs/v0.8.x/ABHelpers.sol/ABHelpers.json +2 -2
  87. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +2 -2
  88. package/artifacts/contracts/libs/v0.8.x/BitMap.sol/BitMaps256.json +10 -0
  89. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV0.sol/BytecodeStorage.json +2 -2
  90. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageReader.json +2 -2
  91. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageWriter.json +2 -2
  92. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageReader.json +214 -0
  93. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageWriter.json +10 -0
  94. package/artifacts/contracts/libs/v0.8.x/Bytes32Strings.sol/Bytes32Strings.json +2 -2
  95. package/artifacts/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol/DependencyRegistryStorageLib.json +10 -0
  96. package/artifacts/contracts/libs/v0.8.x/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +2 -2
  97. package/artifacts/contracts/libs/v0.8.x/ERC721_PackedHashSeedV1.sol/ERC721_PackedHashSeedV1.json +444 -0
  98. package/artifacts/contracts/libs/v0.8.x/PackedBools.sol/PackedBools.json +10 -0
  99. package/artifacts/contracts/libs/v0.8.x/SSTORE2.sol/SSTORE2.json +2 -2
  100. package/artifacts/contracts/libs/v0.8.x/V3FlexLib.sol/V3FlexLib.json +208 -0
  101. package/artifacts/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol/DAExpLib.json +60 -3
  102. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALib.sol/DALib.json +30 -0
  103. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +60 -3
  104. package/artifacts/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol/GenericMinterEventsLib.json +346 -0
  105. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +29 -3
  106. package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +30 -3
  107. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +2 -2
  108. package/artifacts/contracts/libs/v0.8.x/minter-libs/RAMLib.sol/RAMLib.json +398 -0
  109. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +254 -3
  110. package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +48 -3
  111. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +41 -3
  112. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +35 -3
  113. package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +79 -3
  114. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  115. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +41 -41
  116. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +66 -632
  117. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +67 -594
  118. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +33 -524
  119. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +66 -632
  120. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +33 -524
  121. package/artifacts/contracts/minter-suite/Minters/MinterRAMV0.sol/MinterRAMV0.json +1374 -0
  122. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +56 -722
  123. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +58 -454
  124. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +61 -552
  125. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +55 -497
  126. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +110 -571
  127. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +69 -560
  128. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +28 -444
  129. package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol/MinterSetPriceV5_SingleCore.json +417 -0
  130. package/artifacts/contracts/mock/BytecodeV2LibCallsMock.sol/BytecodeV2LibCallsMock.json +154 -0
  131. package/artifacts/contracts/mock/BytecodeV2TextCR_DMock.sol/BytecodeV2TextCR_DMock.json +428 -0
  132. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
  133. package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +2 -2
  134. package/artifacts/contracts/mock/ForceSendMock.sol/ForceSendMock.json +24 -0
  135. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +4 -9
  136. package/artifacts/contracts/mock/Mock0xSplitsV2PullFactory.sol/Mock0xSplitsV2PullFactory.json +149 -0
  137. package/artifacts/contracts/mock/Mock0xSplitsV2Splitter.sol/Mock0xSplitsV2Splitter.json +99 -0
  138. package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +20 -2
  139. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +20 -2
  140. package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +2 -2
  141. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  142. package/artifacts/contracts/mock/ReentrancyGenArt721MinterMock.sol/ReentrancyGenArt721MinterMock.json +100 -0
  143. package/artifacts/contracts/mock/ReentrancyHolderMock.sol/ReentrancyHolderMock.json +2 -2
  144. package/artifacts/contracts/mock/ReentrancyHolderMockShared.sol/ReentrancyHolderMockShared.json +136 -0
  145. package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
  146. package/artifacts/contracts/mock/ReentrancyMerkleMockShared.sol/ReentrancyMerkleMockShared.json +105 -0
  147. package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
  148. package/artifacts/contracts/mock/ReentrancyMockShared.sol/ReentrancyMockShared.json +100 -0
  149. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +2 -2
  150. package/artifacts/contracts/mock/ReentrancySEAMockShared.sol/ReentrancySEAAutoBidderMockShared.json +69 -0
  151. package/artifacts/contracts/mock/ReentrancySplitterMocks.sol/ReentrancySplitterDrainETHMock.json +54 -0
  152. package/artifacts/contracts/mock/ReentrancySplitterMocks.sol/ReentrancySplitterSendETHMock.json +54 -0
  153. package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +2 -2
  154. package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +2 -2
  155. package/artifacts/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol/PseudorandomAtomic.json +2 -2
  156. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +19 -19
  157. package/artifacts/contracts/split/SplitAtomicFactoryV0.sol/SplitAtomicFactoryV0.json +203 -0
  158. package/artifacts/contracts/split/SplitAtomicV0.sol/SplitAtomicV0.json +168 -0
  159. package/artifacts/contracts/split/split-provider/SplitProviderV0.sol/SplitProviderV0.json +141 -0
  160. package/contracts/AdminACLV0.sol +6 -2
  161. package/contracts/AdminACLV1.sol +2 -2
  162. package/contracts/DependencyRegistryV0.sol +737 -390
  163. package/contracts/{GenArt721CoreV3.sol → archive/GenArt721CoreV3.sol} +56 -20
  164. package/contracts/{explorations → archive}/GenArt721CoreV3_Explorations.sol +49 -13
  165. package/contracts/{minter-suite → archive/minter-suite}/Minters/MinterBase_v0_1_1.sol +4 -4
  166. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExp}/MinterDAExpV4.sol +4 -4
  167. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +4 -4
  168. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol +5 -5
  169. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExpSettlement}/MinterDAExpSettlementV2.sol +9 -62
  170. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDALin}/MinterDALinV4.sol +4 -4
  171. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterHolder}/MinterHolderV4.sol +5 -5
  172. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterMerkle}/MinterMerkleV5.sol +5 -5
  173. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol +7 -7
  174. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSEA}/MinterSEAV0.sol +13 -13
  175. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPrice}/MinterSetPriceV4.sol +4 -4
  176. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol +82 -10
  177. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol +82 -10
  178. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPriceERC20}/MinterSetPriceERC20V4.sol +88 -21
  179. package/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol +81 -22
  180. package/contracts/engine/V2/GenArt721Minter_PBAB.sol +80 -22
  181. package/contracts/engine/V3/EngineFactoryV0.sol +419 -0
  182. package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +893 -493
  183. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +1053 -655
  184. package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +7 -13
  185. package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +5 -11
  186. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +2 -2
  187. package/contracts/engine-registry/CoreRegistryV1.sol +58 -65
  188. package/contracts/interfaces/v0.8.x/IAdminACLV0_Extended.sol +20 -0
  189. package/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol +23 -0
  190. package/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol +6 -8
  191. package/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol +48 -43
  192. package/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol +124 -0
  193. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV0.sol +1 -3
  194. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV1.sol +1 -3
  195. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpV1.sol +1 -3
  196. package/contracts/interfaces/v0.8.x/IFilteredMinterDALinV1.sol +1 -3
  197. package/contracts/interfaces/v0.8.x/IFilteredMinterHolderV2.sol +1 -3
  198. package/contracts/interfaces/v0.8.x/IFilteredMinterMerkleV2.sol +1 -3
  199. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol +115 -11
  200. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol +84 -8
  201. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol +26 -8
  202. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol +141 -0
  203. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol +78 -0
  204. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_ProjectFinance.sol +47 -0
  205. package/contracts/interfaces/v0.8.x/IGenArt721Minter_PBAB.sol +91 -0
  206. package/contracts/interfaces/v0.8.x/IMinterFilterV1.sol +25 -25
  207. package/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol +1 -3
  208. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +30 -20
  209. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol +1 -14
  210. package/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol +1 -15
  211. package/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol +2 -8
  212. package/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol +47 -0
  213. package/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol +15 -43
  214. package/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol +10 -20
  215. package/contracts/interfaces/v0.8.x/ISharedMinterRAMV0.sol +23 -0
  216. package/contracts/interfaces/v0.8.x/ISharedMinterRequired.sol +20 -0
  217. package/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol +1 -67
  218. package/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol +5 -5
  219. package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +18 -160
  220. package/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol +37 -37
  221. package/contracts/interfaces/v0.8.x/ISplitAtomicFactoryV0.sol +81 -0
  222. package/contracts/interfaces/v0.8.x/ISplitAtomicV0.sol +72 -0
  223. package/contracts/interfaces/v0.8.x/ISplitProviderV0.sol +49 -0
  224. package/contracts/interfaces/v0.8.x/integration-refs/splits-0x-v2/ISplitFactoryV2.sol +62 -0
  225. package/contracts/libs/v0.8.x/ABHelpers.sol +31 -17
  226. package/contracts/libs/v0.8.x/AuthLib.sol +101 -102
  227. package/contracts/libs/v0.8.x/BitMap.sol +112 -0
  228. package/contracts/libs/v0.8.x/BytecodeStorageV2.sol +593 -0
  229. package/contracts/libs/v0.8.x/Bytes32Strings.sol +5 -5
  230. package/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol +90 -0
  231. package/contracts/libs/v0.8.x/ERC721_PackedHashSeedV1.sol +591 -0
  232. package/contracts/libs/v0.8.x/PackedBools.sol +42 -0
  233. package/contracts/libs/v0.8.x/V3FlexLib.sol +591 -0
  234. package/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol +162 -39
  235. package/contracts/libs/v0.8.x/minter-libs/DALib.sol +26 -0
  236. package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +139 -37
  237. package/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol +171 -0
  238. package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +299 -158
  239. package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +268 -55
  240. package/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol +138 -58
  241. package/contracts/libs/v0.8.x/minter-libs/RAMLib.sol +2927 -0
  242. package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +796 -123
  243. package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +131 -13
  244. package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +607 -224
  245. package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +494 -330
  246. package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +217 -78
  247. package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +358 -309
  248. package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +391 -491
  249. package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +396 -632
  250. package/contracts/minter-suite/Minters/MinterDAExpV5.sol +212 -273
  251. package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +393 -488
  252. package/contracts/minter-suite/Minters/MinterDALinV5.sol +220 -277
  253. package/contracts/minter-suite/Minters/MinterRAMV0.sol +1205 -0
  254. package/contracts/minter-suite/Minters/MinterSEAV1.sol +329 -677
  255. package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +287 -303
  256. package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +355 -446
  257. package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +328 -416
  258. package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +552 -622
  259. package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +429 -553
  260. package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +180 -227
  261. package/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol +446 -0
  262. package/contracts/mock/BytecodeV2LibCallsMock.sol +128 -0
  263. package/contracts/mock/BytecodeV2TextCR_DMock.sol +316 -0
  264. package/contracts/mock/ForceSendMock.sol +22 -0
  265. package/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol +3 -10
  266. package/contracts/mock/Mock0xSplitsV2PullFactory.sol +75 -0
  267. package/contracts/mock/Mock0xSplitsV2Splitter.sol +47 -0
  268. package/contracts/mock/MockAdminACLV0.sol +21 -0
  269. package/contracts/mock/MockAdminACLV0_PROHIBITION.sol +21 -0
  270. package/contracts/mock/ReentrancyGenArt721MinterMock.sol +47 -0
  271. package/contracts/mock/ReentrancyHolderMockShared.sol +59 -0
  272. package/contracts/mock/ReentrancyMerkleMockShared.sol +58 -0
  273. package/contracts/mock/ReentrancyMockShared.sol +48 -0
  274. package/contracts/mock/ReentrancySEAMockShared.sol +40 -0
  275. package/contracts/mock/ReentrancySplitterMocks.sol +67 -0
  276. package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +1 -1
  277. package/contracts/randomizer/shared/SharedRandomizerV0.sol +79 -71
  278. package/contracts/split/SplitAtomicFactoryV0.sol +121 -0
  279. package/contracts/split/SplitAtomicV0.sol +265 -0
  280. package/contracts/split/split-provider/SplitProviderV0.sol +201 -0
  281. package/package.json +79 -45
  282. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +0 -1965
  283. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +0 -1939
  284. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +0 -1127
  285. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +0 -768
  286. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +0 -208
  287. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol/GenArt721RoyaltyOverride_PBAB.json +0 -301
  288. package/contracts/royalty-registry/GenArt721RoyaltyOverride.sol +0 -168
  289. package/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol +0 -221
@@ -0,0 +1,265 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ // @dev fixed to specific solidity version for clarity and for more clear
5
+ // source code verification purposes.
6
+ pragma solidity 0.8.22;
7
+
8
+ import {ISplitAtomicV0, Split} from "../interfaces/v0.8.x/ISplitAtomicV0.sol";
9
+
10
+ import {IERC20} from "@openzeppelin-5.0/contracts/token/ERC20/IERC20.sol";
11
+ import {SafeERC20} from "@openzeppelin-5.0/contracts/token/ERC20/utils/SafeERC20.sol";
12
+
13
+ /**
14
+ * @title SplitAtomicV0
15
+ * @author Art Blocks Inc.
16
+ * @notice This contract splits received funds according to the configured
17
+ * `splits`, which are immutably configured at initialization time.
18
+ * Each split is defined as a `recipient` address and a `basisPoints` value.
19
+ * The total of all `basisPoints` values must add up to 10_000 (100%), which
20
+ * is verified at initialization time. All splits must be non-zero.
21
+ *
22
+ * When the contract receives funds, it splits the funds according to the
23
+ * configured `splits`. The contract can also manually split any funds that
24
+ * were sent outside of the `receive` function via the `drainETH` function.
25
+ * Additionally, a `drainERC20` function is provided to split any ERC20 tokens
26
+ * that were sent to the contract.
27
+ *
28
+ * There may be a small amount of funds left behind when splitting funds, due
29
+ * to integer division rounding down. This is conservatively safe (will always
30
+ * run a split), but may leave a small amount of funds behind (e.g. a few wei).
31
+ * The small amount of funds left behind can always be drained later, but
32
+ * likely never worth the gas.
33
+ */
34
+ contract SplitAtomicV0 is ISplitAtomicV0 {
35
+ // simplified, initializable reentrancy guard
36
+ uint256 private constant _NOT_ENTERED = 1;
37
+ uint256 private constant _ENTERED = 2;
38
+ uint256 private constant _NOT_INITIALIZED = 0;
39
+ uint256 private _status; // initial value: _NOT_INITIALIZED (0)
40
+
41
+ // public type
42
+ bytes32 public constant type_ = "SplitAtomicV0";
43
+
44
+ // private array of Splits
45
+ Split[] private _splits;
46
+
47
+ /**
48
+ * @dev Prevents contract from calling itself, directly or indirectly.
49
+ * Calling a `nonReentrant` function from another `nonReentrant`
50
+ * function is not supported. It is possible to prevent this from happening
51
+ * by making the `nonReentrant` function external, and making it call a
52
+ * `private` function that does the actual work.
53
+ * @dev prefer to use modifier here due to wrapped function behavior
54
+ */
55
+ modifier nonReentrant() {
56
+ _nonReentrantBefore();
57
+ _;
58
+ _nonReentrantAfter();
59
+ }
60
+
61
+ /**
62
+ * @notice receive function splits received funds according to the
63
+ * configured `splits`.
64
+ * Reverts if contract is not yet initialized.
65
+ * Non-reentrant function.
66
+ * @dev This function automatically splits funds when the native token of a
67
+ * blockchain is sent to the contract. It is important to note that this
68
+ * function uses an unspecified amount of gas, and therefore sending funds
69
+ * to this contract via the deprecated `transfer` method is not supported.
70
+ * @dev This function relies on being non-reentrant for security.
71
+ */
72
+ receive() external payable nonReentrant {
73
+ // split received funds
74
+ // @dev reverts if not already initialized
75
+ _splitETH(msg.value);
76
+ }
77
+
78
+ /**
79
+ * @notice Initializes the contract with the provided `splits`.
80
+ * This function should be called atomically, immediately after deployment.
81
+ * Only callable once.
82
+ * @param splits Splits to configure the contract with. Must add up to
83
+ * 10_000 BPS.
84
+ */
85
+ function initialize(Split[] calldata splits) external {
86
+ // initialize reentrancy guard
87
+ // @dev this reverts if already initialized, preventing this function
88
+ // from ever being called more than once
89
+ _reentrancyGuardInit();
90
+ // validate splits
91
+ uint256 totalBasisPoints = 0;
92
+ uint256 splitsLength = splits.length;
93
+ // @dev splits length implicitly checked to be > 0 via totalBasisPoints
94
+ // check after loop
95
+ for (uint256 i; i < splitsLength; ) {
96
+ Split memory split = splits[i];
97
+ uint256 bps = split.basisPoints;
98
+ require(bps > 0 && bps <= 10_000, "Invalid basis points");
99
+ // push the splits to the storage array
100
+ _splits.push(split);
101
+ // track total basis points for totals validation after loop
102
+ // @dev overflow checked automatically in solidity 0.8
103
+ totalBasisPoints += bps;
104
+ // @dev efficient unchecked increment
105
+ unchecked {
106
+ ++i;
107
+ }
108
+ }
109
+ require(totalBasisPoints == 10_000, "Invalid total basis points");
110
+ // emit initialized event
111
+ emit Initialized(type_);
112
+ }
113
+
114
+ /**
115
+ * @notice Drains the contract's balance to the configured `splits`.
116
+ * Reverts if not initialized.
117
+ * @dev This function is useful for draining the contract's balance to the
118
+ * configured `splits` in the event that the contract receives funds via
119
+ * a force-send (e.g. `SELFDESTRUCT` or `SENDALL`) operation.
120
+ * @dev This function relies on being non-reentrant for security.
121
+ */
122
+ function drainETH() external nonReentrant {
123
+ // split contract balance
124
+ uint256 balance = address(this).balance;
125
+ if (balance > 0) {
126
+ // @dev reverts if not initialized
127
+ _splitETH(balance);
128
+ }
129
+ emit DrainedETH();
130
+ }
131
+
132
+ /**
133
+ * @notice Drains the contract's balance of an input ERC20 token to the
134
+ * configured `splits`.
135
+ * Reverts if not initialized
136
+ * @dev This function is useful for draining the contract's balance of an
137
+ * ERC20 token to the configured `splits`. ERC20 tokens are not split upon
138
+ * receiving (due to transfers not always calling a receive hook),
139
+ * therefore this function provides critical functionality for this
140
+ * contract.
141
+ * @dev This function relies on being non-reentrant for security.
142
+ * @param ERC20TokenAddress The address of the ERC20 token to split.
143
+ */
144
+ function drainERC20(address ERC20TokenAddress) external nonReentrant {
145
+ // split contract balance of ERC20 token
146
+ uint256 balance = IERC20(ERC20TokenAddress).balanceOf(address(this));
147
+ if (balance > 0) {
148
+ // @dev reverts if not initialized
149
+ _splitERC20({ERC20TokenAddress: ERC20TokenAddress, value: balance});
150
+ }
151
+ emit DrainedERC20(ERC20TokenAddress);
152
+ }
153
+
154
+ /**
155
+ * @notice Returns the configured `splits`.
156
+ * @return Split[] memory The configured `splits`.
157
+ */
158
+ function getSplits() external view returns (Split[] memory) {
159
+ return _splits;
160
+ }
161
+
162
+ /**
163
+ * @notice Splits the input `valueInWei` of ETH to the configured `splits`.
164
+ * Reverts if any transfers fail. Reverts if called outside of a
165
+ * non-reentrant function. Reverts if not initialized.
166
+ * @param valueInWei The amount of ETH to split.
167
+ */
168
+ function _splitETH(uint256 valueInWei) internal {
169
+ // require only called in the context of a non-reentrant function
170
+ // @dev this provides fault-tolerant behavior for reentrancy guards
171
+ // @dev this also implicitly verifies contract is initialized
172
+ // @dev no cover on next line else banch due to fault-tolerant check
173
+ require(_status == _ENTERED, "only in non-reentrant function");
174
+ // split funds
175
+ uint256 splitsLength = _splits.length;
176
+ for (uint256 i; i < splitsLength; ) {
177
+ Split memory split = _splits[i];
178
+ // @dev overflow checked automatically in solidity 0.8
179
+ // @dev integer division rounds down, which is conservatively safe
180
+ // when splitting funds. Will not run out of funds, but may leave a
181
+ // small amount behind (e.g. a few wei). Can always be drained
182
+ // later, but likely never worth the gas.
183
+ uint256 splitValue = (valueInWei * split.basisPoints) / 10_000;
184
+ // send funds
185
+ (bool success, ) = split.recipient.call{value: splitValue}("");
186
+ require(success, "Payment failed");
187
+ // @dev efficient unchecked increment
188
+ unchecked {
189
+ ++i;
190
+ }
191
+ }
192
+ }
193
+
194
+ /**
195
+ * @notice Splits the input `value` of ERC20 token at `ERC20TokenAddress`
196
+ * to the configured `splits`.
197
+ * Reverts if any transfers fail. Reverts if called outside of a
198
+ * non-reentrant function. Reverts if not initialized.
199
+ * @param ERC20TokenAddress The address of the ERC20 token to split.
200
+ * @param value The amount of the ERC20 token to split.
201
+ */
202
+ function _splitERC20(address ERC20TokenAddress, uint256 value) internal {
203
+ // require only called in the context of a non-reentrant function
204
+ // @dev this provides fault-tolerant behavior for reentrancy guards
205
+ // @dev this also implicitly verifies contract is initialized
206
+ // @dev no cover on next line else banch due to fault-tolerant check
207
+ require(_status == _ENTERED, "only in non-reentrant function");
208
+ // split funds
209
+ uint256 splitsLength = _splits.length;
210
+ IERC20 token = IERC20(ERC20TokenAddress);
211
+ for (uint256 i; i < splitsLength; ) {
212
+ Split memory split = _splits[i];
213
+ // @dev overflow checked automatically in solidity 0.8
214
+ // @dev integer division rounds down, which is conservatively safe
215
+ // when splitting funds. Will not run out of funds, but may leave a
216
+ // small amount behind (e.g. a few wei). Can always be drained
217
+ // later, but likely never worth the gas.
218
+ uint256 splitValue = (value * split.basisPoints) / 10_000;
219
+ // transfer ERC20 tokens
220
+ // @dev use SafeERC20 to only revert if ERC20 transfer returns
221
+ // false, not if it returns nothing (which is the behavior of some
222
+ // ERC20 tokens, and we don't want to forever lock those tokens)
223
+ SafeERC20.safeTransfer({
224
+ token: token,
225
+ to: split.recipient,
226
+ value: splitValue
227
+ });
228
+ // @dev efficient unchecked increment
229
+ unchecked {
230
+ ++i;
231
+ }
232
+ }
233
+ }
234
+
235
+ /**
236
+ * @notice Initializes the reentrancy guard. This function will revert if
237
+ * the contract is already initialized.
238
+ */
239
+ function _reentrancyGuardInit() private {
240
+ // require not already initialized
241
+ require(_status == _NOT_INITIALIZED, "Already initialized");
242
+ // set status to not entered
243
+ _status = _NOT_ENTERED;
244
+ }
245
+
246
+ /**
247
+ * @notice Sets the reentrancy guard status to `_ENTERED`.
248
+ * Reverts if the guard is already entered.
249
+ */
250
+ function _nonReentrantBefore() private {
251
+ require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
252
+ // Any calls to nonReentrant after this point will fail
253
+ _status = _ENTERED;
254
+ }
255
+
256
+ /**
257
+ * @notice Sets the reentrancy guard status to `_NOT_ENTERED`, allowing
258
+ * calls to `nonReentrant` functions again.
259
+ */
260
+ function _nonReentrantAfter() private {
261
+ // By storing the original value once again, a refund is triggered (see
262
+ // https://eips.ethereum.org/EIPS/eip-2200)
263
+ _status = _NOT_ENTERED;
264
+ }
265
+ }
@@ -0,0 +1,201 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ pragma solidity 0.8.22;
5
+
6
+ import {ISplitProviderV0} from "../../interfaces/v0.8.x/ISplitProviderV0.sol";
7
+ import {ISplitFactoryV2} from "../../interfaces/v0.8.x/integration-refs/splits-0x-v2/ISplitFactoryV2.sol";
8
+
9
+ import {ERC165} from "@openzeppelin-5.0/contracts/utils/introspection/ERC165.sol";
10
+
11
+ /**
12
+ * @title SplitProviderV0
13
+ * @author Art Blocks Inc.
14
+ * @notice Split Provider to get or create immutable split contracts.
15
+ * This version of SplitProvider integrates with 0xSplits v2 to provide
16
+ * immutable split contracts.
17
+ * This contract is permissionless and does not have an owner. It is intended
18
+ * to be used by other contracts to create immutable split contracts, while
19
+ * adding a layer of abstraction to reduce the complexity of interacting with
20
+ * 0xSplits v2 directly, as well as to enable future migration paths to new
21
+ * upgrades.
22
+ * ----------------------------------------------------------------------------
23
+ * All split contracts will be created with the following properties:
24
+ * - The split contract will be immutable.
25
+ * - The split contract will be created with the provided split parameters.
26
+ * - The split contract includes zero distribution incentive.
27
+ * - The split contract will be created at a deterministic address, given the
28
+ * input split parameters and contract calling this contract (as well as the
29
+ * third party 0xSplits SplitFactoryV2 address).
30
+ */
31
+ contract SplitProviderV0 is ISplitProviderV0, ERC165 {
32
+ bytes32 private constant _TYPE = "SplitProviderV0";
33
+
34
+ // 0xSplits SplitFactoryV2 address immutably configured on this contract
35
+ ISplitFactoryV2 private immutable _splitFactoryV2;
36
+
37
+ /**
38
+ * @notice Construct a new SplitProviderV0 contract.
39
+ * @param splitFactoryV2Address The immutable 0xSplits SplitFactoryV2 address.
40
+ */
41
+ constructor(ISplitFactoryV2 splitFactoryV2Address) {
42
+ _splitFactoryV2 = ISplitFactoryV2(splitFactoryV2Address);
43
+ }
44
+
45
+ /**
46
+ * @notice Gets or creates an immutable splitter contract at a deterministic address.
47
+ * Splits in the splitter contract are determined by the input split parameters,
48
+ * so we can safely create the splitter contract at a deterministic address (or use
49
+ * the existing splitter contract if it already exists at that address).
50
+ * Returns null address if no royalties are due.
51
+ * @dev Uses the 0xSplits v2 implementation to create a splitter contract
52
+ * @dev Intentionally unpermissioned; no owner required; all created splits
53
+ * are immutable and deterministic
54
+ * @param splitInputs The split input parameters.
55
+ * @return splitter The newly created splitter contract address.
56
+ */
57
+ function getOrCreateSplitter(
58
+ SplitInputs calldata splitInputs
59
+ ) external override returns (address) {
60
+ // edge case: no royalties due; return zero address
61
+ if (
62
+ splitInputs.artistTotalRoyaltyPercentage +
63
+ splitInputs.renderProviderSecondarySalesBPS +
64
+ splitInputs.platformProviderSecondarySalesBPS ==
65
+ 0
66
+ ) {
67
+ return address(0);
68
+ }
69
+ // create Split struct from SplitInputs
70
+ ISplitFactoryV2.Split memory splitParams = _getSplitParams({
71
+ splitInputs: splitInputs
72
+ });
73
+ // use sender as salt to ensure unique splitters across contracts/partners for accounting
74
+ bytes32 salt = bytes32(bytes20(msg.sender));
75
+ // determine if splitter already exists
76
+ (address splitter, bool exists) = _splitFactoryV2.isDeployed({
77
+ _splitParams: splitParams,
78
+ _owner: address(0), // no owner, immutable,
79
+ _salt: salt
80
+ });
81
+ if (!exists) {
82
+ // create new splitter contract
83
+ // @dev no need to re-assign returned address; isDeployed already populated it
84
+ _splitFactoryV2.createSplitDeterministic({
85
+ _splitParams: splitParams,
86
+ _owner: address(0), // no owner, immutable
87
+ _creator: address(this),
88
+ _salt: salt
89
+ });
90
+
91
+ // emit event for new splitter creation
92
+ emit SplitterCreated({splitter: splitter});
93
+ }
94
+
95
+ return splitter;
96
+ }
97
+
98
+ /**
99
+ * @notice Get the immutable 0xSplits SplitFactoryV2 address used by this SplitProviderV0.
100
+ * @return splitFactoryV2 The 0xSplits SplitFactoryV2 address.
101
+ */
102
+ function getSplitFactoryV2() external view returns (ISplitFactoryV2) {
103
+ return _splitFactoryV2;
104
+ }
105
+
106
+ /**
107
+ * @dev See {IERC165-supportsInterface}.
108
+ */
109
+ function supportsInterface(
110
+ bytes4 interfaceId
111
+ ) public view override returns (bool) {
112
+ // broadcast support of the getOrCreateSplitter function
113
+ // @dev intentionally only including getOrCreateSplitter, as that is the only function
114
+ // that is intended to be used for on-chain integration (type_ is for indexing and introspection only)
115
+ return
116
+ interfaceId == this.getOrCreateSplitter.selector ||
117
+ super.supportsInterface(interfaceId);
118
+ }
119
+
120
+ /**
121
+ * @notice Indicates the type of the contract, e.g. `SplitProviderV0`.
122
+ * @return type_ The type of the contract.
123
+ */
124
+ function type_() external pure returns (bytes32) {
125
+ return _TYPE;
126
+ }
127
+
128
+ /**
129
+ * Converts the split inputs to the split parameters used by 0xSplits V2.
130
+ * This function assumes there is at least one party with a non-zero allocation,
131
+ * and should not be called if there are no royalties due.
132
+ * @param splitInputs The split input parameters.
133
+ * @return splitParams The split parameters in the form used by 0xSplits V2.
134
+ */
135
+ function _getSplitParams(
136
+ SplitInputs calldata splitInputs
137
+ ) private pure returns (ISplitFactoryV2.Split memory splitParams) {
138
+ // define allocations in BPS to avoid any rounding errors
139
+ uint256 artistAndAdditionalRoyaltyPercentage = splitInputs
140
+ .artistTotalRoyaltyPercentage;
141
+ uint256 artistAndAdditionalRoyaltyBPS = 100 *
142
+ artistAndAdditionalRoyaltyPercentage;
143
+ // load render provider royalty BPS
144
+ uint256 renderProviderRoyaltyBPS = splitInputs
145
+ .renderProviderSecondarySalesBPS;
146
+ // load platform provider royalty BPS
147
+ uint256 platformProviderRoyaltyBPS = splitInputs
148
+ .platformProviderSecondarySalesBPS;
149
+
150
+ bool artistNonZero = artistAndAdditionalRoyaltyPercentage > 0 &&
151
+ splitInputs.additionalPayeePercentage < 100;
152
+ bool additionalPayeeNonZero = artistAndAdditionalRoyaltyPercentage >
153
+ 0 &&
154
+ splitInputs.additionalPayeePercentage > 0;
155
+ bool renderNonZero = renderProviderRoyaltyBPS > 0;
156
+ bool platformNonZero = platformProviderRoyaltyBPS > 0;
157
+
158
+ // allocate memory for splitParams arrays
159
+ uint256 partyLength = (artistNonZero ? 1 : 0) +
160
+ (additionalPayeeNonZero ? 1 : 0) +
161
+ (renderNonZero ? 1 : 0) +
162
+ (platformNonZero ? 1 : 0);
163
+ splitParams.recipients = new address[](partyLength);
164
+ splitParams.allocations = new uint256[](partyLength);
165
+ splitParams.totalAllocation =
166
+ artistAndAdditionalRoyaltyBPS +
167
+ renderProviderRoyaltyBPS +
168
+ platformProviderRoyaltyBPS;
169
+
170
+ // populate each party's split
171
+ uint256 currentIndex = 0;
172
+ if (artistNonZero) {
173
+ splitParams.recipients[currentIndex] = splitInputs.artist;
174
+ // @dev percent * 100 converts to BPS
175
+ splitParams.allocations[currentIndex++] =
176
+ artistAndAdditionalRoyaltyPercentage *
177
+ (100 - splitInputs.additionalPayeePercentage);
178
+ }
179
+ if (additionalPayeeNonZero) {
180
+ splitParams.recipients[currentIndex] = splitInputs.additionalPayee;
181
+ // @dev percent * 100 converts to BPS
182
+ splitParams.allocations[currentIndex++] =
183
+ artistAndAdditionalRoyaltyPercentage *
184
+ splitInputs.additionalPayeePercentage;
185
+ }
186
+ if (renderNonZero) {
187
+ splitParams.recipients[currentIndex] = splitInputs
188
+ .renderProviderSecondarySalesAddress;
189
+ splitParams.allocations[currentIndex++] = renderProviderRoyaltyBPS;
190
+ }
191
+ if (platformNonZero) {
192
+ splitParams.recipients[currentIndex] = splitInputs
193
+ .platformProviderSecondarySalesAddress;
194
+ splitParams.allocations[
195
+ currentIndex // no need to increment, last element
196
+ ] = platformProviderRoyaltyBPS;
197
+ }
198
+
199
+ // @dev leave distribution incentive as zero on all splits
200
+ }
201
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@artblocks/contracts",
3
- "version": "1.0.4",
3
+ "version": "1.2.0",
4
4
  "description": "Smart contracts used by Art Blocks",
5
5
  "files": [
6
6
  "/contracts/**/*.sol",
@@ -20,91 +20,125 @@
20
20
  "lint": "prettier --check 'contracts/**/*.sol' && prettier --check 'scripts/**/*.ts' && prettier --check 'test/**/*.ts' && npx eslint 'test/**/*.ts'",
21
21
  "remix": "remixd -s ./ --remix-ide https://remix.ethereum.org",
22
22
  "codegen": "yarn --cwd=\"../..\" codegen:project contracts",
23
- "deploy:dev:v3-engine": "yarn codegen && yarn require-low-gas goerli && NODE_ENV=dev yarn hardhat run --network goerli scripts/engine/V3/generic-engine-deployer.ts",
24
- "deploy:dev-arbitrum:v3-engine": "yarn codegen && yarn require-low-gas arbitrum-goerli && NODE_ENV=arbitrum-dev yarn hardhat run --network arbitrum-goerli scripts/engine/V3/generic-engine-deployer.ts",
25
- "deploy:staging-arbitrum:v3-engine": "yarn codegen && yarn require-low-gas arbitrum-goerli && NODE_ENV=arbitrum-staging yarn hardhat run --network arbitrum-goerli scripts/engine/V3/generic-engine-deployer.ts",
26
- "deploy:arbitrum:v3-engine": "yarn codegen && yarn require-low-gas arbitrum && NODE_ENV=arbitrum yarn hardhat run --network arbitrum scripts/engine/V3/generic-engine-deployer.ts",
27
- "deploy:staging:v3-engine": "yarn codegen && yarn require-low-gas goerli && NODE_ENV=staging yarn hardhat run --network goerli scripts/engine/V3/generic-engine-deployer.ts",
28
- "deploy:mainnet:v3-engine": "yarn codegen && yarn require-low-gas mainnet && NODE_ENV=mainnet yarn hardhat run --network mainnet scripts/engine/V3/generic-engine-deployer.ts",
29
- "deploy:goerli:minter": "yarn require-low-gas goerli && yarn hardhat run --network goerli scripts/minter-deployments/V3/generic-minter-deployer-v3core.ts",
30
- "deploy:mainnet:minter": "yarn require-low-gas mainnet && yarn hardhat run --network mainnet scripts/minter-deployments/V3/generic-minter-deployer-v3core.ts",
23
+ "get-init-code": "yarn hardhat run --network sepolia scripts/get-init-code.ts",
24
+ "verify": "yarn hardhat run scripts/verify.ts --network",
25
+ "deploy:v3-engine:dev": "yarn codegen && yarn require-low-gas sepolia && NODE_ENV=dev yarn hardhat run --network sepolia scripts/engine/V3/batch-create-engine-contracts.ts",
26
+ "deploy:v3-engine:dev-arbitrum": "yarn codegen && yarn require-low-gas arbitrum-sepolia && NODE_ENV=arbitrum-dev yarn hardhat run --network arbitrum-sepolia scripts/engine/V3/batch-create-engine-contracts.ts",
27
+ "deploy:v3-engine:staging-arbitrum": "yarn codegen && yarn require-low-gas arbitrum-sepolia && NODE_ENV=arbitrum-staging yarn hardhat run --network arbitrum-sepolia scripts/engine/V3/batch-create-engine-contracts.ts",
28
+ "deploy:v3-engine:arbitrum": "yarn codegen && yarn require-low-gas arbitrum && NODE_ENV=arbitrum yarn hardhat run --network arbitrum scripts/engine/V3/batch-create-engine-contracts.ts",
29
+ "deploy:v3-engine:base": "yarn codegen && yarn require-low-gas base && NODE_ENV=base yarn hardhat run --network base scripts/engine/V3/batch-create-engine-contracts.ts",
30
+ "deploy:v3-engine:staging": "yarn codegen && yarn require-low-gas sepolia && NODE_ENV=staging yarn hardhat run --network sepolia scripts/engine/V3/batch-create-engine-contracts.ts",
31
+ "deploy:v3-engine:mainnet": "yarn codegen && yarn require-low-gas mainnet && NODE_ENV=mainnet yarn hardhat run --network mainnet scripts/engine/V3/batch-create-engine-contracts.ts",
32
+ "post-deploy:v3-engine:dev": "yarn codegen && yarn require-low-gas sepolia && NODE_ENV=dev yarn hardhat run --network sepolia scripts/engine/V3/post-batch-create-engine-contracts.ts",
33
+ "post-deploy:v3-engine:dev-arbitrum": "yarn codegen && yarn require-low-gas arbitrum-sepolia && NODE_ENV=arbitrum-dev yarn hardhat run --network arbitrum-sepolia scripts/engine/V3/post-batch-create-engine-contracts.ts",
34
+ "post-deploy:v3-engine:staging-arbitrum": "yarn codegen && yarn require-low-gas arbitrum-sepolia && NODE_ENV=arbitrum-staging yarn hardhat run --network arbitrum-sepolia scripts/engine/V3/post-batch-create-engine-contracts.ts",
35
+ "post-deploy:v3-engine:arbitrum": "yarn codegen && yarn require-low-gas arbitrum && NODE_ENV=arbitrum yarn hardhat run --network arbitrum scripts/engine/V3/post-batch-create-engine-contracts.ts",
36
+ "post-deploy:v3-engine:base": "yarn codegen && yarn require-low-gas base && NODE_ENV=base yarn hardhat run --network base scripts/engine/V3/post-batch-create-engine-contracts.ts",
37
+ "post-deploy:v3-engine:staging": "yarn codegen && yarn require-low-gas sepolia && NODE_ENV=staging yarn hardhat run --network sepolia scripts/engine/V3/post-batch-create-engine-contracts.ts",
38
+ "post-deploy:v3-engine:mainnet": "yarn codegen && yarn require-low-gas mainnet && NODE_ENV=mainnet yarn hardhat run --network mainnet scripts/engine/V3/post-batch-create-engine-contracts.ts",
31
39
  "deploy:shared-randomizer:goerli": "yarn require-low-gas goerli && yarn hardhat run --network goerli scripts/randomizer-deployments/shared-randomizer-deployer.ts",
40
+ "deploy:shared-randomizer:dev-sepolia": "yarn require-low-gas sepolia && NODE_ENV=dev yarn hardhat run --network sepolia scripts/randomizer-deployments/shared-randomizer-deployer.ts",
32
41
  "deploy:shared-randomizer:mainnet": "yarn require-low-gas mainnet && yarn hardhat run --network mainnet scripts/randomizer-deployments/shared-randomizer-deployer.ts",
33
42
  "deploy:shared-randomizer:arbitrum-goerli": "yarn require-low-gas arbitrum-goerli && yarn hardhat run --network arbitrum-goerli scripts/randomizer-deployments/shared-randomizer-deployer.ts",
34
43
  "deploy:shared-randomizer:arbitrum": "yarn require-low-gas arbitrum && yarn hardhat run --network arbitrum scripts/randomizer-deployments/shared-randomizer-deployer.ts",
44
+ "deploy:shared-randomizer:base": "yarn require-low-gas base && yarn hardhat run --network base scripts/randomizer-deployments/shared-randomizer-deployer.ts",
35
45
  "deploy:shared-minter-filter:goerli": "yarn require-low-gas goerli && yarn hardhat run --network goerli scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
46
+ "deploy:shared-minter-filter:dev-sepolia": "yarn require-low-gas sepolia && NODE_ENV=dev yarn hardhat run --network sepolia scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
36
47
  "deploy:shared-minter-filter:mainnet": "yarn require-low-gas mainnet && yarn hardhat run --network mainnet scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
37
48
  "deploy:shared-minter-filter:arbitrum-goerli": "yarn require-low-gas arbitrum-goerli && yarn hardhat run --network arbitrum-goerli scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
38
49
  "deploy:shared-minter-filter:arbitrum": "yarn require-low-gas arbitrum && yarn hardhat run --network arbitrum scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
39
- "deploy:shared-shared-minters:goerli": "yarn require-low-gas goerli && yarn hardhat run --network goerli scripts/minter-deployments/shared-minters-deployer.ts",
40
- "deploy:shared-shared-minters:mainnet": "yarn require-low-gas mainnet && yarn hardhat run --network mainnet scripts/minter-deployments/shared-minters-deployer.ts",
41
- "deploy:shared-shared-minters:arbitrum-goerli": "yarn require-low-gas arbitrum-goerli && yarn hardhat run --network arbitrum-goerli scripts/minter-deployments/shared-minters-deployer.ts",
42
- "deploy:shared-shared-minters:arbitrum": "yarn require-low-gas arbitrum && yarn hardhat run --network arbitrum scripts/minter-deployments/shared-minters-deployer.ts",
50
+ "deploy:shared-minter-filter:base": "yarn require-low-gas base && yarn hardhat run --network base scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
51
+ "deploy:shared-minters:goerli": "yarn require-low-gas goerli && yarn hardhat run --network goerli scripts/minter-deployments/shared-minters-deployer.ts",
52
+ "deploy:shared-minters:sepolia": "yarn require-low-gas sepolia && yarn hardhat run --network sepolia scripts/minter-deployments/shared-minters-deployer.ts",
53
+ "deploy:shared-minters:mainnet": "yarn require-low-gas mainnet && yarn hardhat run --network mainnet scripts/minter-deployments/shared-minters-deployer.ts",
54
+ "deploy:shared-minters:arbitrum-goerli": "yarn require-low-gas arbitrum-goerli && yarn hardhat run --network arbitrum-goerli scripts/minter-deployments/shared-minters-deployer.ts",
55
+ "deploy:shared-minters:arbitrum": "yarn require-low-gas arbitrum && yarn hardhat run --network arbitrum scripts/minter-deployments/shared-minters-deployer.ts",
56
+ "deploy:shared-minters:base": "yarn require-low-gas base && yarn hardhat run --network base scripts/minter-deployments/shared-minters-deployer.ts",
57
+ "deploy:splits-factory:dev": "yarn require-low-gas sepolia && NODE_ENV=dev yarn hardhat run --network sepolia scripts/splits/splits-factory-deployer.ts",
58
+ "deploy:splits-factory:staging": "yarn require-low-gas sepolia && NODE_ENV=staging yarn hardhat run --network sepolia scripts/splits/splits-factory-deployer.ts",
59
+ "deploy:splits-factory:mainnet": "yarn require-low-gas mainnet && NODE_ENV=mainnet yarn hardhat run --network mainnet scripts/splits/splits-factory-deployer.ts",
60
+ "deploy:core-registry:dev-sepolia": "yarn require-low-gas sepolia && NODE_ENV=dev yarn hardhat run --network sepolia scripts/core-registry-deployments/core-registry-deployer.ts",
61
+ "dependency-registry:upload-script:mainnet": "NODE_ENV=mainnet yarn hardhat run --network mainnet ./scripts/propose-add-dependency-script-transactions.ts",
43
62
  "require-low-gas": "yarn hardhat run scripts/require-low-gas.ts --network",
44
- "pre-commit": "yarn lint"
63
+ "pre-commit": "yarn lint",
64
+ "deploy:deprecated:mainnet:v3-engine-shared": "yarn codegen && yarn require-low-gas mainnet && NODE_ENV=mainnet yarn hardhat run --network mainnet scripts/engine/V3/generic-engine-shared-suite-deployer.ts",
65
+ "deploy:deprecated:dev:v3-engine": "yarn codegen && yarn require-low-gas goerli && NODE_ENV=dev yarn hardhat run --network goerli scripts/engine/V3/deprecated/generic-engine-deployer.ts",
66
+ "deploy:deprecated:staging:v3-engine": "yarn codegen && yarn require-low-gas goerli && NODE_ENV=staging yarn hardhat run --network goerli scripts/engine/V3/deprecated/generic-engine-deployer.ts",
67
+ "deploy:deprecated:dev-arbitrum:v3-engine": "yarn codegen && yarn require-low-gas arbitrum-goerli && NODE_ENV=arbitrum-dev yarn hardhat run --network arbitrum-goerli scripts/engine/V3/deprecated/generic-engine-deployer.ts",
68
+ "deploy:deprecated:staging-arbitrum:v3-engine": "yarn codegen && yarn require-low-gas arbitrum-goerli && NODE_ENV=arbitrum-staging yarn hardhat run --network arbitrum-goerli scripts/engine/V3/deprecated/generic-engine-deployer.ts",
69
+ "deploy:deprecated:arbitrum:v3-engine": "yarn codegen && yarn require-low-gas arbitrum && NODE_ENV=arbitrum yarn hardhat run --network arbitrum scripts/engine/V3/deprecated/generic-engine-deployer.ts",
70
+ "deploy:deprecated:mainnet:v3-engine": "yarn codegen && yarn require-low-gas mainnet && NODE_ENV=mainnet yarn hardhat run --network mainnet scripts/engine/V3/deprecated/generic-engine-deployer.ts",
71
+ "deploy:deprecated:goerli:non-shared-minter": "yarn require-low-gas goerli && yarn hardhat run --network goerli scripts/minter-deployments/V3/generic-minter-deployer-v3core.ts",
72
+ "deploy:deprecated:mainnet:non-shared-minter": "yarn require-low-gas mainnet && yarn hardhat run --network mainnet scripts/minter-deployments/V3/generic-minter-deployer-v3core.ts"
45
73
  },
46
74
  "devDependencies": {
47
- "@aws-sdk/client-s3": "^3.398.0",
48
- "@aws-sdk/credential-providers": "^3.398.0",
49
- "@defi-wonderland/smock": "^2.3.5",
75
+ "@aws-sdk/client-s3": "^3.554.0",
76
+ "@aws-sdk/credential-providers": "^3.554.0",
77
+ "@defi-wonderland/smock": "^2.4.0",
50
78
  "@gnosis.pm/safe-contracts": "^1.3.0",
51
79
  "@gnosis.pm/safe-core-sdk": "^2.1.0",
52
80
  "@gnosis.pm/safe-core-sdk-types": "^1.7.0",
53
81
  "@gnosis.pm/safe-ethers-lib": "1.1.0",
54
82
  "@gnosis.pm/safe-service-client": "^1.4.0",
55
- "@nomicfoundation/hardhat-network-helpers": "^1.0.8",
83
+ "@nomicfoundation/hardhat-chai-matchers": "^1.0.0",
84
+ "@nomicfoundation/hardhat-ledger": "^1.0.2",
85
+ "@nomicfoundation/hardhat-network-helpers": "^1.0.10",
56
86
  "@nomiclabs/hardhat-ethers": "^2.2.1",
57
- "@nomiclabs/hardhat-etherscan": "^3.1.4",
58
87
  "@nomiclabs/hardhat-solhint": "^3.0.0",
59
88
  "@nomiclabs/hardhat-truffle5": "^2.0.7",
60
89
  "@nomiclabs/hardhat-waffle": "^2.0.3",
61
90
  "@nomiclabs/hardhat-web3": "^2.0.0",
62
91
  "@openzeppelin/hardhat-upgrades": "^1.28.0",
63
92
  "@openzeppelin/test-helpers": "^0.5.16",
64
- "@remix-project/remixd": "^0.6.17",
65
- "@typechain/ethers-v5": "^11.1.1",
66
- "@types/jest": "^29.5.4",
67
- "@types/mocha": "^10.0.1",
68
- "@types/prompt": "^1.1.5",
69
- "@typescript-eslint/eslint-plugin": "^6.4.1",
70
- "@typescript-eslint/parser": "^6.4.1",
71
- "aws-sdk-client-mock": "^3.0.0",
72
- "chai": "^4.3.7",
93
+ "@safe-global/api-kit": "^1.3.1",
94
+ "@safe-global/protocol-kit": "1.3.0",
95
+ "@safe-global/safe-core-sdk-types": "2.3.0",
96
+ "@remix-project/remixd": "^0.6.30",
97
+ "@typechain/ethers-v5": "^11.1.2",
98
+ "@types/jest": "^29.5.12",
99
+ "@types/mocha": "^10.0.6",
100
+ "@types/prompt": "^1.1.8",
101
+ "@typescript-eslint/eslint-plugin": "^7.6.0",
102
+ "@typescript-eslint/parser": "^7.6.0",
103
+ "aws-sdk-client-mock": "^3.0.1",
104
+ "chai": "^4.3.10",
73
105
  "coveralls": "^3.1.1",
74
- "dotenv": "^16.3.1",
75
- "eslint": "^8.46.0",
106
+ "dotenv": "^16.4.5",
107
+ "eslint": "^8.56.0",
76
108
  "eslint-config-custom": "*",
77
- "eslint-plugin-mocha": "^10.1.0",
78
- "eslint-plugin-prettier": "^5.0.0",
79
- "ethereum-waffle": "^4.0.10",
109
+ "eslint-plugin-mocha": "^10.4.2",
80
110
  "ethers": "^5.7.2",
81
- "hardhat": "^2.17.1",
111
+ "hardhat": "^2.22.2",
82
112
  "hardhat-contract-sizer": "^2.10.0",
83
113
  "hardhat-docgen": "^1.3.0",
84
- "hardhat-gas-reporter": "^1.0.9",
85
- "husky": "^8.0.3",
114
+ "hardhat-gas-reporter": "^2.1.1",
115
+ "husky": "^9.0.11",
86
116
  "istanbul-combine": "^0.3.0",
87
117
  "keccak256": "^1.0.6",
88
- "merkletreejs": "^0.3.9",
89
- "prettier": "^3.0.2",
90
- "prettier-plugin-solidity": "^1.1.1",
118
+ "merkletreejs": "^0.3.11",
119
+ "prettier": "^3.2.5",
120
+ "prettier-plugin-solidity": "^1.3.1",
91
121
  "prompt": "^1.3.0",
92
122
  "prompt-sync": "^4.2.0",
93
- "solidity-coverage": "^0.8.4",
123
+ "readline-sync": "^1.4.10",
124
+ "solidity-coverage": "^0.8.12",
94
125
  "ts-node": "^9.1.1",
95
126
  "tsconfig": "*",
96
- "typechain": "^8.3.1",
97
- "typescript": "^5.2.2"
127
+ "typechain": "^8.3.2",
128
+ "typescript": "^5.4.5"
98
129
  },
99
130
  "author": "Art Blocks, Inc",
100
131
  "license": "LGPL-3.0-only",
101
132
  "dependencies": {
133
+ "@nomicfoundation/hardhat-verify": "^2.0.5",
102
134
  "@openzeppelin-0.5/contracts": "npm:@openzeppelin/contracts@2.5.1",
103
135
  "@openzeppelin-4.5/contracts": "npm:@openzeppelin/contracts@4.5.0",
104
136
  "@openzeppelin-4.7/contracts": "npm:@openzeppelin/contracts@4.7.1",
105
137
  "@openzeppelin-4.8/contracts-upgradeable": "npm:@openzeppelin/contracts-upgradeable@4.8.0",
106
- "@urql/exchange-retry": "^1.2.0",
107
- "graphql": "^16.8.0",
108
- "urql": "^4.0.5"
138
+ "@openzeppelin-5.0/contracts": "npm:@openzeppelin/contracts@5.0.1",
139
+ "@urql/exchange-retry": "^1.2.1",
140
+ "graphql": "^16.8.1",
141
+ "solady": "^0.0.181",
142
+ "urql": "^4.0.7"
109
143
  }
110
144
  }