@artblocks/contracts 1.3.2 → 1.4.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 (229) hide show
  1. package/README.md +11 -10
  2. package/artifacts/contracts/AdminACLV0RoyaltyRegistry.sol/AdminACLV0RoyaltyRegistry.json +193 -0
  3. package/artifacts/contracts/AdminACLV0RoyaltyRegistry.sol/IRoyaltyRegistry.json +35 -0
  4. package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
  5. package/artifacts/contracts/BytecodeStorageReaders/BytecodeStorageReaderContractV2.sol/BytecodeStorageReaderContractV2.json +2 -2
  6. package/artifacts/contracts/BytecodeStorageReaders/BytecodeStorageReaderContractV2_Web3Call.sol/BytecodeStorageReaderContractV2_Web3Call.json +2 -2
  7. package/artifacts/contracts/BytecodeStorageV2Writer.sol/BytecodeStorageV2Writer.json +2 -2
  8. package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +210 -2
  9. package/artifacts/contracts/GenArt721CoreV3_Curated.sol/GenArt721CoreV3_Curated.json +235 -20
  10. package/artifacts/contracts/GenArt721CoreV3_Curated_Flex.sol/GenArt721CoreV3_Curated_Flex.json +3197 -0
  11. package/artifacts/contracts/GenArt721CoreV3_Explorations_Flex.sol/GenArt721CoreV3_Explorations_Flex.json +3192 -0
  12. package/artifacts/contracts/OwnedCreate2FactoryV0.sol/OwnedCreate2FactoryV0.json +2 -2
  13. package/artifacts/contracts/archive/GenArt721CoreV3.sol/GenArt721CoreV3.json +27 -2
  14. package/artifacts/contracts/archive/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +27 -2
  15. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
  16. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
  17. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV4.sol/MinterDAExpV4.json +2 -2
  18. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  19. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  20. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -2
  21. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
  22. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
  23. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV4.sol/MinterDALinV4.json +2 -2
  24. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
  25. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
  26. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
  27. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV4.sol/MinterHolderV4.json +2 -2
  28. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
  29. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
  30. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
  31. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
  32. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV5.sol/MinterMerkleV5.json +2 -2
  33. package/artifacts/contracts/archive/minter-suite/Minters/MinterPolyptych/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +25 -0
  34. package/artifacts/contracts/archive/minter-suite/Minters/MinterPolyptych/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
  35. package/artifacts/contracts/archive/minter-suite/Minters/MinterSEA/MinterSEAV0.sol/MinterSEAV0.json +2 -2
  36. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  37. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  38. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV4.sol/MinterSetPriceV4.json +2 -2
  39. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  40. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  41. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
  42. package/artifacts/contracts/engine/V3/EngineFactoryV0.sol/EngineFactoryV0.json +28 -2
  43. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +239 -20
  44. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +267 -48
  45. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +27 -2
  46. package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +2 -2
  47. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +27 -2
  48. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +25 -0
  49. package/artifacts/contracts/engine/V3/transfer-hooks/AbstractTransferHook.sol/AbstractTransferHook.json +79 -0
  50. package/artifacts/contracts/engine/V3/transfer-hooks/OwnerHistoryTransferHook.sol/OwnerHistoryTransferHook.json +315 -0
  51. package/artifacts/contracts/generator/GenArt721GeneratorV0.sol/GenArt721GeneratorV0.json +2 -2
  52. package/artifacts/contracts/interfaces/v0.8.x/IClaimMinter.sol/IClaimMinter.json +189 -0
  53. package/artifacts/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +149 -0
  54. package/artifacts/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol/IEngineFactoryV0.json +26 -0
  55. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +25 -0
  56. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +25 -0
  57. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +123 -0
  58. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +123 -0
  59. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.json +25 -0
  60. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol/IGenArt721CoreContractV3_Engine_PreV3p2.json +25 -0
  61. package/artifacts/contracts/interfaces/v0.8.x/IOwnerHistoryTransferHook.sol/IOwnerHistoryTransferHook.json +299 -0
  62. package/artifacts/contracts/interfaces/v0.8.x/ISRHooks.sol/ISRHooks.json +432 -0
  63. package/artifacts/contracts/interfaces/v0.8.x/ISeaDropShimForContract.sol/ISeaDropShimForContract.json +0 -13
  64. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterTieredAllowV0.sol/ISharedMinterTieredAllowV0.json +94 -0
  65. package/artifacts/contracts/interfaces/v0.8.x/ITransferHook.sol/ITransferHook.json +63 -0
  66. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +2 -2
  67. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageReader.json +2 -2
  68. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageWriter.json +2 -2
  69. package/artifacts/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol/DependencyRegistryStorageLib.json +2 -2
  70. package/artifacts/contracts/libs/v0.8.x/ENSLib.sol/ENSLib.json +10 -0
  71. package/artifacts/contracts/libs/v0.8.x/ENSLib.sol/IUniversalResolver.json +45 -0
  72. package/artifacts/contracts/libs/v0.8.x/EnumerableSetUint16.sol/EnumerableSetUint16.json +10 -0
  73. package/artifacts/contracts/libs/v0.8.x/FeistelWalkLib.sol/FeistelWalkLib.json +10 -0
  74. package/artifacts/contracts/libs/v0.8.x/ImmutableUint16Array.sol/ImmutableUint16Array.json +10 -0
  75. package/artifacts/contracts/libs/v0.8.x/V3EngineLib.sol/V3EngineLib.json +163 -0
  76. package/artifacts/contracts/libs/v0.8.x/V3FlexLib.sol/V3FlexLib.json +2 -2
  77. package/artifacts/contracts/libs/v0.8.x/V3TransferHookLib.sol/V3TransferHookLib.json +79 -0
  78. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +2 -2
  79. package/artifacts/contracts/libs/v0.8.x/minter-libs/OnChainAllowlistLib.sol/OnChainAllowlistLib.json +10 -0
  80. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +2 -2
  81. package/artifacts/contracts/libs/v0.8.x/minter-libs/RAMLib.sol/RAMLib.json +2 -2
  82. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +2 -2
  83. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +2 -2
  84. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +2 -2
  85. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  86. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +2 -2
  87. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +2 -2
  88. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +2 -2
  89. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +2 -2
  90. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +2 -2
  91. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +2 -2
  92. package/artifacts/contracts/minter-suite/Minters/MinterMinPriceMerkleV0.sol/MinterMinPriceMerkleV0.json +2 -2
  93. package/artifacts/contracts/minter-suite/Minters/MinterMinPriceV0.sol/MinterMinPriceV0.json +2 -2
  94. package/artifacts/contracts/minter-suite/Minters/MinterRAMV0.sol/MinterRAMV0.json +2 -2
  95. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +2 -2
  96. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +2 -2
  97. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +2 -2
  98. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +2 -2
  99. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceOnChainAllowV0.sol/MinterSetPriceOnChainAllowV0.json +522 -0
  100. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +2 -2
  101. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +2 -2
  102. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceTieredAllowV1.sol/MinterSetPriceTieredAllowV1.json +715 -0
  103. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +2 -2
  104. package/artifacts/contracts/minter-suite/Minters/MinterSlidingScaleV0.sol/MinterSlidingScaleV0.json +431 -0
  105. package/artifacts/contracts/minter-suite/Minters/one-off/ClaimMinter.sol/ClaimMinter.json +502 -0
  106. package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceTieredOnChainAllowV0.sol/MinterSetPriceTieredOnChainAllowV0.json +673 -0
  107. package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol/MinterSetPriceV5_SingleCore.json +2 -2
  108. package/artifacts/contracts/minter-suite/Minters/one-off/SeaDropXArtBlocksShim.sol/SeaDropXArtBlocksShim.json +6 -19
  109. package/artifacts/contracts/mock/BytecodeV2TextCR_DMock.sol/BytecodeV2TextCR_DMock.json +2 -2
  110. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
  111. package/artifacts/contracts/mock/ENSLibMock.sol/ENSLibMock.json +30 -0
  112. package/artifacts/contracts/mock/EnumerableSetUint16Mock.sol/EnumerableSetUint16Mock.json +146 -0
  113. package/artifacts/contracts/mock/FeistelWalkLibMock.sol/FeistelWalkLibMock.json +142 -0
  114. package/artifacts/contracts/mock/ForceSendMock.sol/ForceSendMock.json +2 -2
  115. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +2 -2
  116. package/artifacts/contracts/mock/ImmutableUint16ArrayMock.sol/ImmutableUint16ArrayMock.json +89 -0
  117. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +2 -2
  118. package/artifacts/contracts/mock/MockGenArt721V3Core.sol/MockGenArt721V3Core.json +490 -0
  119. package/artifacts/contracts/mock/MockPMP.sol/MockPMP.json +523 -0
  120. package/artifacts/contracts/mock/MockTransferHook.sol/MockTransferHook.json +453 -0
  121. package/artifacts/contracts/mock/MockTransferHookTestHelpers.sol/MockBatchTransferrer.json +39 -0
  122. package/artifacts/contracts/mock/MockTransferHookTestHelpers.sol/MockForwardingERC721Receiver.json +71 -0
  123. package/artifacts/contracts/mock/MockTransferHookTestHelpers.sol/MockSpoofingCore.json +94 -0
  124. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  125. package/artifacts/contracts/mock/ReentrancyBatchMockShared.sol/IBatchMinter.json +64 -0
  126. package/artifacts/contracts/mock/ReentrancyBatchMockShared.sol/ReentrancyBatchMockShared.json +113 -0
  127. package/artifacts/contracts/mock/RelayExecutorTestHelper.sol/MockTarget.json +74 -0
  128. package/artifacts/contracts/mock/RelayExecutorTestHelper.sol/RelayExecutorPartialRevertsTestHelper.json +138 -0
  129. package/artifacts/contracts/mock/RelayExecutorTestHelper.sol/RelayExecutorTestHelper.json +119 -0
  130. package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +2 -2
  131. package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +2 -2
  132. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +2 -2
  133. package/artifacts/contracts/relay/RelayExecutor.sol/RelayExecutor.json +101 -0
  134. package/artifacts/contracts/relay/RelayExecutorPartialReverts.sol/RelayExecutorPartialReverts.json +120 -0
  135. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverrideSplits.sol/GenArt721RoyaltyOverrideSplits.json +263 -0
  136. package/artifacts/contracts/utils/MintMulticallUtil.sol/IMinterSetPriceV5.json +40 -0
  137. package/artifacts/contracts/utils/MintMulticallUtil.sol/MintMulticallUtil.json +163 -0
  138. package/artifacts/contracts/web3call/PMPV0.sol/PMPV0.json +2 -2
  139. package/artifacts/contracts/web3call/PMPV1.sol/PMPV1.json +648 -0
  140. package/artifacts/contracts/web3call/augment-hooks/InjectBaseGasFee.sol/InjectBaseGasFee.json +2 -2
  141. package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeight.sol/InjectBlockHeight.json +83 -0
  142. package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeightAndArtistProjectOverrides.sol/InjectBlockHeightAndArtistProjectOverrides.json +226 -0
  143. package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeightAndNumOwnedProjectTokens.sol/InjectBlockHeightAndNumOwnedProjectTokens.json +182 -0
  144. package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeightProjectInvocationsAndArtistProjectOverrides.sol/InjectBlockHeightProjectInvocationsAndArtistProjectOverrides.json +226 -0
  145. package/artifacts/contracts/web3call/augment-hooks/InjectBlockTimestamp.sol/InjectBlockTimestamp.json +83 -0
  146. package/artifacts/contracts/web3call/augment-hooks/InjectBytesPerToken.sol/InjectBytesPerToken.json +358 -0
  147. package/artifacts/contracts/web3call/augment-hooks/InjectChromieSquiggleFloorPrice.sol/InjectChromieSquiggleFloorPrice.json +2 -2
  148. package/artifacts/contracts/web3call/augment-hooks/InjectIsNounsDaoMember.sol/InjectIsNounsDaoMember.json +2 -2
  149. package/artifacts/contracts/web3call/augment-hooks/InjectIsProjectFullyMinted.sol/InjectIsProjectFullyMinted.json +2 -2
  150. package/artifacts/contracts/web3call/augment-hooks/InjectPolyptychTokenHash.sol/InjectPolyptychTokenHash.json +2 -2
  151. package/artifacts/contracts/web3call/augment-hooks/InjectTokenHashSeed.sol/InjectTokenHashSeed.json +2 -2
  152. package/artifacts/contracts/web3call/augment-hooks/InjectTokenOwner.sol/InjectTokenOwner.json +2 -2
  153. package/artifacts/contracts/web3call/augment-hooks/InjectTokenOwnerEthBalance.sol/InjectTokenOwnerEthBalance.json +2 -2
  154. package/artifacts/contracts/web3call/augment-hooks/InjectUSDCTotalSupply.sol/InjectUSDCTotalSupply.json +2 -2
  155. package/artifacts/contracts/web3call/augment-hooks/SRHooks.sol/SRHooks.json +899 -0
  156. package/artifacts/contracts/web3call/combined-hooks/LiftHooks.sol/IGenArt721V0_Minimal.json +30 -0
  157. package/artifacts/contracts/web3call/combined-hooks/LiftHooks.sol/IRelic.json +35 -0
  158. package/artifacts/contracts/web3call/combined-hooks/LiftHooks.sol/LiftHooks.json +256 -0
  159. package/artifacts/contracts/web3call/configure-hooks/{abstractPMPConfigureHook.sol → AbstractPMPConfigureHook.sol}/AbstractPMPConfigureHook.json +1 -1
  160. package/artifacts/contracts/web3call/configure-hooks/PMPConfigureLockHook.sol/PMPConfigureLockHook.json +195 -0
  161. package/contracts/AdminACLV0RoyaltyRegistry.sol +142 -0
  162. package/contracts/DependencyRegistryV0.sol +143 -13
  163. package/contracts/GenArt721CoreV3_Curated.sol +1 -1
  164. package/contracts/GenArt721CoreV3_Curated_Flex.sol +173 -0
  165. package/contracts/GenArt721CoreV3_Explorations_Flex.sol +159 -0
  166. package/contracts/engine/V3/EngineFactoryV0.sol +20 -1
  167. package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +286 -299
  168. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +292 -301
  169. package/contracts/engine/V3/transfer-hooks/AbstractTransferHook.sol +101 -0
  170. package/contracts/engine/V3/transfer-hooks/OwnerHistoryTransferHook.sol +291 -0
  171. package/contracts/generator/GenArt721GeneratorV0.sol +145 -47
  172. package/contracts/helpers/ERC1967ProxyImport.sol +5 -0
  173. package/contracts/interfaces/v0.8.x/IArtblocksRoyaltyOverride.sol +1 -1
  174. package/contracts/interfaces/v0.8.x/IClaimMinter.sol +70 -0
  175. package/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol +95 -0
  176. package/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol +15 -0
  177. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol +21 -2
  178. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol +72 -0
  179. package/contracts/interfaces/v0.8.x/IOwnerHistoryTransferHook.sol +119 -0
  180. package/contracts/interfaces/v0.8.x/ISRHooks.sol +229 -0
  181. package/contracts/interfaces/v0.8.x/ISeaDropShimForContract.sol +0 -6
  182. package/contracts/interfaces/v0.8.x/ISharedMinterTieredAllowV0.sol +69 -0
  183. package/contracts/interfaces/v0.8.x/ITransferHook.sol +48 -0
  184. package/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol +12 -0
  185. package/contracts/libs/v0.8.x/ENSLib.sol +85 -0
  186. package/contracts/libs/v0.8.x/EnumerableSetUint16.sol +429 -0
  187. package/contracts/libs/v0.8.x/FeistelWalkLib.sol +221 -0
  188. package/contracts/libs/v0.8.x/ImmutableUint16Array.sol +201 -0
  189. package/contracts/libs/v0.8.x/V3EngineLib.sol +490 -0
  190. package/contracts/libs/v0.8.x/V3TransferHookLib.sol +251 -0
  191. package/contracts/libs/v0.8.x/minter-libs/OnChainAllowlistLib.sol +165 -0
  192. package/contracts/minter-suite/Minters/MinterSetPriceOnChainAllowV0.sol +632 -0
  193. package/contracts/minter-suite/Minters/MinterSetPriceTieredAllowV1.sol +871 -0
  194. package/contracts/minter-suite/Minters/MinterSlidingScaleV0.sol +493 -0
  195. package/contracts/minter-suite/Minters/one-off/ClaimMinter.sol +595 -0
  196. package/contracts/minter-suite/Minters/one-off/MinterSetPriceTieredOnChainAllowV0.sol +894 -0
  197. package/contracts/minter-suite/Minters/one-off/SeaDropXArtBlocksShim.sol +59 -41
  198. package/contracts/mock/ENSLibMock.sol +25 -0
  199. package/contracts/mock/EnumerableSetUint16Mock.sol +88 -0
  200. package/contracts/mock/FeistelWalkLibMock.sol +81 -0
  201. package/contracts/mock/ImmutableUint16ArrayMock.sol +62 -0
  202. package/contracts/mock/MockGenArt721V3Core.sol +416 -0
  203. package/contracts/mock/MockPMP.sol +287 -0
  204. package/contracts/mock/MockTransferHook.sol +160 -0
  205. package/contracts/mock/MockTransferHookTestHelpers.sol +96 -0
  206. package/contracts/mock/ReentrancyBatchMockShared.sol +53 -0
  207. package/contracts/mock/RelayExecutorTestHelper.sol +44 -0
  208. package/contracts/relay/RelayExecutor.sol +61 -0
  209. package/contracts/relay/RelayExecutorPartialReverts.sol +79 -0
  210. package/contracts/royalty-registry/GenArt721RoyaltyOverrideSplits.sol +130 -0
  211. package/contracts/utils/MintMulticallUtil.sol +103 -0
  212. package/contracts/web3call/PMPV1.sol +1204 -0
  213. package/contracts/web3call/augment-hooks/AbstractPMPAugmentHook.sol +1 -1
  214. package/contracts/web3call/augment-hooks/InjectBaseGasFee.sol +1 -1
  215. package/contracts/web3call/augment-hooks/InjectBlockHeight.sol +57 -0
  216. package/contracts/web3call/augment-hooks/InjectBlockHeightAndArtistProjectOverrides.sol +310 -0
  217. package/contracts/web3call/augment-hooks/InjectBlockHeightAndNumOwnedProjectTokens.sol +141 -0
  218. package/contracts/web3call/augment-hooks/InjectBlockHeightProjectInvocationsAndArtistProjectOverrides.sol +326 -0
  219. package/contracts/web3call/augment-hooks/InjectBlockTimestamp.sol +57 -0
  220. package/contracts/web3call/augment-hooks/InjectBytesPerToken.sol +279 -0
  221. package/contracts/web3call/augment-hooks/InjectIsProjectFullyMinted.sol +1 -1
  222. package/contracts/web3call/augment-hooks/InjectTokenHashSeed.sol +1 -1
  223. package/contracts/web3call/augment-hooks/InjectTokenOwner.sol +1 -1
  224. package/contracts/web3call/augment-hooks/InjectTokenOwnerEthBalance.sol +1 -1
  225. package/contracts/web3call/augment-hooks/SRHooks.sol +1722 -0
  226. package/contracts/web3call/combined-hooks/LiftHooks.sol +304 -0
  227. package/contracts/web3call/configure-hooks/{abstractPMPConfigureHook.sol → AbstractPMPConfigureHook.sol} +1 -1
  228. package/contracts/web3call/configure-hooks/PMPConfigureLockHook.sol +107 -0
  229. package/package.json +39 -24
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: LGPL-3.0-only
2
2
  // Created By: Art Blocks Inc.
3
3
 
4
- import "@openzeppelin-4.5/contracts/utils/introspection/IERC165.sol";
4
+ import "@openzeppelin-5.0/contracts/utils/introspection/IERC165.sol";
5
5
 
6
6
  pragma solidity ^0.8.0;
7
7
 
@@ -0,0 +1,70 @@
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 IClaimMinter
8
+ * @author Art Blocks Inc.
9
+ * @notice Interface for the ClaimMinter contract that enables admin to pre-mint tokens
10
+ * for a project and allows collectors to claim tokens in an arbitrary order with
11
+ * configurable pricing.
12
+ */
13
+ interface IClaimMinter {
14
+ // Events
15
+ event PriceConfigured(uint256 basePriceInWei, uint256 priceIncrementInWei);
16
+ event TimestampStartConfigured(uint256 timestampStart);
17
+ event TokensPreMinted(uint256 amount);
18
+ event TokenClaimed(
19
+ uint256 indexed tokenId,
20
+ address indexed claimant,
21
+ uint256 price
22
+ );
23
+ event TokenWithdrawnAfterAuction(
24
+ uint256 indexed tokenNumber,
25
+ address indexed toAddress
26
+ );
27
+
28
+ /**
29
+ * @notice Returns all claimed bitmaps
30
+ * @return An array of all claimed bitmaps
31
+ */
32
+ function getAllClaimedBitmaps() external view returns (string memory);
33
+
34
+ /**
35
+ * @notice Sets the base price in wei for token 0 and the price increment in wei.
36
+ * Only callable by the core contract's Admin ACL.
37
+ * @param basePriceInWei_ Base price in wei for token 0.
38
+ * @param priceIncrementInWei_ Price increment in wei.
39
+ */
40
+ function configurePricePerTokenInWei(
41
+ uint256 basePriceInWei_,
42
+ uint256 priceIncrementInWei_
43
+ ) external;
44
+
45
+ /**
46
+ * @notice Sets the timestamp when claiming can begin.
47
+ * Only callable by the core contract's Admin ACL.
48
+ * @param timestampStart_ Unix timestamp when claiming can begin.
49
+ */
50
+ function configureTimestampStart(uint256 timestampStart_) external;
51
+
52
+ /**
53
+ * @notice Pre-mints `amount` tokens to this contract.
54
+ * @param amount Number of tokens to pre-mint.
55
+ */
56
+ function preMint(uint256 amount) external;
57
+
58
+ /**
59
+ * @notice Claims token `tokenId` by paying the required price.
60
+ * @param tokenNumber Token invocation number to claim.
61
+ */
62
+ function claimToken(uint256 tokenNumber) external payable;
63
+
64
+ /**
65
+ * @notice Checks if a token is claimed using bitmap storage
66
+ * @param tokenNumber The token invocation number
67
+ * @return True if the token is claimed
68
+ */
69
+ function isTokenClaimed(uint256 tokenNumber) external view returns (bool);
70
+ }
@@ -87,6 +87,89 @@ interface IDependencyRegistryV0 {
87
87
 
88
88
  event UniversalBytecodeStorageReaderUpdated(address indexed newReader);
89
89
 
90
+ event DependencyCanvasTagTypeUpdated(
91
+ bytes32 indexed dependencyNameAndVersion,
92
+ CanvasTagType canvasTagType
93
+ );
94
+
95
+ event DependencyLoadAsModuleUpdated(
96
+ bytes32 indexed dependencyNameAndVersion,
97
+ bool loadAsModule
98
+ );
99
+
100
+ event DependencyProjectScriptTagTypeUpdated(
101
+ bytes32 indexed dependencyNameAndVersion,
102
+ ProjectScriptTagType projectScriptTagType,
103
+ string projectScriptSpecialType
104
+ );
105
+
106
+ /**
107
+ * @notice Enum representing the canvas tag requirements for a dependency.
108
+ * @dev Conveys whether generated HTML must include a canvas tag, and where.
109
+ * @dev NoCanvasTag is the default value. No canvas tag is added to the generated HTML.
110
+ * @dev CanvasBeforeProjectScript adds a canvas tag before the project script.
111
+ * @dev CanvasAfterProjectScript adds a canvas tag after the project script.
112
+ */
113
+ enum CanvasTagType {
114
+ NoCanvasTag, // default
115
+ CanvasBeforeProjectScript,
116
+ CanvasAfterProjectScript
117
+ }
118
+
119
+ /**
120
+ * @notice Enum representing how a project's script must be injected into generated HTML.
121
+ * @dev ClassicScript is the default value. The project script is wrapped in a plain
122
+ * `<script>` tag, which is correct for the majority of dependencies.
123
+ * @dev Module wraps the project script in `<script type="module">`, for dependencies whose
124
+ * projects are authored as ES modules (e.g. those importing a bare specifier such as "three").
125
+ * @dev SpecialType wraps the project script in a `<script>` tag whose `type` attribute is set
126
+ * to the dependency's `projectScriptSpecialType` (e.g. "application/processing").
127
+ * @dev RawHtml injects the project script verbatim, with no wrapping tag, for dependencies
128
+ * whose project scripts are themselves complete HTML documents (e.g. "custom@na"). Generated
129
+ * HTML also omits the default style reset in this case, because the raw document owns its
130
+ * own styling.
131
+ */
132
+ enum ProjectScriptTagType {
133
+ ClassicScript, // default
134
+ Module,
135
+ SpecialType,
136
+ RawHtml
137
+ }
138
+
139
+ /**
140
+ * @notice Struct holding all details describing a dependency, including the fields that
141
+ * fully prescribe how the generator should render projects using it.
142
+ */
143
+ struct DependencyDetails {
144
+ // name and version of dependency (i.e. "name@version") used to identify dependency
145
+ string nameAndVersion;
146
+ // type of license, MIT, GPL, etc.
147
+ string licenseType;
148
+ // preferred CDN URL for dependency
149
+ string preferredCDN;
150
+ // count of additional CDN URLs for dependency
151
+ uint24 additionalCDNCount;
152
+ // preferred code repository URL for dependency
153
+ string preferredRepository;
154
+ // count of additional repository URLs for dependency
155
+ uint24 additionalRepositoryCount;
156
+ // project website URL for dependency
157
+ string dependencyWebsite;
158
+ // whether the dependency is available on chain
159
+ bool availableOnChain;
160
+ // count of on-chain scripts for dependency
161
+ uint24 scriptCount;
162
+ // whether the dependency's own script is an ES module, and therefore must be exposed to
163
+ // project scripts via an import map rather than loaded with a plain `<script src>` tag
164
+ bool loadAsModule;
165
+ // canvas tag requirement for the dependency
166
+ CanvasTagType canvasTagType;
167
+ // how a project's script must be injected into generated HTML
168
+ ProjectScriptTagType projectScriptTagType;
169
+ // `type` attribute used when projectScriptTagType is SpecialType; empty otherwise
170
+ string projectScriptSpecialType;
171
+ }
172
+
90
173
  /**
91
174
  * @notice Returns the count of scripts for dependency `dependencyNameAndVersion`.
92
175
  * @param dependencyNameAndVersion Dependency type to be queried.
@@ -117,6 +200,18 @@ interface IDependencyRegistryV0 {
117
200
  /**
118
201
  * @notice Returns details for a given dependency type `dependencyNameAndVersion`.
119
202
  * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
203
+ * @return dependencyDetails Details for the given dependency.
204
+ */
205
+ function getDependencyDetailsV2(
206
+ bytes32 dependencyNameAndVersion
207
+ ) external view returns (DependencyDetails memory dependencyDetails);
208
+
209
+ /**
210
+ * @notice Returns details for a given dependency type `dependencyNameAndVersion`.
211
+ * @dev Superseded by `getDependencyDetailsV2`, which additionally returns the fields
212
+ * prescribing how the generator renders projects using this dependency. Retained with an
213
+ * unchanged signature so that existing off-chain consumers continue to decode correctly.
214
+ * @param dependencyNameAndVersion Name and version of dependency (i.e. "name@version") used to identify dependency.
120
215
  * @return nameAndVersion String representation of `dependencyNameAndVersion`.
121
216
  * (e.g. "p5js(atSymbol)1.0.0")
122
217
  * @return licenseType License type for dependency
@@ -32,6 +32,11 @@ interface IEngineFactoryV0 {
32
32
  * new Engine or Engine Flex contracts.
33
33
  */
34
34
  event Abandoned();
35
+ /**
36
+ * @notice The default base URI host was updated.
37
+ * @param defaultBaseURIHost new default base URI host
38
+ */
39
+ event DefaultBaseURIHostUpdated(string defaultBaseURIHost);
35
40
 
36
41
  /**
37
42
  * @notice Creates a new Engine or Engine Flex contract with the provided
@@ -69,6 +74,16 @@ interface IEngineFactoryV0 {
69
74
  */
70
75
  function drainERC20(address ERC20TokenAddress, address recipient) external;
71
76
 
77
+ /**
78
+ * @notice Updates the default base URI host used when initializing new
79
+ * Engine contracts.
80
+ * Only callable by the owner.
81
+ * @param _defaultBaseURIHost New default base URI host.
82
+ */
83
+ function updateDefaultBaseURIHost(
84
+ string memory _defaultBaseURIHost
85
+ ) external;
86
+
72
87
  /**
73
88
  * @notice Calls transferOwnership on the core registry.
74
89
  * Useful for updating the owner of the core registry contract.
@@ -80,7 +80,9 @@ interface IGenArt721CoreContractV3_Base is IGenArt721CoreProjectScriptV1 {
80
80
  FIELD_PROJECT_SCRIPT_TYPE, // 13
81
81
  FIELD_PROJECT_ASPECT_RATIO, // 14
82
82
  FIELD_PROJECT_BASE_URI, // 15
83
- FIELD_PROJECT_PROVIDER_SECONDARY_FINANCIALS // 16
83
+ FIELD_PROJECT_PROVIDER_SECONDARY_FINANCIALS, // 16
84
+ FIELD_PROJECT_TRANSFER_HOOK, // 17
85
+ FIELD_PROJECT_TRANSFER_HOOK_LOCKED // 18
84
86
  }
85
87
 
86
88
  /**
@@ -126,7 +128,11 @@ interface IGenArt721CoreContractV3_Base is IGenArt721CoreProjectScriptV1 {
126
128
  AspectRatioNoNumbers, // 34
127
129
  AspectRatioImproperFormat, // 35
128
130
  OnlyNullPlatformProvider, // 36
129
- ContractInitialized // 37
131
+ ContractInitialized, // 37
132
+ TransferHookLocked, // 38
133
+ TransferHookInvalidInterface, // 39
134
+ TransferHookReentrancy, // 40
135
+ TransferHookUnexpectedHook // 41
130
136
  }
131
137
 
132
138
  /**
@@ -143,6 +149,19 @@ interface IGenArt721CoreContractV3_Base is IGenArt721CoreProjectScriptV1 {
143
149
  */
144
150
  event Mint(address indexed _to, uint256 indexed _tokenId);
145
151
 
152
+ /**
153
+ * @notice Token ID `_tokenId` minted to `_to`, with token hash
154
+ * `_tokenHash`.
155
+ * @dev New event in v3.2.9. When `_tokenHash` is non-zero, the token
156
+ * hash was assigned atomically during the mint transaction. When
157
+ * `_tokenHash` is bytes32(0), the hash has not yet been assigned.
158
+ */
159
+ event Mint(
160
+ address indexed _to,
161
+ uint256 indexed _tokenId,
162
+ bytes32 _tokenHash
163
+ );
164
+
146
165
  /**
147
166
  * @notice currentMinter updated to `_currentMinter`.
148
167
  * @dev Implemented starting with V3 core
@@ -147,4 +147,76 @@ interface IGenArt721CoreContractV3_Engine is IGenArt721CoreContractV3_Base {
147
147
  * @return The address of the current split provider.
148
148
  */
149
149
  function splitProvider() external view returns (ISplitProviderV0);
150
+
151
+ /**
152
+ * @notice Project `_projectId` transfer hook updated to `_hook`.
153
+ * @dev New event in v3.3. `_hook` of `address(0)` means no hook is
154
+ * configured (today's transfer security profile).
155
+ */
156
+ event ProjectTransferHookUpdated(
157
+ uint256 indexed _projectId,
158
+ address indexed _hook
159
+ );
160
+
161
+ /**
162
+ * @notice Project `_projectId` transfer hook configuration has been
163
+ * permanently locked at `_hook` (which may be `address(0)`).
164
+ * @dev New event in v3.3. One-way. Auto-lock at `address(0)` when the
165
+ * four-week project metadata lock elapses with no hook set does not emit
166
+ * this event (it is time-based, not a transaction).
167
+ */
168
+ event ProjectTransferHookLocked(
169
+ uint256 indexed _projectId,
170
+ address indexed _hook
171
+ );
172
+
173
+ /**
174
+ * @notice Set or clear the transfer hook for project `_projectId`.
175
+ * @dev New function in v3.3. Artist or Admin ACL. Reverts if locked:
176
+ * either `lockProjectTransferHook` was called, or the four-week project
177
+ * metadata lock elapsed while the hook is `address(0)`. After auto-lock,
178
+ * a hook that is already set remains configurable until the artist locks.
179
+ * A non-zero hook must ERC-165-advertise `ITransferHook`
180
+ * (interface ID `0x6344b0e2`). `address(0)` clears the hook.
181
+ * @param _projectId Project ID.
182
+ * @param _hook Hook contract, or `address(0)` to clear.
183
+ */
184
+ function configureProjectTransferHook(
185
+ uint256 _projectId,
186
+ address _hook
187
+ ) external;
188
+
189
+ /**
190
+ * @notice Permanently lock the transfer hook for project `_projectId` at
191
+ * `_expectedHook`, which may be `address(0)`.
192
+ * @dev New function in v3.3. Artist only. If locked at `address(0)`, a
193
+ * hook can never be assigned — restoring today's transfer security
194
+ * profile. If the four-week project metadata lock elapsed with no hook
195
+ * set, the configuration is already locked and this reverts.
196
+ * @dev `_expectedHook` must equal the project's currently configured hook.
197
+ * Because locking is permanent and the hook may be updated by either the
198
+ * artist or the Admin ACL, this guards against a `configureProjectTransferHook`
199
+ * call landing first and causing an unintended hook to be locked in.
200
+ * @dev WARNING: locking freezes the hook address, not the hook's behavior.
201
+ * Locking at an upgradeable proxy leaves its owner able to change what runs
202
+ * on every transfer, with no way for the project to move away from it.
203
+ * @param _projectId Project ID.
204
+ * @param _expectedHook Hook the caller expects to lock in. Reverts with
205
+ * `TransferHookUnexpectedHook` if it does not match the current hook.
206
+ */
207
+ function lockProjectTransferHook(
208
+ uint256 _projectId,
209
+ address _expectedHook
210
+ ) external;
211
+
212
+ /**
213
+ * @notice Transfer hook configuration for project `_projectId`.
214
+ * @return hook Hook address, or `address(0)` if none is configured.
215
+ * @return locked True if the artist called `lockProjectTransferHook`, or
216
+ * if the four-week project metadata lock elapsed while the hook is
217
+ * `address(0)`.
218
+ */
219
+ function projectTransferHookConfig(
220
+ uint256 _projectId
221
+ ) external view returns (address hook, bool locked);
150
222
  }
@@ -0,0 +1,119 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ import {ITransferHook} from "./ITransferHook.sol";
7
+
8
+ /**
9
+ * @title Interface for the on-chain owner history transfer hook.
10
+ * @author Art Blocks Inc.
11
+ * @notice Reference `ITransferHook` implementation that records every owner a
12
+ * token has had, on chain, for projects that opt in.
13
+ */
14
+ interface IOwnerHistoryTransferHook is ITransferHook {
15
+ /**
16
+ * @notice One entry in a token's ownership chain.
17
+ * @dev Packed into a single storage slot: 20-byte address + 12-byte
18
+ * timestamp. `uint96` seconds is not a real bound.
19
+ */
20
+ struct OwnerRecord {
21
+ address owner;
22
+ uint96 timestamp;
23
+ }
24
+
25
+ /**
26
+ * @notice Token `tokenId` on `coreContract` recorded `owner` at
27
+ * `index` in its ownership chain.
28
+ * @dev Index 0 is the owner that preceded the first change this hook saw:
29
+ * `address(0)` when the hook was configured before the token was minted,
30
+ * and otherwise the owner at the moment the hook started tracking.
31
+ */
32
+ event OwnerRecorded(
33
+ address indexed coreContract,
34
+ uint256 indexed tokenId,
35
+ address indexed owner,
36
+ uint256 index,
37
+ uint256 timestamp
38
+ );
39
+
40
+ /**
41
+ * @notice Thrown when the calling core does not have this hook configured
42
+ * for the token's project.
43
+ */
44
+ error HookNotConfiguredForProject(
45
+ address coreContract,
46
+ uint256 projectId,
47
+ address configuredHook
48
+ );
49
+
50
+ /**
51
+ * @notice Full ownership chain recorded for a token, oldest first.
52
+ * @dev Unbounded; use `ownerHistorySlice` for tokens with long histories.
53
+ * @param coreContract Core contract the token belongs to.
54
+ * @param tokenId Token ID.
55
+ */
56
+ function ownerHistory(
57
+ address coreContract,
58
+ uint256 tokenId
59
+ ) external view returns (OwnerRecord[] memory records);
60
+
61
+ /**
62
+ * @notice A page of a token's ownership chain, oldest first.
63
+ * @param coreContract Core contract the token belongs to.
64
+ * @param tokenId Token ID.
65
+ * @param start Index to start at.
66
+ * @param count Maximum number of records to return. The returned array is
67
+ * shorter than `count` when fewer records remain.
68
+ */
69
+ function ownerHistorySlice(
70
+ address coreContract,
71
+ uint256 tokenId,
72
+ uint256 start,
73
+ uint256 count
74
+ ) external view returns (OwnerRecord[] memory records);
75
+
76
+ /**
77
+ * @notice Number of records in a token's ownership chain.
78
+ */
79
+ function ownerHistoryLength(
80
+ address coreContract,
81
+ uint256 tokenId
82
+ ) external view returns (uint256);
83
+
84
+ /**
85
+ * @notice Owners a token has had, excluding the most recently recorded one.
86
+ * @dev Excludes the `address(0)` anchor of a token tracked from its mint,
87
+ * which is not an owner; for a token first seen mid-life, the anchor is the
88
+ * real owner at that moment and is included. Empty until a token has
89
+ * changed hands at least once while tracked.
90
+ */
91
+ function previousOwners(
92
+ address coreContract,
93
+ uint256 tokenId
94
+ ) external view returns (address[] memory owners);
95
+
96
+ /**
97
+ * @notice Most recently recorded owner of a token.
98
+ * @dev This is the token's current owner while the hook stays configured
99
+ * for its project. If the project's hook is cleared, transfers stop being
100
+ * recorded and this becomes the owner as of the last recorded transfer, so
101
+ * consumers that need the live owner should call `ownerOf` on the core.
102
+ * @return owner Most recent recorded owner, or `address(0)` if the token
103
+ * has never been recorded.
104
+ */
105
+ function lastRecordedOwner(
106
+ address coreContract,
107
+ uint256 tokenId
108
+ ) external view returns (address owner);
109
+
110
+ /**
111
+ * @notice Whether a token's recorded chain begins at its mint, which is the
112
+ * case only if this hook was configured for the project before the token
113
+ * was minted.
114
+ */
115
+ function isTrackedFromMint(
116
+ address coreContract,
117
+ uint256 tokenId
118
+ ) external view returns (bool);
119
+ }
@@ -0,0 +1,229 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Creatd By: Art Blocks Inc.
3
+
4
+ pragma solidity ^0.8.0;
5
+
6
+ /**
7
+ * @title ISRHooks
8
+ * @author Art Blocks Inc.
9
+ * @notice This interface defines the custom events and functions for the SRHooks contract.
10
+ * It does not include any of the IPMPV0 events, which are indexed separately.
11
+ */
12
+ interface ISRHooks {
13
+ /**
14
+ * @notice Emitted when the contract is initialized
15
+ * @param coreContractAddress The address of the core contract.
16
+ * @param coreProjectId The project ID of the core contract.
17
+ */
18
+ event SRHooksInitialized(
19
+ address coreContractAddress,
20
+ uint256 coreProjectId
21
+ );
22
+
23
+ /**
24
+ * @notice Emitted when the tokens sending to a token are updated
25
+ * @param coreContract The address of the core contract.
26
+ * @param tokenId The ID of the token.
27
+ * @param tokensSendingTo The tokens sending to the token.
28
+ */
29
+ event TokenSendingToUpdated(
30
+ address indexed coreContract,
31
+ uint256 indexed tokenId,
32
+ uint16[] tokensSendingTo
33
+ );
34
+
35
+ /**
36
+ * @notice Emitted when the tokens sending to a token are updated
37
+ * @param coreContract The address of the core contract.
38
+ * @param tokenId The ID of the token.
39
+ * @param tokensReceivingFrom The tokens receiving from the token.
40
+ */
41
+ event TokenReceivingFromUpdated(
42
+ address indexed coreContract,
43
+ uint256 indexed tokenId,
44
+ uint16[] tokensReceivingFrom
45
+ );
46
+
47
+ /**
48
+ * @notice Struct for the token metadata calldata.
49
+ * @param updateImage Whether to update the image data.
50
+ * @param imageDataCompressed The compressed image data.
51
+ * @param updateSound Whether to update the sound data.
52
+ * @param soundDataCompressed The compressed sound data.
53
+ */
54
+ struct TokenMetadataCalldata {
55
+ bool updateImage; // true if updating the image data
56
+ bytes imageDataCompressed; // non-empty if updating the image data
57
+ bool updateSound; // true if updating the sound data
58
+ bytes soundDataCompressed; // may be empty to clear the sound data, non-empty if setting the sound data
59
+ }
60
+
61
+ /**
62
+ * @notice Struct for the token metadata view.
63
+ * @param imageDataCompressed The compressed image data.
64
+ * @param imageVersion The version of the image data.
65
+ * @param soundDataCompressed The compressed sound data.
66
+ * @param soundVersion The version of the sound data.
67
+ */
68
+ struct TokenMetadataView {
69
+ bytes imageDataCompressed;
70
+ uint16 imageVersion;
71
+ bytes soundDataCompressed;
72
+ uint16 soundVersion;
73
+ }
74
+
75
+ struct TokenLiveData {
76
+ uint256 tokenNumber;
77
+ address ownerAddress;
78
+ bytes imageDataCompressed;
79
+ bytes soundDataCompressed;
80
+ string ownerEnsName;
81
+ }
82
+
83
+ // enum for the different possible states of a token's SR configuration
84
+ enum SendStates {
85
+ Neutral,
86
+ SendGeneral,
87
+ SendTo
88
+ }
89
+
90
+ enum ReceiveStates {
91
+ Neutral,
92
+ ReceiveGeneral,
93
+ ReceiveFrom,
94
+ ReceiveTo
95
+ }
96
+
97
+ /**
98
+ * @notice Updates the state and metadata for a given token.
99
+ * Reverts if the token number is invalid or the msg.sender is not owner or valid delegate.xyz V2 of token owner.
100
+ * Reverts if invalid configuration is provided.
101
+ * Includes two boolean flags to update the send and receive states and token metadata separately, in a single function call.
102
+ * Never allows updating to a slot that is invalid.
103
+ * @param tokenNumber The token number to update.
104
+ * @param updateSendState Whether to update the send state.
105
+ * @param sendState The new send state. Valid values are SendGeneral, SendTo, Neutral.
106
+ * @param tokensSendingTo Tokens to send this token to. Only non-empty iff updateSendState is true and sendState is SendTo.
107
+ * Duplicates are automatically deduplicated when calculating dilution rates.
108
+ * @param updateReceiveState Whether to update the receive state.
109
+ * @param receiveState The new receive state. Valid values are ReceiveGeneral, ReceiveFrom, Neutral.
110
+ * @param tokensReceivingFrom Tokens this token is open to receive from. Only non-empty iff updateReceiveState is true and receiveState is ReceiveFrom.
111
+ * Duplicates and self-referential entries are automatically filtered in getLiveData results.
112
+ * @param updateTokenMetadata Whether to update the token metadata.
113
+ * @param updatedActiveSlot The new active slot. If updating token metadata, this is the new active slot.
114
+ * @param tokenMetadataCalldata The new token metadata. If updating token metadata, this is the new token metadata at the updated active slot. Only non-empty iff updateTokenMetadata is true.
115
+ */
116
+ function updateTokenStateAndMetadata(
117
+ uint256 tokenNumber,
118
+ bool updateSendState,
119
+ SendStates sendState,
120
+ uint16[] memory tokensSendingTo,
121
+ bool updateReceiveState,
122
+ ReceiveStates receiveState,
123
+ uint16[] memory tokensReceivingFrom,
124
+ bool updateTokenMetadata,
125
+ uint256 updatedActiveSlot,
126
+ TokenMetadataCalldata memory tokenMetadataCalldata
127
+ ) external;
128
+
129
+ /**
130
+ * @notice Gets the live data for a given token.
131
+ * @param tokenNumber The token number to get the live data for.
132
+ * @param blockNumber The block number to get the live data for. Must be in latest 256 blocks.
133
+ * @param maxReceive The maximum number of tokens to receive, in each array of receivedTokensGeneral and receivedTokensTo.
134
+ * maxReceive must be less than or equal to MAX_RECEIVE_RATE_PER_BLOCK.
135
+ * Treats block number of 0 as latest completed block.
136
+ * Reverts if block number is in future - need block hash to be defined.
137
+ * NOTE: Each array of receivedTokensGeneral and receivedTokensTo has a maximum length of maxReceive,
138
+ * but their combined length may be greater than maxReceive. The art script should handle this by
139
+ * deterministically shuffling/sampling from the arrays if desired.
140
+ * WARNING: This function is designed for off-chain view calls only and may exceed block gas limits in cases where
141
+ * a token has many senders or is receiving from many tokens. It is not intended to be called within transactions.
142
+ * WARNING: Self-referential SendGeneral and SendTo tokens may be included in the results.
143
+ * @return sendState The send state of the token.
144
+ * @return receiveState The receive state of the token.
145
+ * @return receivedTokensGeneral The received tokens general of the token.
146
+ * @return receivedTokensTo The received tokens to of the token.
147
+ * @return numSendGeneral The number of tokens in the send general pool.
148
+ * @return numReceiveGeneral The number of tokens in the receive general pool.
149
+ * @return numSendingToMe The number of tokens sending to me.
150
+ * @return usedBlockNumber The block number used to generate the random numbers.
151
+ */
152
+ function getLiveData(
153
+ uint256 tokenNumber,
154
+ uint256 blockNumber,
155
+ uint256 maxReceive
156
+ )
157
+ external
158
+ view
159
+ returns (
160
+ SendStates sendState,
161
+ ReceiveStates receiveState,
162
+ TokenLiveData[] memory receivedTokensGeneral,
163
+ TokenLiveData[] memory receivedTokensTo,
164
+ uint256 numSendGeneral,
165
+ uint256 numReceiveGeneral,
166
+ uint256 numSendingToMe,
167
+ uint256 usedBlockNumber
168
+ );
169
+
170
+ /**
171
+ * @notice Gets the state of the general pools.
172
+ * @return sendGeneralTokensLength The length of the send general tokens.
173
+ * @return receiveGeneralTokensLength The length of the receive general tokens.
174
+ */
175
+ function getGeneralPoolState()
176
+ external
177
+ view
178
+ returns (
179
+ uint256 sendGeneralTokensLength,
180
+ uint256 receiveGeneralTokensLength
181
+ );
182
+
183
+ /**
184
+ * @notice Gets the state of a given token.
185
+ * @param tokenNumber The token number to get the state for.
186
+ * @return sendState The send state.
187
+ * @return receiveState The receive state.
188
+ * @return tokensSendingTo The tokens sending to the token.
189
+ * @return tokensReceivingFrom The tokens receiving from the token.
190
+ * @return activeSlot The active slot.
191
+ * @return activeSlotTokenMetadata The token metadata at the active slot.
192
+ * @return ownerAddress The address of the token owner.
193
+ */
194
+ function getTokenState(
195
+ uint256 tokenNumber
196
+ )
197
+ external
198
+ view
199
+ returns (
200
+ SendStates sendState,
201
+ ReceiveStates receiveState,
202
+ uint16[] memory tokensSendingTo,
203
+ uint16[] memory tokensReceivingFrom,
204
+ uint256 activeSlot,
205
+ TokenMetadataView memory activeSlotTokenMetadata,
206
+ address ownerAddress
207
+ );
208
+
209
+ /**
210
+ * @notice Gets the token metadata at a given slot.
211
+ * @param tokenNumber The token number to get the token metadata for.
212
+ * @param slot The slot to get the token metadata for.
213
+ * @return tokenMetadata The token metadata at the given slot.
214
+ */
215
+ function getTokenMetadataAtSlot(
216
+ uint256 tokenNumber,
217
+ uint256 slot
218
+ ) external view returns (TokenMetadataView memory tokenMetadata);
219
+
220
+ /**
221
+ * @notice Gets the tokens sending to a given token.
222
+ * WARNING: This function is unbounded in gas cost, and is designed to be used by view accessors only. Use with caution.
223
+ * @param tokenNumber The token number to get the tokens sending to for.
224
+ * @return tokensSendingTo The token numbers sending to the given token.
225
+ */
226
+ function getTokensSendingToToken(
227
+ uint256 tokenNumber
228
+ ) external view returns (uint256[] memory tokensSendingTo);
229
+ }