@artblocks/contracts 1.0.4 → 1.1.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 (120) hide show
  1. package/README.md +2 -2
  2. package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
  3. package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +97 -10
  4. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +4 -4
  5. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +4 -9
  6. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +4 -9
  7. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +4 -9
  8. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +4 -9
  9. package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +12 -12
  10. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +4 -4
  11. package/artifacts/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol/ICoreRegistryV1.json +6 -6
  12. package/artifacts/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +19 -0
  13. package/artifacts/contracts/interfaces/v0.8.x/IMinterFilterV1.sol/IMinterFilterV1.json +22 -22
  14. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol/ISharedMinterDAExpSettlementV0.json +8 -101
  15. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol/ISharedMinterDAExpV0.json +1 -57
  16. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol/ISharedMinterDALinV0.json +1 -57
  17. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol/ISharedMinterDAV0.json +2 -21
  18. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol/ISharedMinterHolderERC20V0.json +158 -0
  19. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol/ISharedMinterHolderV0.json +15 -90
  20. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol/ISharedMinterMerkleV0.json +10 -36
  21. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol/ISharedMinterSEAV0.json +4 -236
  22. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol/ISharedMinterSimplePurchaseV0.json +5 -5
  23. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterV0.sol/ISharedMinterV0.json +7 -423
  24. package/artifacts/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol/ISharedRandomizerV0.json +17 -17
  25. package/artifacts/contracts/libs/v0.8.x/ABHelpers.sol/ABHelpers.json +2 -2
  26. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +2 -2
  27. package/artifacts/contracts/libs/v0.8.x/Bytes32Strings.sol/Bytes32Strings.json +2 -2
  28. package/artifacts/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol/DAExpLib.json +60 -3
  29. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALib.sol/DALib.json +30 -0
  30. package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +60 -3
  31. package/artifacts/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol/GenericMinterEventsLib.json +346 -0
  32. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +29 -3
  33. package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +30 -3
  34. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +2 -2
  35. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +254 -3
  36. package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +48 -3
  37. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +41 -3
  38. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +35 -3
  39. package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +79 -3
  40. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  41. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +41 -41
  42. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +66 -632
  43. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -20
  44. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +67 -594
  45. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +33 -524
  46. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +66 -632
  47. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +33 -524
  48. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +51 -717
  49. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +58 -454
  50. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +61 -552
  51. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +55 -497
  52. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +110 -571
  53. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +69 -560
  54. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +28 -444
  55. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
  56. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +4 -9
  57. package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +2 -2
  58. package/artifacts/contracts/mock/ReentrancyHolderMockShared.sol/ReentrancyHolderMockShared.json +136 -0
  59. package/artifacts/contracts/mock/ReentrancyMerkleMockShared.sol/ReentrancyMerkleMockShared.json +105 -0
  60. package/artifacts/contracts/mock/ReentrancyMockShared.sol/ReentrancyMockShared.json +100 -0
  61. package/artifacts/contracts/mock/ReentrancySEAMockShared.sol/ReentrancySEAAutoBidderMockShared.json +69 -0
  62. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +19 -19
  63. package/contracts/DependencyRegistryV0.sol +84 -16
  64. package/contracts/archive/readme.md +16 -0
  65. package/contracts/engine/README.md +21 -0
  66. package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +4 -10
  67. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +4 -10
  68. package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +4 -10
  69. package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +4 -10
  70. package/contracts/engine-registry/CoreRegistryV1.sol +58 -65
  71. package/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol +6 -8
  72. package/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol +3 -0
  73. package/contracts/interfaces/v0.8.x/IMinterFilterV1.sol +25 -25
  74. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +11 -20
  75. package/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol +1 -14
  76. package/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol +1 -15
  77. package/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol +2 -8
  78. package/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol +47 -0
  79. package/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol +15 -43
  80. package/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol +10 -20
  81. package/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol +4 -67
  82. package/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol +5 -5
  83. package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +7 -155
  84. package/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol +37 -37
  85. package/contracts/libs/v0.8.x/ABHelpers.sol +14 -14
  86. package/contracts/libs/v0.8.x/AuthLib.sol +101 -102
  87. package/contracts/libs/v0.8.x/Bytes32Strings.sol +5 -5
  88. package/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol +163 -38
  89. package/contracts/libs/v0.8.x/minter-libs/DALib.sol +26 -0
  90. package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +144 -37
  91. package/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol +171 -0
  92. package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +250 -110
  93. package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +257 -48
  94. package/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol +138 -58
  95. package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +778 -103
  96. package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +135 -13
  97. package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +567 -187
  98. package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +480 -322
  99. package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +214 -76
  100. package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +347 -304
  101. package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +391 -491
  102. package/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol +1 -54
  103. package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +388 -628
  104. package/contracts/minter-suite/Minters/MinterDAExpV5.sol +212 -273
  105. package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +393 -488
  106. package/contracts/minter-suite/Minters/MinterDALinV5.sol +220 -277
  107. package/contracts/minter-suite/Minters/MinterSEAV1.sol +327 -664
  108. package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +278 -303
  109. package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +355 -446
  110. package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +328 -416
  111. package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +538 -622
  112. package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +429 -553
  113. package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +180 -227
  114. package/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol +3 -10
  115. package/contracts/mock/ReentrancyHolderMockShared.sol +59 -0
  116. package/contracts/mock/ReentrancyMerkleMockShared.sol +58 -0
  117. package/contracts/mock/ReentrancyMockShared.sol +48 -0
  118. package/contracts/mock/ReentrancySEAMockShared.sol +40 -0
  119. package/contracts/randomizer/shared/SharedRandomizerV0.sol +78 -70
  120. package/package.json +39 -33
@@ -1,14 +1,16 @@
1
1
  // SPDX-License-Identifier: LGPL-3.0-only
2
2
  // Created By: Art Blocks Inc.
3
3
 
4
- import "../../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
5
- import "../../../interfaces/v0.8.x/IGenArt721CoreContractExposesHashSeed.sol";
6
- import "../../../interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol";
7
- import "../../../interfaces/v0.8.x/ISharedRandomizerV0.sol";
4
+ pragma solidity ^0.8.0;
8
5
 
9
- import "@openzeppelin-4.7/contracts/token/ERC20/IERC20.sol";
6
+ import {IGenArt721CoreContractV3_Base} from "../../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
7
+ import {IGenArt721CoreContractExposesHashSeed} from "../../../interfaces/v0.8.x/IGenArt721CoreContractExposesHashSeed.sol";
8
+ import {IGenArt721CoreContractV3WithSharedRandomizer} from "../../../interfaces/v0.8.x/IGenArt721CoreContractV3WithSharedRandomizer.sol";
9
+ import {ISharedRandomizerV0} from "../../../interfaces/v0.8.x/ISharedRandomizerV0.sol";
10
10
 
11
- pragma solidity ^0.8.0;
11
+ import {GenericMinterEventsLib} from "./GenericMinterEventsLib.sol";
12
+
13
+ import {IERC20} from "@openzeppelin-4.7/contracts/token/ERC20/IERC20.sol";
12
14
 
13
15
  /**
14
16
  * @title Art Blocks Polyptych Minter Library
@@ -20,23 +22,48 @@ pragma solidity ^0.8.0;
20
22
  library PolyptychLib {
21
23
  bytes32 constant POLYPTYCH_PANEL_ID = "polyptychPanelId";
22
24
 
25
+ // position of Polyptych Lib storage, using a diamond storage pattern
26
+ // for this library
27
+ bytes32 constant POLYPTYCH_LIB_STORAGE_POSITION =
28
+ keccak256("polyptychlib.storage");
29
+
23
30
  struct PolyptychProjectConfig {
24
31
  // @dev uint24 provides sufficient qty of panels, and could be packed
25
32
  // in the future if other values are added to this struct.
26
33
  uint24 polyptychPanelId;
27
34
  // Stores whether a panel with an ID has been minted for a given token hash seed
28
- // panelId => hashSeed => panelIsMinted
29
- mapping(uint256 => mapping(bytes12 => bool)) polyptychPanelHashSeedIsMinted;
35
+ mapping(uint256 panelId => mapping(bytes12 hashSeed => bool panelIsMinted)) polyptychPanelHashSeedIsMinted;
36
+ }
37
+
38
+ // Diamond storage pattern is used in this library
39
+ struct PolyptychLibStorage {
40
+ mapping(address coreContract => mapping(uint256 projectId => PolyptychProjectConfig)) polyptychProjectConfigs;
30
41
  }
31
42
 
32
43
  /**
33
44
  * @notice Increments the minter to the next polyptych panel of a given project
34
- * @param _polyptychProjectConfig Project ID to increment to its next polyptych panel
45
+ * @param projectId Project ID to increment panel ID for
46
+ * @param coreContract Core contract address that _projectId is on
35
47
  */
36
48
  function incrementPolyptychProjectPanelId(
37
- PolyptychProjectConfig storage _polyptychProjectConfig
49
+ uint256 projectId,
50
+ address coreContract
38
51
  ) internal {
39
- ++_polyptychProjectConfig.polyptychPanelId;
52
+ PolyptychProjectConfig
53
+ storage polyptychProjectConfig = getPolyptychProjectConfig({
54
+ projectId: projectId,
55
+ coreContract: coreContract
56
+ });
57
+ // increment panel ID
58
+ ++polyptychProjectConfig.polyptychPanelId;
59
+
60
+ // index the update
61
+ emit GenericMinterEventsLib.ConfigValueSet({
62
+ projectId: projectId,
63
+ coreContract: coreContract,
64
+ key: PolyptychLib.POLYPTYCH_PANEL_ID,
65
+ value: polyptychProjectConfig.polyptychPanelId
66
+ });
40
67
  }
41
68
 
42
69
  /**
@@ -44,26 +71,33 @@ library PolyptychLib {
44
71
  * minter.
45
72
  * Verifies that the token hash seed is non-zero, and also enforces that
46
73
  * the hash seed can only be used up to one time per panel.
47
- * @param _polyptychProjectConfig polyptych project config
48
- * @param _tokenHashSeed token hash seed
74
+ * @param projectId Project ID to validate
75
+ * @param coreContract Core contract address to validate
76
+ * @param tokenHashSeed token hash seed
49
77
  */
50
78
  function validatePolyptychEffects(
51
- PolyptychProjectConfig storage _polyptychProjectConfig,
52
- bytes12 _tokenHashSeed
79
+ uint256 projectId,
80
+ address coreContract,
81
+ bytes12 tokenHashSeed
53
82
  ) internal {
83
+ PolyptychProjectConfig
84
+ storage polyptychProjectConfig = getPolyptychProjectConfig({
85
+ projectId: projectId,
86
+ coreContract: coreContract
87
+ });
54
88
  // ensure non-zero hash seed
55
- require(_tokenHashSeed != bytes12(0), "Only non-zero hash seeds");
89
+ require(tokenHashSeed != bytes12(0), "Only non-zero hash seeds");
56
90
  // verify that the hash seed has not been used on the current panel
57
- uint256 _panelId = _polyptychProjectConfig.polyptychPanelId;
91
+ uint256 panelId = polyptychProjectConfig.polyptychPanelId;
58
92
  require(
59
- !_polyptychProjectConfig.polyptychPanelHashSeedIsMinted[_panelId][
60
- _tokenHashSeed
93
+ !polyptychProjectConfig.polyptychPanelHashSeedIsMinted[panelId][
94
+ tokenHashSeed
61
95
  ],
62
96
  "Panel already minted"
63
97
  );
64
98
  // mark hash seed as used for the current panel
65
- _polyptychProjectConfig.polyptychPanelHashSeedIsMinted[_panelId][
66
- _tokenHashSeed
99
+ polyptychProjectConfig.polyptychPanelHashSeedIsMinted[panelId][
100
+ tokenHashSeed
67
101
  ] = true;
68
102
  }
69
103
 
@@ -72,40 +106,43 @@ library PolyptychLib {
72
106
  * token ID on a core contract.
73
107
  * @dev This function assumes the core contract is configured to use a
74
108
  * shared randomizer that supports polyptych minting.
75
- * @param _coreContract Core contract address
76
- * @param _tokenId Token ID to set hash seed for
77
- * @param _hashSeed Hash seed to set
109
+ * @param coreContract Core contract address
110
+ * @param tokenId Token ID to set hash seed for
111
+ * @param hashSeed Hash seed to set
78
112
  */
79
113
  function setPolyptychHashSeed(
80
- address _coreContract,
81
- uint256 _tokenId,
82
- bytes12 _hashSeed
114
+ address coreContract,
115
+ uint256 tokenId,
116
+ bytes12 hashSeed
83
117
  ) internal {
84
- IGenArt721CoreContractV3WithSharedRandomizer(_coreContract)
118
+ IGenArt721CoreContractV3WithSharedRandomizer(coreContract)
85
119
  .randomizerContract()
86
120
  .preSetHashSeed({
87
- _coreContract: _coreContract,
88
- _tokenId: _tokenId,
89
- _hashSeed: _hashSeed
121
+ coreContract: coreContract,
122
+ tokenId: tokenId,
123
+ hashSeed: hashSeed
90
124
  });
91
125
  }
92
126
 
93
127
  /**
94
- * Validates that token hash seed is assigned to the token ID `_tokenId` on
95
- * the core contract `_coreContract`.
128
+ * Validates that token hash seed is assigned to the token ID `tokenId` on
129
+ * the core contract `coreContract`.
96
130
  * Reverts if hash seed is not assigned to the token ID.
97
- * @param _coreContract Core contract address
98
- * @param _tokenId Token ID to validate
99
- * @param _targetHashSeed target hash seed of `_tokenId` on `_coreContract`
131
+ * @param coreContract Core contract address
132
+ * @param tokenId Token ID to validate
133
+ * @param targetHashSeed target hash seed of `tokenId` on `coreContract`
100
134
  */
101
135
  function validateAssignedHashSeed(
102
- address _coreContract,
103
- uint256 _tokenId,
104
- bytes12 _targetHashSeed
136
+ address coreContract,
137
+ uint256 tokenId,
138
+ bytes12 targetHashSeed
105
139
  ) internal view {
106
- bytes12 _assignedHashSeed = getTokenHashSeed(_coreContract, _tokenId);
140
+ bytes12 assignedHashSeed = getTokenHashSeed({
141
+ coreContract: coreContract,
142
+ tokenId: tokenId
143
+ });
107
144
  require(
108
- _assignedHashSeed == _targetHashSeed,
145
+ assignedHashSeed == targetHashSeed,
109
146
  "Unexpected token hash seed"
110
147
  );
111
148
  }
@@ -116,45 +153,88 @@ library PolyptychLib {
116
153
  * `IGenArt721CoreContractExposesHashSeed`, which early versions of V3
117
154
  * core contracts do not. If a contract does not conform to this interface,
118
155
  * this function will revert.
119
- * @param _coreContract Core contract address
120
- * @param _tokenId Token ID to query hash seed for
156
+ * @param coreContract Core contract address
157
+ * @param tokenId Token ID to query hash seed for
121
158
  */
122
159
  function getTokenHashSeed(
123
- address _coreContract,
124
- uint256 _tokenId
160
+ address coreContract,
161
+ uint256 tokenId
125
162
  ) internal view returns (bytes12) {
126
163
  return
127
- IGenArt721CoreContractExposesHashSeed(_coreContract)
128
- .tokenIdToHashSeed(_tokenId);
164
+ IGenArt721CoreContractExposesHashSeed(coreContract)
165
+ .tokenIdToHashSeed(tokenId);
129
166
  }
130
167
 
131
168
  /**
132
169
  * Gets the current polyptych panel ID from polyptych project config.
133
170
  * Polyptych panel ID is an incremented value that is used to track the
134
171
  * current panel of a polyptych project.
135
- * @param _polyptychProjectConfig Polyptych project config struct to query
172
+ * @param projectId Project ID to query
173
+ * @param coreContract Core contract address to query
136
174
  */
137
175
  function getPolyptychPanelId(
138
- PolyptychProjectConfig storage _polyptychProjectConfig
176
+ uint256 projectId,
177
+ address coreContract
139
178
  ) internal view returns (uint256) {
140
- return _polyptychProjectConfig.polyptychPanelId;
179
+ PolyptychProjectConfig
180
+ storage polyptychProjectConfig = getPolyptychProjectConfig({
181
+ projectId: projectId,
182
+ coreContract: coreContract
183
+ });
184
+ return polyptychProjectConfig.polyptychPanelId;
141
185
  }
142
186
 
143
187
  /**
144
188
  * Gets if a polyptych panel has already been minted for a given panel ID
145
189
  * and hash seed.
146
- * @param _polyptychProjectConfig Polyptych project config struct to query
147
- * @param _panelId Polyptych panel ID to query
148
- * @param _hashSeed Hash seed of panel to query
190
+ * @param projectId Project ID to query
191
+ * @param coreContract Core contract address to query
192
+ * @param panelId Polyptych panel ID to query
193
+ * @param hashSeed Hash seed of panel to query
149
194
  */
150
195
  function getPolyptychPanelHashSeedIsMinted(
151
- PolyptychProjectConfig storage _polyptychProjectConfig,
152
- uint256 _panelId,
153
- bytes12 _hashSeed
196
+ uint256 projectId,
197
+ address coreContract,
198
+ uint256 panelId,
199
+ bytes12 hashSeed
154
200
  ) internal view returns (bool) {
201
+ PolyptychProjectConfig
202
+ storage polyptychProjectConfig = getPolyptychProjectConfig({
203
+ projectId: projectId,
204
+ coreContract: coreContract
205
+ });
155
206
  return
156
- _polyptychProjectConfig.polyptychPanelHashSeedIsMinted[_panelId][
157
- _hashSeed
207
+ polyptychProjectConfig.polyptychPanelHashSeedIsMinted[panelId][
208
+ hashSeed
158
209
  ];
159
210
  }
211
+
212
+ /**
213
+ * Loads the PolyptychProjectConfig for a given project and core
214
+ * contract.
215
+ * @param projectId Project Id to get config for
216
+ * @param coreContract Core contract address to get config for
217
+ */
218
+ function getPolyptychProjectConfig(
219
+ uint256 projectId,
220
+ address coreContract
221
+ ) internal view returns (PolyptychProjectConfig storage) {
222
+ return s().polyptychProjectConfigs[coreContract][projectId];
223
+ }
224
+
225
+ /**
226
+ * @notice Return the storage struct for reading and writing. This library
227
+ * uses a diamond storage pattern when managing storage.
228
+ * @return storageStruct The PolyptychLibStorage struct.
229
+ */
230
+ function s()
231
+ internal
232
+ pure
233
+ returns (PolyptychLibStorage storage storageStruct)
234
+ {
235
+ bytes32 position = POLYPTYCH_LIB_STORAGE_POSITION;
236
+ assembly ("memory-safe") {
237
+ storageStruct.slot := position
238
+ }
239
+ }
160
240
  }