@artblocks/contracts 1.1.0 → 1.2.1

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 (326) hide show
  1. package/README.md +86 -34
  2. package/artifacts/contracts/AdminACLV0.sol/AdminACLV0.json +2 -2
  3. package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
  4. package/artifacts/contracts/BytecodeStorageReaders/BytecodeStorageReaderContractV2.sol/BytecodeStorageReaderContractV2.json +201 -0
  5. package/artifacts/contracts/BytecodeStorageReaders/UniversalBytecodeStorageReader.sol/UniversalBytecodeStorageReader.json +154 -0
  6. package/artifacts/contracts/BytecodeStorageV2Writer.sol/BytecodeStorageV2Writer.json +87 -0
  7. package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +403 -155
  8. package/artifacts/contracts/GenArt721CoreV3_Curated.sol/GenArt721CoreV3_Curated.json +2493 -0
  9. package/artifacts/contracts/OwnedCreate2FactoryV0.sol/OwnedCreate2FactoryV0.json +311 -0
  10. package/artifacts/contracts/archive/GenArt721CoreV3.sol/GenArt721CoreV3.json +2060 -0
  11. package/artifacts/contracts/archive/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +2034 -0
  12. package/artifacts/contracts/{minter-suite → archive/minter-suite}/Minters/MinterBase_v0_1_1.sol/MinterBase.json +1 -1
  13. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
  14. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
  15. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExp}/MinterDAExpV4.sol/MinterDAExpV4.json +3 -3
  16. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  17. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  18. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExpSettlement}/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +3 -3
  19. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
  20. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
  21. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDALin}/MinterDALinV4.sol/MinterDALinV4.json +3 -3
  22. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
  23. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
  24. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
  25. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterHolder}/MinterHolderV4.sol/MinterHolderV4.json +3 -3
  26. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
  27. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
  28. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
  29. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
  30. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterMerkle}/MinterMerkleV5.sol/MinterMerkleV5.json +3 -3
  31. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +54 -49
  32. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol/MinterPolyptychV0.json +3 -3
  33. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSEA}/MinterSEAV0.sol/MinterSEAV0.json +3 -3
  34. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  35. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  36. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPrice}/MinterSetPriceV4.sol/MinterSetPriceV4.json +3 -3
  37. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol/MinterSetPriceERC20V0.json +65 -2
  38. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol/MinterSetPriceERC20V1.json +65 -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 +807 -0
  42. package/artifacts/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol/GenArt721MinterBurner_PBAB.json +65 -2
  43. package/artifacts/contracts/engine/V2/GenArt721Minter_PBAB.sol/GenArt721Minter_PBAB.json +65 -2
  44. package/artifacts/contracts/engine/V3/EngineFactoryV0.sol/EngineFactoryV0.json +624 -0
  45. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +613 -216
  46. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +805 -206
  47. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +51 -8
  48. package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +2 -2
  49. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +51 -8
  50. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +59 -54
  51. package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +2 -2
  52. package/artifacts/contracts/generator/AddressChunks.sol/AddressChunks.json +10 -0
  53. package/artifacts/contracts/generator/GenArt721GeneratorV0.sol/GenArt721GeneratorV0.json +333 -0
  54. package/artifacts/contracts/generator/GenArt721GeneratorV0.sol/ILegacyGenArt721CoreV2_PBAB_Flex.json +47 -0
  55. package/artifacts/contracts/interfaces/v0.8.x/IAdminACLV0_Extended.sol/IAdminACLV0_Extended.json +140 -0
  56. package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReader.sol/IBytecodeStorageReader.json +7 -7
  57. package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol/IBytecodeStorageReaderV2.json +130 -0
  58. package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReader_Base.sol/IBytecodeStorageReader_Base.json +30 -0
  59. package/artifacts/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol/ICoreRegistryV1.json +13 -0
  60. package/artifacts/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +228 -45
  61. package/artifacts/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol/IEngineFactoryV0.json +283 -0
  62. package/artifacts/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV0.sol/IFilteredMinterDAExpSettlementV0.json +12 -12
  63. package/artifacts/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV1.sol/IFilteredMinterDAExpSettlementV1.json +12 -12
  64. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +53 -48
  65. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +53 -48
  66. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +198 -90
  67. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +198 -90
  68. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.json +1065 -0
  69. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol/IGenArt721CoreContractV3_Engine_PreV3p2.json +778 -0
  70. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_ProjectFinance.sol/IGenArt721CoreContractV3_ProjectFinance.json +87 -0
  71. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreProjectScriptV0.sol/IGenArt721CoreProjectScriptV0.json +59 -0
  72. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreProjectScriptV1.sol/IGenArt721CoreProjectScriptV1.json +64 -0
  73. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreTokenHashProviderV0.sol/IGenArt721CoreTokenHashProviderV0.json +30 -0
  74. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreTokenHashProviderV1.sol/IGenArt721CoreTokenHashProviderV1.json +30 -0
  75. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721GeneratorV0.sol/IGenArt721GeneratorV0.json +63 -0
  76. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721Minter_PBAB.sol/IGenArt721Minter_PBAB.json +279 -0
  77. package/artifacts/contracts/interfaces/v0.8.x/IOwnedCreate2FactoryV0.sol/IOwnedCreate2FactoryV0.json +74 -0
  78. package/artifacts/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol/IPseudorandomAtomic.json +1 -1
  79. package/artifacts/contracts/interfaces/v0.8.x/ISeaDropShimForContract.sol/ISeaDropShimForContract.json +37 -0
  80. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol/ISharedMinterDAExpSettlementV0.json +18 -0
  81. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMinPriceV0.sol/ISharedMinterMinPriceV0.json +37 -0
  82. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterRAMV0.sol/ISharedMinterRAMV0.json +62 -0
  83. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterRequired.sol/ISharedMinterRequired.json +37 -0
  84. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol/ISharedMinterSEAV0.json +1 -1
  85. package/artifacts/contracts/interfaces/v0.8.x/ISplitAtomicFactoryV0.sol/ISplitAtomicFactoryV0.json +170 -0
  86. package/artifacts/contracts/interfaces/v0.8.x/ISplitAtomicV0.sol/ISplitAtomicV0.json +126 -0
  87. package/artifacts/contracts/interfaces/v0.8.x/ISplitProviderV0.sol/ISplitProviderV0.json +98 -0
  88. package/artifacts/contracts/interfaces/v0.8.x/IUniversalBytecodeStorageReader.sol/IUniversalBytecodeStorageReader.json +56 -0
  89. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ERC721SeaDropStructsErrorsAndEvents.sol/ERC721SeaDropStructsErrorsAndEvents.json +43 -0
  90. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/OpenSea/INonFungibleSeaDropToken.sol/INonFungibleSeaDropToken.json +715 -0
  91. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ISeaDrop.sol/ISeaDrop.json +1571 -0
  92. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ISeaDropTokenContractMetadata.sol/ISeaDropTokenContractMetadata.json +345 -0
  93. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/OpenSea/SeaDropErrorsAndEvents.sol/SeaDropErrorsAndEvents.json +717 -0
  94. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/splits-0x-v2/ISplitFactoryV2.sol/ISplitFactoryV2.json +123 -0
  95. package/artifacts/contracts/libs/integration-refs/delegation-registry/DelegationRegistry.sol/DelegationRegistry.json +2 -2
  96. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeMock.sol/GnosisSafeMock.json +2 -2
  97. package/artifacts/contracts/libs/integration-refs/gnosis-safe/GnosisSafeProxyFactoryMock.sol/GnosisSafeProxyFactoryMock.json +2 -2
  98. package/artifacts/contracts/libs/integration-refs/gnosis-safe/MultiSendMock.sol/MultiSendMock.json +2 -2
  99. package/artifacts/contracts/libs/integration-refs/weth9/weth9.sol/WETH9_.json +2 -2
  100. package/artifacts/contracts/libs/v0.8.x/ABHelpers.sol/ABHelpers.json +2 -2
  101. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +2 -2
  102. package/artifacts/contracts/libs/v0.8.x/BitMap.sol/BitMaps256.json +10 -0
  103. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV0.sol/BytecodeStorage.json +2 -2
  104. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageReader.json +2 -2
  105. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV1.sol/BytecodeStorageWriter.json +2 -2
  106. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageReader.json +214 -0
  107. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageWriter.json +10 -0
  108. package/artifacts/contracts/libs/v0.8.x/Bytes32Strings.sol/Bytes32Strings.json +2 -2
  109. package/artifacts/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol/DependencyRegistryStorageLib.json +10 -0
  110. package/artifacts/contracts/libs/v0.8.x/ERC721_PackedHashSeed.sol/ERC721_PackedHashSeed.json +2 -2
  111. package/artifacts/contracts/libs/v0.8.x/ERC721_PackedHashSeedV1.sol/ERC721_PackedHashSeedV1.json +444 -0
  112. package/artifacts/contracts/libs/v0.8.x/JsonStatic.sol/JsonStatic.json +10 -0
  113. package/artifacts/contracts/libs/v0.8.x/PackedBools.sol/PackedBools.json +10 -0
  114. package/artifacts/contracts/libs/v0.8.x/SSTORE2.sol/SSTORE2.json +2 -2
  115. package/artifacts/contracts/libs/v0.8.x/V3FlexLib.sol/V3FlexLib.json +195 -0
  116. package/artifacts/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol/DAExpLib.json +2 -2
  117. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALib.sol/DALib.json +2 -2
  118. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +2 -2
  119. package/artifacts/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol/GenericMinterEventsLib.json +2 -2
  120. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +2 -2
  121. package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +2 -2
  122. package/artifacts/contracts/libs/v0.8.x/minter-libs/MinPriceLib.sol/MinPriceLib.json +24 -0
  123. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +2 -2
  124. package/artifacts/contracts/libs/v0.8.x/minter-libs/RAMLib.sol/RAMLib.json +398 -0
  125. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +2 -2
  126. package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +2 -2
  127. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +2 -2
  128. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +2 -2
  129. package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +2 -2
  130. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  131. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +2 -2
  132. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +2 -2
  133. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +2 -2
  134. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +2 -2
  135. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +2 -2
  136. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +2 -2
  137. package/artifacts/contracts/minter-suite/Minters/MinterMinPriceMerkleV0.sol/MinterMinPriceMerkleV0.json +664 -0
  138. package/artifacts/contracts/minter-suite/Minters/MinterMinPriceV0.sol/MinterMinPriceV0.json +387 -0
  139. package/artifacts/contracts/minter-suite/Minters/MinterRAMV0.sol/MinterRAMV0.json +1374 -0
  140. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +7 -7
  141. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +2 -2
  142. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +2 -2
  143. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +2 -2
  144. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +2 -2
  145. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +2 -2
  146. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +2 -2
  147. package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol/MinterSetPriceV5_SingleCore.json +417 -0
  148. package/artifacts/contracts/minter-suite/Minters/one-off/SeaDropXArtBlocksShim.sol/SeaDropXArtBlocksShim.json +1206 -0
  149. package/artifacts/contracts/mock/BytecodeV1LibCallsMock.sol/BytecodeV1LibCallsMock.json +2 -2
  150. package/artifacts/contracts/mock/BytecodeV2LibCallsMock.sol/BytecodeV2LibCallsMock.json +154 -0
  151. package/artifacts/contracts/mock/BytecodeV2TextCR_DMock.sol/BytecodeV2TextCR_DMock.json +428 -0
  152. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
  153. package/artifacts/contracts/mock/ERC20Mock.sol/ERC20Mock.json +2 -2
  154. package/artifacts/contracts/mock/ERC20MockAltDecimals.sol/ERC20MockAltDecimals.json +318 -0
  155. package/artifacts/contracts/mock/ForceSendMock.sol/ForceSendMock.json +24 -0
  156. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +2 -2
  157. package/artifacts/contracts/mock/Mock0xSplitsV2PullFactory.sol/Mock0xSplitsV2PullFactory.json +149 -0
  158. package/artifacts/contracts/mock/Mock0xSplitsV2Splitter.sol/Mock0xSplitsV2Splitter.json +99 -0
  159. package/artifacts/contracts/mock/MockAdminACLV0.sol/MockAdminACLV0Events.json +20 -2
  160. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +20 -2
  161. package/artifacts/contracts/mock/MockFileStore.sol/MockFileStore.json +35 -0
  162. package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +2 -2
  163. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  164. package/artifacts/contracts/mock/ReentrancyGenArt721MinterMock.sol/ReentrancyGenArt721MinterMock.json +100 -0
  165. package/artifacts/contracts/mock/ReentrancyHolderMock.sol/ReentrancyHolderMock.json +2 -2
  166. package/artifacts/contracts/mock/ReentrancyHolderMockShared.sol/ReentrancyHolderMockShared.json +2 -2
  167. package/artifacts/contracts/mock/ReentrancyMerkleMock.sol/ReentrancyMerkleMock.json +2 -2
  168. package/artifacts/contracts/mock/ReentrancyMerkleMockShared.sol/ReentrancyMerkleMockShared.json +2 -2
  169. package/artifacts/contracts/mock/ReentrancyMock.sol/ReentrancyMock.json +2 -2
  170. package/artifacts/contracts/mock/ReentrancyMockShared.sol/ReentrancyMockShared.json +2 -2
  171. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +2 -2
  172. package/artifacts/contracts/mock/ReentrancySEAMockShared.sol/ReentrancySEAAutoBidderMockShared.json +2 -2
  173. package/artifacts/contracts/mock/ReentrancySplitterMocks.sol/ReentrancySplitterDrainETHMock.json +54 -0
  174. package/artifacts/contracts/mock/ReentrancySplitterMocks.sol/ReentrancySplitterSendETHMock.json +54 -0
  175. package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +2 -2
  176. package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +2 -2
  177. package/artifacts/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol/PseudorandomAtomic.json +2 -2
  178. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +2 -2
  179. package/artifacts/contracts/split/SplitAtomicFactoryV0.sol/SplitAtomicFactoryV0.json +203 -0
  180. package/artifacts/contracts/split/SplitAtomicV0.sol/SplitAtomicV0.json +168 -0
  181. package/artifacts/contracts/split/split-provider/SplitProviderV0.sol/SplitProviderV0.json +141 -0
  182. package/contracts/AdminACLV0.sol +6 -2
  183. package/contracts/AdminACLV1.sol +2 -2
  184. package/contracts/BytecodeStorageReaders/BytecodeStorageReaderContractV2.sol +103 -0
  185. package/contracts/BytecodeStorageReaders/UniversalBytecodeStorageReader.sol +70 -0
  186. package/contracts/BytecodeStorageV2Writer.sol +69 -0
  187. package/contracts/DependencyRegistryV0.sol +878 -430
  188. package/contracts/GenArt721CoreV3_Curated.sol +133 -0
  189. package/contracts/OwnedCreate2FactoryV0.sol +173 -0
  190. package/contracts/{GenArt721CoreV3.sol → archive/GenArt721CoreV3.sol} +56 -20
  191. package/contracts/{explorations → archive}/GenArt721CoreV3_Explorations.sol +49 -13
  192. package/contracts/{minter-suite → archive/minter-suite}/Minters/MinterBase_v0_1_1.sol +4 -4
  193. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExp}/MinterDAExpV4.sol +4 -4
  194. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol +4 -4
  195. package/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol +5 -5
  196. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExpSettlement}/MinterDAExpSettlementV2.sol +8 -8
  197. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDALin}/MinterDALinV4.sol +4 -4
  198. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterHolder}/MinterHolderV4.sol +5 -5
  199. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterMerkle}/MinterMerkleV5.sol +5 -5
  200. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterPolyptych}/MinterPolyptychV0.sol +7 -7
  201. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSEA}/MinterSEAV0.sol +13 -13
  202. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPrice}/MinterSetPriceV4.sol +4 -4
  203. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol +82 -10
  204. package/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol +82 -10
  205. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterSetPriceERC20}/MinterSetPriceERC20V4.sol +88 -21
  206. package/contracts/engine/V2/GenArt721MinterBurner_PBAB.sol +81 -22
  207. package/contracts/engine/V2/GenArt721Minter_PBAB.sol +80 -22
  208. package/contracts/engine/V3/EngineFactoryV0.sol +427 -0
  209. package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +977 -502
  210. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +1137 -663
  211. package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +3 -3
  212. package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +1 -1
  213. package/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol +2 -2
  214. package/contracts/generator/AddressChunks.sol +106 -0
  215. package/contracts/generator/GenArt721GeneratorV0.sol +1094 -0
  216. package/contracts/generator/scripty-support/Scripty.sol +5 -0
  217. package/contracts/interfaces/v0.8.x/IAdminACLV0_Extended.sol +20 -0
  218. package/contracts/interfaces/v0.8.x/IBytecodeStorageReader.sol +34 -36
  219. package/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol +25 -0
  220. package/contracts/interfaces/v0.8.x/IBytecodeStorageReader_Base.sol +20 -0
  221. package/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol +5 -0
  222. package/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol +141 -45
  223. package/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol +124 -0
  224. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV0.sol +1 -3
  225. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpSettlementV1.sol +1 -3
  226. package/contracts/interfaces/v0.8.x/IFilteredMinterDAExpV1.sol +1 -3
  227. package/contracts/interfaces/v0.8.x/IFilteredMinterDALinV1.sol +1 -3
  228. package/contracts/interfaces/v0.8.x/IFilteredMinterHolderV2.sol +1 -3
  229. package/contracts/interfaces/v0.8.x/IFilteredMinterMerkleV2.sol +1 -3
  230. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol +126 -11
  231. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol +86 -8
  232. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol +26 -8
  233. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol +141 -0
  234. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol +78 -0
  235. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_ProjectFinance.sol +47 -0
  236. package/contracts/interfaces/v0.8.x/IGenArt721CoreProjectScriptV0.sol +22 -0
  237. package/contracts/interfaces/v0.8.x/IGenArt721CoreProjectScriptV1.sol +23 -0
  238. package/contracts/interfaces/v0.8.x/IGenArt721CoreTokenHashProviderV0.sol +11 -0
  239. package/contracts/interfaces/v0.8.x/IGenArt721CoreTokenHashProviderV1.sol +9 -0
  240. package/contracts/interfaces/v0.8.x/IGenArt721GeneratorV0.sol +14 -0
  241. package/contracts/interfaces/v0.8.x/IGenArt721Minter_PBAB.sol +91 -0
  242. package/contracts/interfaces/v0.8.x/IOwnedCreate2FactoryV0.sol +40 -0
  243. package/contracts/interfaces/v0.8.x/IPseudorandomAtomic.sol +1 -3
  244. package/contracts/interfaces/v0.8.x/ISeaDropShimForContract.sol +19 -0
  245. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +19 -0
  246. package/contracts/interfaces/v0.8.x/ISharedMinterMinPriceV0.sol +22 -0
  247. package/contracts/interfaces/v0.8.x/ISharedMinterRAMV0.sol +23 -0
  248. package/contracts/interfaces/v0.8.x/ISharedMinterRequired.sol +26 -0
  249. package/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol +1 -4
  250. package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +12 -6
  251. package/contracts/interfaces/v0.8.x/ISplitAtomicFactoryV0.sol +81 -0
  252. package/contracts/interfaces/v0.8.x/ISplitAtomicV0.sol +72 -0
  253. package/contracts/interfaces/v0.8.x/ISplitProviderV0.sol +49 -0
  254. package/contracts/interfaces/v0.8.x/IUniversalBytecodeStorageReader.sol +28 -0
  255. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ERC721SeaDropStructsErrorsAndEvents.sol +58 -0
  256. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/INonFungibleSeaDropToken.sol +186 -0
  257. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ISeaDrop.sol +337 -0
  258. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ISeaDropTokenContractMetadata.sol +152 -0
  259. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/SeaDropErrorsAndEvents.sol +320 -0
  260. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/SeaDropStructs.sol +146 -0
  261. package/contracts/interfaces/v0.8.x/integration-refs/splits-0x-v2/ISplitFactoryV2.sol +62 -0
  262. package/contracts/libs/v0.8.x/ABHelpers.sol +18 -4
  263. package/contracts/libs/v0.8.x/BitMap.sol +112 -0
  264. package/contracts/libs/v0.8.x/BytecodeStorageV2.sol +593 -0
  265. package/contracts/libs/v0.8.x/Bytes32Strings.sol +20 -0
  266. package/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol +98 -0
  267. package/contracts/libs/v0.8.x/ERC721_PackedHashSeedV1.sol +591 -0
  268. package/contracts/libs/v0.8.x/JsonStatic.sol +373 -0
  269. package/contracts/libs/v0.8.x/PackedBools.sol +42 -0
  270. package/contracts/libs/v0.8.x/V3FlexLib.sol +597 -0
  271. package/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol +10 -12
  272. package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +4 -9
  273. package/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol +44 -44
  274. package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +64 -63
  275. package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +14 -10
  276. package/contracts/libs/v0.8.x/minter-libs/MinPriceLib.sol +64 -0
  277. package/contracts/libs/v0.8.x/minter-libs/RAMLib.sol +2927 -0
  278. package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +60 -62
  279. package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +4 -8
  280. package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +92 -89
  281. package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +128 -15
  282. package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +5 -4
  283. package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +16 -10
  284. package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +2 -2
  285. package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +19 -15
  286. package/contracts/minter-suite/Minters/MinterDAExpV5.sol +2 -2
  287. package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +2 -2
  288. package/contracts/minter-suite/Minters/MinterDALinV5.sol +2 -2
  289. package/contracts/minter-suite/Minters/MinterMinPriceMerkleV0.sol +765 -0
  290. package/contracts/minter-suite/Minters/MinterMinPriceV0.sol +462 -0
  291. package/contracts/minter-suite/Minters/MinterRAMV0.sol +1205 -0
  292. package/contracts/minter-suite/Minters/MinterSEAV1.sol +21 -32
  293. package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +17 -8
  294. package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +2 -2
  295. package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +2 -2
  296. package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +23 -9
  297. package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +2 -2
  298. package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +2 -2
  299. package/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol +446 -0
  300. package/contracts/minter-suite/Minters/one-off/SeaDropXArtBlocksShim.sol +869 -0
  301. package/contracts/mock/BytecodeV2LibCallsMock.sol +128 -0
  302. package/contracts/mock/BytecodeV2TextCR_DMock.sol +316 -0
  303. package/contracts/mock/ERC20MockAltDecimals.sol +31 -0
  304. package/contracts/mock/ForceSendMock.sol +22 -0
  305. package/contracts/mock/Mock0xSplitsV2PullFactory.sol +75 -0
  306. package/contracts/mock/Mock0xSplitsV2Splitter.sol +47 -0
  307. package/contracts/mock/MockAdminACLV0.sol +21 -0
  308. package/contracts/mock/MockAdminACLV0_PROHIBITION.sol +21 -0
  309. package/contracts/mock/MockFileStore.sol +22 -0
  310. package/contracts/mock/ReentrancyGenArt721MinterMock.sol +47 -0
  311. package/contracts/mock/ReentrancySplitterMocks.sol +67 -0
  312. package/contracts/randomizer/primitive/PseudorandomAtomicBasic.sol +1 -1
  313. package/contracts/randomizer/shared/SharedRandomizerV0.sol +1 -1
  314. package/contracts/split/SplitAtomicFactoryV0.sol +121 -0
  315. package/contracts/split/SplitAtomicV0.sol +265 -0
  316. package/contracts/split/split-provider/SplitProviderV0.sol +201 -0
  317. package/package.json +66 -36
  318. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +0 -1965
  319. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +0 -1939
  320. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +0 -768
  321. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +0 -208
  322. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol/GenArt721RoyaltyOverride_PBAB.json +0 -301
  323. package/contracts/archive/readme.md +0 -16
  324. package/contracts/engine/README.md +0 -21
  325. package/contracts/royalty-registry/GenArt721RoyaltyOverride.sol +0 -168
  326. package/contracts/royalty-registry/GenArt721RoyaltyOverride_PBAB.sol +0 -221
@@ -0,0 +1,98 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../interfaces/v0.8.x/IAdminACLV0.sol";
5
+ import "../../interfaces/v0.8.x/ICoreRegistryV1.sol";
6
+ import "@openzeppelin-4.7/contracts/utils/structs/EnumerableSet.sol";
7
+
8
+ /**
9
+ * @title DependencyRegistryStorageLib
10
+ * @notice This library defines the storage structure used by the Art Blocks platform's DependencyRegistry contract.
11
+ * It uses a diamond storage pattern for efficient storage management.
12
+ * @author Art Blocks Inc.
13
+ */
14
+
15
+ library DependencyRegistryStorageLib {
16
+ bytes32 constant DIAMOND_STORAGE_POSITION =
17
+ keccak256("dependencyregistrystoragelib.storage");
18
+
19
+ /**
20
+ * @notice Struct used to store a license's bytecode addresses and chunk count.
21
+ * Each bytecode address is a contract that stores a chunk of the license's text.
22
+ */
23
+ struct License {
24
+ // mapping from license index to address storing script in bytecode
25
+ mapping(uint256 licenseIndex => address bytecodeAddress) licenseBytecodeAddresses;
26
+ uint24 licenseChunkCount;
27
+ }
28
+
29
+ /**
30
+ * @notice Struct used to store a dependency's properties.
31
+ */
32
+ struct Dependency {
33
+ // type of license, MIT, GPL, etc.
34
+ bytes32 licenseType;
35
+ // preferred CDN URL for dependency
36
+ string preferredCDN;
37
+ // mapping from additional CDN index to CDN URL
38
+ mapping(uint256 additionalCDNIndex => string additionalCDNUrl) additionalCDNs;
39
+ // preferred code repository URL for dependency
40
+ string preferredRepository;
41
+ // mapping from additional repository index to repository URL
42
+ mapping(uint256 additionalRepositoryIndex => string additionalRepositoryUrl) additionalRepositories;
43
+ // Website URL for dependency (e.g. https://p5js.org/ for p5)
44
+ string website;
45
+ // mapping from script index to address storing script in bytecode
46
+ mapping(uint256 scriptIndex => address bytecodeAddress) scriptBytecodeAddresses;
47
+ // count of additional CDN urls where the dependency can be found
48
+ uint24 additionalCDNCount;
49
+ // count of additional code repository urls for the dependency
50
+ uint24 additionalRepositoryCount;
51
+ // count of scripts that make up the dependency, if the dependency is available on-chain
52
+ uint24 scriptCount;
53
+ }
54
+
55
+ /**
56
+ * @notice Struct used to define the storage layout for the DependencyRegistry contract.
57
+ * It includes mappings for dependencies, licenses, supported core contracts, and project dependency overrides.
58
+ */
59
+ struct Storage {
60
+ // address of the AdminACL contract, which controls access to the DependencyRegistry
61
+ IAdminACLV0 adminACLContract;
62
+ // dependency ID's are bytes32 of the format "name@version"
63
+ EnumerableSet.Bytes32Set dependencyNameVersionIds;
64
+ // source code license types, MIT, GPL, etc.
65
+ EnumerableSet.Bytes32Set licenseTypes;
66
+ // mapping from dependencyNameAndVersion to Dependency, which stores the properties of each dependency
67
+ mapping(bytes32 dependencyNameAndVersion => Dependency dependency) dependencyRecords;
68
+ // mapping from licenseTypes to License, which stores the properties of each license
69
+ mapping(bytes32 licenseType => License license) allLicenses;
70
+ // @dev This set is vestigial and no longer used. It has been replaced by CoreRegistry functionality.
71
+ // Cannot be removed due to storage layout requirements in upgradeable contracts.
72
+ // See https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable#modifying-your-contracts
73
+ EnumerableSet.AddressSet DEPRECATED_supportedCoreContracts;
74
+ // Mapping that allows for the overriding of project dependencies.
75
+ // The first key is the address of the core contract, the second key is the project ID,
76
+ // and the value is the bytes32 representation of the dependency name and version (i.e. name@version).
77
+ // This allows for specific projects to use different versions of dependencies than what's stored on the core contract.
78
+ mapping(address coreContractAddress => mapping(uint256 projectId => bytes32 dependencyNameAndVersion) projectToDependencyNameAndVersionMapping) projectDependencyOverrides;
79
+ // address of the CoreRegistry contract
80
+ ICoreRegistryV1 coreRegistryContract;
81
+ // enumerable set of core contract addresses supported by the DependencyRegistry, in addition to the set of core contracts
82
+ // that are supported by the CoreRegistry contract
83
+ // @dev possible there is overlap between the two sets, but not intentionally configured by admin.
84
+ EnumerableSet.AddressSet supportedCoreContractsOverride;
85
+ }
86
+
87
+ /**
88
+ * @notice Returns the storage struct for reading and writing.
89
+ * This library uses a diamond storage pattern when managing storage.
90
+ * @return storageStruct The Storage struct.
91
+ */
92
+ function s() internal pure returns (Storage storage storageStruct) {
93
+ bytes32 position = DIAMOND_STORAGE_POSITION;
94
+ assembly ("memory-safe") {
95
+ storageStruct.slot := position
96
+ }
97
+ }
98
+ }
@@ -0,0 +1,591 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/ERC721.sol)
3
+
4
+ pragma solidity ^0.8.20;
5
+
6
+ import {IERC721} from "@openzeppelin-5.0/contracts/token/ERC721/IERC721.sol";
7
+ import {IERC721Receiver} from "@openzeppelin-5.0/contracts/token/ERC721/IERC721Receiver.sol";
8
+ import {IERC721Metadata} from "@openzeppelin-5.0/contracts/token/ERC721/extensions/IERC721Metadata.sol";
9
+ import {Context} from "@openzeppelin-5.0/contracts/utils/Context.sol";
10
+ import {Strings} from "@openzeppelin-5.0/contracts/utils/Strings.sol";
11
+ import {IERC165, ERC165} from "@openzeppelin-5.0/contracts/utils/introspection/ERC165.sol";
12
+ import {IERC721Errors} from "@openzeppelin-5.0/contracts/interfaces/draft-IERC6093.sol";
13
+
14
+ /**
15
+ * @dev Forked version of the OpenZeppelin v5.0.1 ERC721 contract. Updated
16
+ * with an initialize function to ensure EIP 1167 compatibility. Utilizes
17
+ * a struct to pack owner and hash seed into a single storage slot.
18
+ * ---------------------
19
+ * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
20
+ * the Metadata extension, but not including the Enumerable extension, which is available separately as
21
+ * {ERC721Enumerable}.
22
+ */
23
+ abstract contract ERC721_PackedHashSeedV1 is
24
+ Context,
25
+ ERC165,
26
+ IERC721,
27
+ IERC721Metadata,
28
+ IERC721Errors
29
+ {
30
+ using Strings for uint256;
31
+
32
+ // Token name
33
+ string private _name;
34
+
35
+ // Token symbol
36
+ string private _symbol;
37
+
38
+ /// ensure initialization can only be performed once
39
+ bool private _initialized;
40
+
41
+ /// struct to pack a token owner and hash seed into same storage slot
42
+ struct OwnerAndHashSeed {
43
+ // 20 bytes for address of token's owner
44
+ address owner;
45
+ // remaining 12 bytes allocated to token hash seed
46
+ bytes12 hashSeed;
47
+ }
48
+
49
+ /// mapping of token ID to OwnerAndHashSeed
50
+ /// @dev visibility internal so inheriting contracts can access
51
+ mapping(uint256 tokenId => OwnerAndHashSeed) internal _ownersAndHashSeeds;
52
+
53
+ mapping(address owner => uint256) private _balances;
54
+
55
+ mapping(uint256 tokenId => address) private _tokenApprovals;
56
+
57
+ mapping(address owner => mapping(address operator => bool))
58
+ private _operatorApprovals;
59
+
60
+ // @dev constructor intentionally removed to allow for EIP 1167 compatibility,
61
+ // see `initialize` function for contract initialization
62
+
63
+ /**
64
+ * @dev See {IERC165-supportsInterface}.
65
+ */
66
+ function supportsInterface(
67
+ bytes4 interfaceId
68
+ ) public view virtual override(ERC165, IERC165) returns (bool) {
69
+ return
70
+ interfaceId == type(IERC721).interfaceId ||
71
+ interfaceId == type(IERC721Metadata).interfaceId ||
72
+ super.supportsInterface(interfaceId);
73
+ }
74
+
75
+ /**
76
+ * @dev See {IERC721-balanceOf}.
77
+ */
78
+ function balanceOf(address owner) public view virtual returns (uint256) {
79
+ if (owner == address(0)) {
80
+ revert ERC721InvalidOwner(address(0));
81
+ }
82
+ return _balances[owner];
83
+ }
84
+
85
+ /**
86
+ * @dev See {IERC721-ownerOf}.
87
+ */
88
+ function ownerOf(uint256 tokenId) public view virtual returns (address) {
89
+ return _requireOwned(tokenId);
90
+ }
91
+
92
+ /**
93
+ * @dev See {IERC721Metadata-name}.
94
+ */
95
+ function name() public view virtual returns (string memory) {
96
+ return _name;
97
+ }
98
+
99
+ /**
100
+ * @dev See {IERC721Metadata-symbol}.
101
+ */
102
+ function symbol() public view virtual returns (string memory) {
103
+ return _symbol;
104
+ }
105
+
106
+ /**
107
+ * @dev See {IERC721Metadata-tokenURI}.
108
+ */
109
+ function tokenURI(
110
+ uint256 tokenId
111
+ ) public view virtual returns (string memory) {
112
+ _requireOwned(tokenId);
113
+
114
+ string memory baseURI = _baseURI();
115
+ return
116
+ bytes(baseURI).length > 0
117
+ ? string.concat(baseURI, tokenId.toString())
118
+ : "";
119
+ }
120
+
121
+ /**
122
+ * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
123
+ * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
124
+ * by default, can be overridden in child contracts.
125
+ */
126
+ function _baseURI() internal view virtual returns (string memory) {
127
+ return "";
128
+ }
129
+
130
+ /**
131
+ * @dev See {IERC721-approve}.
132
+ */
133
+ function approve(address to, uint256 tokenId) public virtual {
134
+ _approve(to, tokenId, _msgSender());
135
+ }
136
+
137
+ /**
138
+ * @dev See {IERC721-getApproved}.
139
+ */
140
+ function getApproved(
141
+ uint256 tokenId
142
+ ) public view virtual returns (address) {
143
+ _requireOwned(tokenId);
144
+
145
+ return _getApproved(tokenId);
146
+ }
147
+
148
+ /**
149
+ * @dev See {IERC721-setApprovalForAll}.
150
+ */
151
+ function setApprovalForAll(address operator, bool approved) public virtual {
152
+ _setApprovalForAll(_msgSender(), operator, approved);
153
+ }
154
+
155
+ /**
156
+ * @dev See {IERC721-isApprovedForAll}.
157
+ */
158
+ function isApprovedForAll(
159
+ address owner,
160
+ address operator
161
+ ) public view virtual returns (bool) {
162
+ return _operatorApprovals[owner][operator];
163
+ }
164
+
165
+ /**
166
+ * @dev See {IERC721-transferFrom}.
167
+ */
168
+ function transferFrom(
169
+ address from,
170
+ address to,
171
+ uint256 tokenId
172
+ ) public virtual {
173
+ if (to == address(0)) {
174
+ revert ERC721InvalidReceiver(address(0));
175
+ }
176
+ // Setting an "auth" arguments enables the `_isAuthorized` check which verifies that the token exists
177
+ // (from != 0). Therefore, it is not needed to verify that the return value is not 0 here.
178
+ address previousOwner = _update(to, tokenId, _msgSender());
179
+ if (previousOwner != from) {
180
+ revert ERC721IncorrectOwner(from, tokenId, previousOwner);
181
+ }
182
+ }
183
+
184
+ /**
185
+ * @dev See {IERC721-safeTransferFrom}.
186
+ */
187
+ function safeTransferFrom(
188
+ address from,
189
+ address to,
190
+ uint256 tokenId
191
+ ) public {
192
+ safeTransferFrom(from, to, tokenId, "");
193
+ }
194
+
195
+ /**
196
+ * @dev See {IERC721-safeTransferFrom}.
197
+ */
198
+ function safeTransferFrom(
199
+ address from,
200
+ address to,
201
+ uint256 tokenId,
202
+ bytes memory data
203
+ ) public virtual {
204
+ transferFrom(from, to, tokenId);
205
+ _checkOnERC721Received(from, to, tokenId, data);
206
+ }
207
+
208
+ /**
209
+ * @notice Initializes the contract by setting a `name` and a `symbol` to the token collection.
210
+ * This function should be called atomically, immediately after deployment.
211
+ * Only callable once.
212
+ * @param name_ Name for the token collection.
213
+ * @param symbol_ Symbol for the token collection.
214
+ */
215
+ function initialize(string memory name_, string memory symbol_) internal {
216
+ require(!_initialized, "Already initialized");
217
+ _name = name_;
218
+ _symbol = symbol_;
219
+ _initialized = true;
220
+ }
221
+
222
+ /**
223
+ * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist
224
+ *
225
+ * IMPORTANT: Any overrides to this function that add ownership of tokens not tracked by the
226
+ * core ERC721 logic MUST be matched with the use of {_increaseBalance} to keep balances
227
+ * consistent with ownership. The invariant to preserve is that for any address `a` the value returned by
228
+ * `balanceOf(a)` must be equal to the number of tokens such that `_ownerOf(tokenId)` is `a`.
229
+ */
230
+ function _ownerOf(uint256 tokenId) internal view virtual returns (address) {
231
+ return _ownersAndHashSeeds[tokenId].owner;
232
+ }
233
+
234
+ /**
235
+ * @dev Returns the approved address for `tokenId`. Returns 0 if `tokenId` is not minted.
236
+ */
237
+ function _getApproved(
238
+ uint256 tokenId
239
+ ) internal view virtual returns (address) {
240
+ return _tokenApprovals[tokenId];
241
+ }
242
+
243
+ /**
244
+ * @dev Returns whether `spender` is allowed to manage `owner`'s tokens, or `tokenId` in
245
+ * particular (ignoring whether it is owned by `owner`).
246
+ *
247
+ * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this
248
+ * assumption.
249
+ */
250
+ function _isAuthorized(
251
+ address owner,
252
+ address spender,
253
+ uint256 tokenId
254
+ ) internal view virtual returns (bool) {
255
+ return
256
+ spender != address(0) &&
257
+ (owner == spender ||
258
+ isApprovedForAll(owner, spender) ||
259
+ _getApproved(tokenId) == spender);
260
+ }
261
+
262
+ /**
263
+ * @dev Checks if `spender` can operate on `tokenId`, assuming the provided `owner` is the actual owner.
264
+ * Reverts if `spender` does not have approval from the provided `owner` for the given token or for all its assets
265
+ * the `spender` for the specific `tokenId`.
266
+ *
267
+ * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this
268
+ * assumption.
269
+ */
270
+ function _checkAuthorized(
271
+ address owner,
272
+ address spender,
273
+ uint256 tokenId
274
+ ) internal view virtual {
275
+ if (!_isAuthorized(owner, spender, tokenId)) {
276
+ if (owner == address(0)) {
277
+ revert ERC721NonexistentToken(tokenId);
278
+ } else {
279
+ revert ERC721InsufficientApproval(spender, tokenId);
280
+ }
281
+ }
282
+ }
283
+
284
+ /**
285
+ * @dev Unsafe write access to the balances, used by extensions that "mint" tokens using an {ownerOf} override.
286
+ *
287
+ * NOTE: the value is limited to type(uint128).max. This protect against _balance overflow. It is unrealistic that
288
+ * a uint256 would ever overflow from increments when these increments are bounded to uint128 values.
289
+ *
290
+ * WARNING: Increasing an account's balance using this function tends to be paired with an override of the
291
+ * {_ownerOf} function to resolve the ownership of the corresponding tokens so that balances and ownership
292
+ * remain consistent with one another.
293
+ */
294
+ function _increaseBalance(address account, uint128 value) internal virtual {
295
+ unchecked {
296
+ _balances[account] += value;
297
+ }
298
+ }
299
+
300
+ /**
301
+ * @dev Transfers `tokenId` from its current owner to `to`, or alternatively mints (or burns) if the current owner
302
+ * (or `to`) is the zero address. Returns the owner of the `tokenId` before the update.
303
+ *
304
+ * The `auth` argument is optional. If the value passed is non 0, then this function will check that
305
+ * `auth` is either the owner of the token, or approved to operate on the token (by the owner).
306
+ *
307
+ * Emits a {Transfer} event.
308
+ *
309
+ * NOTE: If overriding this function in a way that tracks balances, see also {_increaseBalance}.
310
+ */
311
+ function _update(
312
+ address to,
313
+ uint256 tokenId,
314
+ address auth
315
+ ) internal virtual returns (address) {
316
+ address from = _ownerOf(tokenId);
317
+
318
+ // Perform (optional) operator check
319
+ if (auth != address(0)) {
320
+ _checkAuthorized(from, auth, tokenId);
321
+ }
322
+
323
+ // Execute the update
324
+ if (from != address(0)) {
325
+ // Clear approval. No need to re-authorize or emit the Approval event
326
+ _approve(address(0), tokenId, address(0), false);
327
+
328
+ unchecked {
329
+ _balances[from] -= 1;
330
+ }
331
+ }
332
+
333
+ if (to != address(0)) {
334
+ unchecked {
335
+ _balances[to] += 1;
336
+ }
337
+ }
338
+
339
+ _ownersAndHashSeeds[tokenId].owner = to;
340
+
341
+ emit Transfer(from, to, tokenId);
342
+
343
+ return from;
344
+ }
345
+
346
+ /**
347
+ * @dev Mints `tokenId` and transfers it to `to`.
348
+ *
349
+ * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
350
+ *
351
+ * Requirements:
352
+ *
353
+ * - `tokenId` must not exist.
354
+ * - `to` cannot be the zero address.
355
+ *
356
+ * Emits a {Transfer} event.
357
+ */
358
+ function _mint(address to, uint256 tokenId) internal {
359
+ if (to == address(0)) {
360
+ revert ERC721InvalidReceiver(address(0));
361
+ }
362
+ address previousOwner = _update(to, tokenId, address(0));
363
+ if (previousOwner != address(0)) {
364
+ revert ERC721InvalidSender(address(0));
365
+ }
366
+ }
367
+
368
+ /**
369
+ * @dev Mints `tokenId`, transfers it to `to` and checks for `to` acceptance.
370
+ *
371
+ * Requirements:
372
+ *
373
+ * - `tokenId` must not exist.
374
+ * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
375
+ *
376
+ * Emits a {Transfer} event.
377
+ */
378
+ function _safeMint(address to, uint256 tokenId) internal {
379
+ _safeMint(to, tokenId, "");
380
+ }
381
+
382
+ /**
383
+ * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
384
+ * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
385
+ */
386
+ function _safeMint(
387
+ address to,
388
+ uint256 tokenId,
389
+ bytes memory data
390
+ ) internal virtual {
391
+ _mint(to, tokenId);
392
+ _checkOnERC721Received(address(0), to, tokenId, data);
393
+ }
394
+
395
+ /**
396
+ * @dev Destroys `tokenId`.
397
+ * The approval is cleared when the token is burned.
398
+ * This is an internal function that does not check if the sender is authorized to operate on the token.
399
+ *
400
+ * Requirements:
401
+ *
402
+ * - `tokenId` must exist.
403
+ *
404
+ * Emits a {Transfer} event.
405
+ */
406
+ function _burn(uint256 tokenId) internal {
407
+ address previousOwner = _update(address(0), tokenId, address(0));
408
+ if (previousOwner == address(0)) {
409
+ revert ERC721NonexistentToken(tokenId);
410
+ }
411
+ }
412
+
413
+ /**
414
+ * @dev Transfers `tokenId` from `from` to `to`.
415
+ * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
416
+ *
417
+ * Requirements:
418
+ *
419
+ * - `to` cannot be the zero address.
420
+ * - `tokenId` token must be owned by `from`.
421
+ *
422
+ * Emits a {Transfer} event.
423
+ */
424
+ function _transfer(address from, address to, uint256 tokenId) internal {
425
+ if (to == address(0)) {
426
+ revert ERC721InvalidReceiver(address(0));
427
+ }
428
+ address previousOwner = _update(to, tokenId, address(0));
429
+ if (previousOwner == address(0)) {
430
+ revert ERC721NonexistentToken(tokenId);
431
+ } else if (previousOwner != from) {
432
+ revert ERC721IncorrectOwner(from, tokenId, previousOwner);
433
+ }
434
+ }
435
+
436
+ /**
437
+ * @dev Safely transfers `tokenId` token from `from` to `to`, checking that contract recipients
438
+ * are aware of the ERC721 standard to prevent tokens from being forever locked.
439
+ *
440
+ * `data` is additional data, it has no specified format and it is sent in call to `to`.
441
+ *
442
+ * This internal function is like {safeTransferFrom} in the sense that it invokes
443
+ * {IERC721Receiver-onERC721Received} on the receiver, and can be used to e.g.
444
+ * implement alternative mechanisms to perform token transfer, such as signature-based.
445
+ *
446
+ * Requirements:
447
+ *
448
+ * - `tokenId` token must exist and be owned by `from`.
449
+ * - `to` cannot be the zero address.
450
+ * - `from` cannot be the zero address.
451
+ * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
452
+ *
453
+ * Emits a {Transfer} event.
454
+ */
455
+ function _safeTransfer(address from, address to, uint256 tokenId) internal {
456
+ _safeTransfer(from, to, tokenId, "");
457
+ }
458
+
459
+ /**
460
+ * @dev Same as {xref-ERC721-_safeTransfer-address-address-uint256-}[`_safeTransfer`], with an additional `data` parameter which is
461
+ * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
462
+ */
463
+ function _safeTransfer(
464
+ address from,
465
+ address to,
466
+ uint256 tokenId,
467
+ bytes memory data
468
+ ) internal virtual {
469
+ _transfer(from, to, tokenId);
470
+ _checkOnERC721Received(from, to, tokenId, data);
471
+ }
472
+
473
+ /**
474
+ * @dev Approve `to` to operate on `tokenId`
475
+ *
476
+ * The `auth` argument is optional. If the value passed is non 0, then this function will check that `auth` is
477
+ * either the owner of the token, or approved to operate on all tokens held by this owner.
478
+ *
479
+ * Emits an {Approval} event.
480
+ *
481
+ * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
482
+ */
483
+ function _approve(address to, uint256 tokenId, address auth) internal {
484
+ _approve(to, tokenId, auth, true);
485
+ }
486
+
487
+ /**
488
+ * @dev Variant of `_approve` with an optional flag to enable or disable the {Approval} event. The event is not
489
+ * emitted in the context of transfers.
490
+ */
491
+ function _approve(
492
+ address to,
493
+ uint256 tokenId,
494
+ address auth,
495
+ bool emitEvent
496
+ ) internal virtual {
497
+ // Avoid reading the owner unless necessary
498
+ if (emitEvent || auth != address(0)) {
499
+ address owner = _requireOwned(tokenId);
500
+
501
+ // We do not use _isAuthorized because single-token approvals should not be able to call approve
502
+ if (
503
+ auth != address(0) &&
504
+ owner != auth &&
505
+ !isApprovedForAll(owner, auth)
506
+ ) {
507
+ revert ERC721InvalidApprover(auth);
508
+ }
509
+
510
+ if (emitEvent) {
511
+ emit Approval(owner, to, tokenId);
512
+ }
513
+ }
514
+
515
+ _tokenApprovals[tokenId] = to;
516
+ }
517
+
518
+ /**
519
+ * @dev Approve `operator` to operate on all of `owner` tokens
520
+ *
521
+ * Requirements:
522
+ * - operator can't be the address zero.
523
+ *
524
+ * Emits an {ApprovalForAll} event.
525
+ */
526
+ function _setApprovalForAll(
527
+ address owner,
528
+ address operator,
529
+ bool approved
530
+ ) internal virtual {
531
+ if (operator == address(0)) {
532
+ revert ERC721InvalidOperator(operator);
533
+ }
534
+ _operatorApprovals[owner][operator] = approved;
535
+ emit ApprovalForAll(owner, operator, approved);
536
+ }
537
+
538
+ /**
539
+ * @dev Reverts if the `tokenId` doesn't have a current owner (it hasn't been minted, or it has been burned).
540
+ * Returns the owner.
541
+ *
542
+ * Overrides to ownership logic should be done to {_ownerOf}.
543
+ */
544
+ function _requireOwned(uint256 tokenId) internal view returns (address) {
545
+ address owner = _ownerOf(tokenId);
546
+ if (owner == address(0)) {
547
+ revert ERC721NonexistentToken(tokenId);
548
+ }
549
+ return owner;
550
+ }
551
+
552
+ /**
553
+ * @dev Private function to invoke {IERC721Receiver-onERC721Received} on a target address. This will revert if the
554
+ * recipient doesn't accept the token transfer. The call is not executed if the target address is not a contract.
555
+ *
556
+ * @param from address representing the previous owner of the given token ID
557
+ * @param to target address that will receive the tokens
558
+ * @param tokenId uint256 ID of the token to be transferred
559
+ * @param data bytes optional data to send along with the call
560
+ */
561
+ function _checkOnERC721Received(
562
+ address from,
563
+ address to,
564
+ uint256 tokenId,
565
+ bytes memory data
566
+ ) private {
567
+ if (to.code.length > 0) {
568
+ try
569
+ IERC721Receiver(to).onERC721Received(
570
+ _msgSender(),
571
+ from,
572
+ tokenId,
573
+ data
574
+ )
575
+ returns (bytes4 retval) {
576
+ if (retval != IERC721Receiver.onERC721Received.selector) {
577
+ revert ERC721InvalidReceiver(to);
578
+ }
579
+ } catch (bytes memory reason) {
580
+ if (reason.length == 0) {
581
+ revert ERC721InvalidReceiver(to);
582
+ } else {
583
+ /// @solidity memory-safe-assembly
584
+ assembly {
585
+ revert(add(32, reason), mload(reason))
586
+ }
587
+ }
588
+ }
589
+ }
590
+ }
591
+ }