@artblocks/contracts 1.0.1 → 1.0.2

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 (87) hide show
  1. package/.env.example +8 -1
  2. package/README.md +42 -157
  3. package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
  4. package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +2 -2
  5. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +2 -2
  6. package/artifacts/contracts/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +2 -2
  7. package/artifacts/contracts/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +2229 -0
  8. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
  9. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
  10. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  11. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  12. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
  13. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
  14. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
  15. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
  16. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
  17. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
  18. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
  19. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
  20. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
  21. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  22. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  23. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  24. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  25. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +2 -2
  26. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterSEAV0.sol/IFilteredMinterSEAV0.json +1032 -0
  27. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +149 -0
  28. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +149 -0
  29. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +130 -0
  30. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +1066 -0
  31. package/artifacts/contracts/interfaces/0.8.x/IWETH.sol/IWETH.json +55 -0
  32. package/artifacts/contracts/libs/integration-refs/weth9/weth9.sol/WETH9_.json +295 -0
  33. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  34. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -2
  35. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV4.sol/MinterDAExpV4.json +2 -2
  36. package/artifacts/contracts/minter-suite/Minters/MinterDALinV4.sol/MinterDALinV4.json +2 -2
  37. package/artifacts/contracts/minter-suite/Minters/MinterHolderV4.sol/MinterHolderV4.json +2 -2
  38. package/artifacts/contracts/minter-suite/Minters/MinterMerkleV5.sol/MinterMerkleV5.json +2 -2
  39. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +130 -0
  40. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
  41. package/artifacts/contracts/minter-suite/Minters/MinterSEAV0.sol/MinterSEAV0.json +1310 -0
  42. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
  43. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV4.sol/MinterSetPriceV4.json +2 -2
  44. package/artifacts/contracts/mock/DeadReceiverBidderMock.sol/DeadReceiverBidderMock.json +33 -0
  45. package/artifacts/contracts/mock/GasLimitReceiverBidderMock.sol/GasLimitReceiverBidderMock.json +46 -0
  46. package/artifacts/contracts/mock/GasLimitReceiverMock.sol/GasLimitReceiverMock.json +28 -0
  47. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +2 -2
  48. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  49. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +51 -0
  50. package/artifacts/contracts/{BasicRandomizer.sol → randomizer/BasicRandomizer.sol}/BasicRandomizer.json +3 -3
  51. package/artifacts/contracts/randomizer/BasicRandomizerBase_v0_0_0.sol/RandomizerBase.json +10 -0
  52. package/artifacts/contracts/randomizer/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +229 -0
  53. package/artifacts/contracts/randomizer/RandomizerV2.sol/BasicRandomizerV2.json +102 -0
  54. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +2 -2
  55. package/contracts/DependencyRegistryV0.sol +74 -113
  56. package/contracts/GenArt721CoreV3.sol +124 -171
  57. package/contracts/GenArt721CoreV3_Engine.sol +136 -198
  58. package/contracts/GenArt721CoreV3_Engine_Flex.sol +2274 -0
  59. package/contracts/explorations/GenArt721CoreV3_Explorations.sol +147 -176
  60. package/contracts/interfaces/0.8.x/IFilteredMinterSEAV0.sol +145 -0
  61. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol +39 -0
  62. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol +0 -3
  63. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol +132 -0
  64. package/contracts/interfaces/0.8.x/IWETH.sol +11 -0
  65. package/contracts/libs/integration-refs/weth9/weth9.sol +763 -0
  66. package/contracts/minter-suite/MinterFilter/MinterFilterV1.sol +35 -47
  67. package/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol +26 -34
  68. package/contracts/minter-suite/Minters/MinterDAExpV4.sol +16 -21
  69. package/contracts/minter-suite/Minters/MinterDALinV4.sol +15 -17
  70. package/contracts/minter-suite/Minters/MinterHolderV4.sol +19 -19
  71. package/contracts/minter-suite/Minters/MinterMerkleV5.sol +13 -15
  72. package/contracts/minter-suite/Minters/MinterPolyptychV0.sol +23 -23
  73. package/contracts/minter-suite/Minters/MinterSEAV0.sol +1224 -0
  74. package/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol +11 -11
  75. package/contracts/minter-suite/Minters/MinterSetPriceV4.sol +9 -10
  76. package/contracts/mock/DeadReceiverBidderMock.sol +23 -0
  77. package/contracts/mock/GasLimitReceiverBidderMock.sol +23 -0
  78. package/contracts/mock/GasLimitReceiverMock.sol +19 -0
  79. package/contracts/mock/RandomizerV2_NoAssignMock.sol +2 -11
  80. package/contracts/mock/ReentrancySEAMock.sol +36 -0
  81. package/contracts/{BasicRandomizer.sol → randomizer/BasicRandomizer.sol} +1 -1
  82. package/contracts/randomizer/BasicRandomizerBase_v0_0_0.sol +23 -0
  83. package/contracts/{BasicPolyptychRandomizerV0.sol → randomizer/PolyptychRandomizerV0.sol} +19 -28
  84. package/contracts/{BasicRandomizerV2.sol → randomizer/RandomizerV2.sol} +5 -13
  85. package/package.json +27 -14
  86. package/artifacts/contracts/BasicPolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +0 -229
  87. package/artifacts/contracts/BasicRandomizerV2.sol/BasicRandomizerV2.json +0 -102
@@ -115,13 +115,12 @@ contract MinterMerkleV5 is
115
115
  mapping(uint256 => mapping(address => uint256))
116
116
  public projectUserMintInvocations;
117
117
 
118
- modifier onlyArtist(uint256 _projectId) {
118
+ function _onlyArtist(uint256 _projectId) internal view {
119
119
  require(
120
120
  msg.sender ==
121
121
  genArtCoreContract_Base.projectIdToArtistAddress(_projectId),
122
122
  "Only Artist"
123
123
  );
124
- _;
125
124
  }
126
125
 
127
126
  /**
@@ -169,10 +168,8 @@ contract MinterMerkleV5 is
169
168
  * @param _root root of Merkle tree defining addresses allowed to mint
170
169
  * on project `_projectId`.
171
170
  */
172
- function updateMerkleRoot(
173
- uint256 _projectId,
174
- bytes32 _root
175
- ) external onlyArtist(_projectId) {
171
+ function updateMerkleRoot(uint256 _projectId, bytes32 _root) external {
172
+ _onlyArtist(_projectId);
176
173
  require(_root != bytes32(0), "Root must be provided");
177
174
  projectMerkleRoot[_projectId] = _root;
178
175
  emit ConfigValueSet(_projectId, CONFIG_MERKLE_ROOT, _root);
@@ -224,7 +221,8 @@ contract MinterMerkleV5 is
224
221
  function setProjectInvocationsPerAddress(
225
222
  uint256 _projectId,
226
223
  uint24 _maxInvocationsPerAddress
227
- ) external onlyArtist(_projectId) {
224
+ ) external {
225
+ _onlyArtist(_projectId);
228
226
  ProjectConfig storage _projectConfig = projectConfig[_projectId];
229
227
  // use override value instead of the contract's default
230
228
  // @dev this never changes from true to false; default value is only
@@ -253,9 +251,8 @@ contract MinterMerkleV5 is
253
251
  * @dev this enables gas reduction after maxInvocations have been reached -
254
252
  * core contracts shall still enforce a maxInvocation check during mint.
255
253
  */
256
- function setProjectMaxInvocations(
257
- uint256 _projectId
258
- ) public onlyArtist(_projectId) {
254
+ function setProjectMaxInvocations(uint256 _projectId) public {
255
+ _onlyArtist(_projectId);
259
256
  uint256 maxInvocations;
260
257
  uint256 invocations;
261
258
  (invocations, maxInvocations, , , , ) = genArtCoreContract_Base
@@ -287,7 +284,8 @@ contract MinterMerkleV5 is
287
284
  function manuallyLimitProjectMaxInvocations(
288
285
  uint256 _projectId,
289
286
  uint256 _maxInvocations
290
- ) external onlyArtist(_projectId) {
287
+ ) external {
288
+ _onlyArtist(_projectId);
291
289
  // CHECKS
292
290
  // ensure that the manually set maxInvocations is not greater than what is set on the core contract
293
291
  uint256 maxInvocations;
@@ -318,9 +316,8 @@ contract MinterMerkleV5 is
318
316
  * @notice Warning: Disabling purchaseTo is not supported on this minter.
319
317
  * This method exists purely for interface-conformance purposes.
320
318
  */
321
- function togglePurchaseToDisabled(
322
- uint256 _projectId
323
- ) external view onlyArtist(_projectId) {
319
+ function togglePurchaseToDisabled(uint256 _projectId) external view {
320
+ _onlyArtist(_projectId);
324
321
  revert("Action not supported");
325
322
  }
326
323
 
@@ -377,7 +374,8 @@ contract MinterMerkleV5 is
377
374
  function updatePricePerTokenInWei(
378
375
  uint256 _projectId,
379
376
  uint256 _pricePerTokenInWei
380
- ) external onlyArtist(_projectId) {
377
+ ) external {
378
+ _onlyArtist(_projectId);
381
379
  ProjectConfig storage _projectConfig = projectConfig[_projectId];
382
380
  _projectConfig.pricePerTokenInWei = _pricePerTokenInWei;
383
381
  _projectConfig.priceIsConfigured = true;
@@ -146,9 +146,9 @@ contract MinterPolyptychV0 is
146
146
  mapping(uint256 => mapping(address => mapping(uint256 => bool)))
147
147
  public allowedProjectHolders;
148
148
 
149
- // modifier to restrict access to only AdminACL allowed calls
149
+ // function to restrict access to only AdminACL allowed calls
150
150
  // @dev defers which ACL contract is used to the core contract
151
- modifier onlyCoreAdminACL(bytes4 _selector) {
151
+ function _onlyCoreAdminACL(bytes4 _selector) internal {
152
152
  require(
153
153
  genArtCoreContract.adminACLAllowed(
154
154
  msg.sender,
@@ -157,16 +157,14 @@ contract MinterPolyptychV0 is
157
157
  ),
158
158
  "Only Core AdminACL allowed"
159
159
  );
160
- _;
161
160
  }
162
161
 
163
- modifier onlyArtist(uint256 _projectId) {
162
+ function _onlyArtist(uint256 _projectId) internal view {
164
163
  require(
165
164
  msg.sender ==
166
165
  genArtCoreContract.projectIdToArtistAddress(_projectId),
167
166
  "Only Artist"
168
167
  );
169
- _;
170
168
  }
171
169
 
172
170
  /**
@@ -229,9 +227,8 @@ contract MinterPolyptychV0 is
229
227
  * `projectId = tokenId / 1_000_000`
230
228
  * @param _NFTAddress NFT core address to be registered.
231
229
  */
232
- function registerNFTAddress(
233
- address _NFTAddress
234
- ) external onlyCoreAdminACL(this.registerNFTAddress.selector) {
230
+ function registerNFTAddress(address _NFTAddress) external {
231
+ _onlyCoreAdminACL(this.registerNFTAddress.selector);
235
232
  // check that core contract implements the `tokenIdToHashSeed` function
236
233
  IGenArt721CoreContractV3WithRandomizer(_NFTAddress).tokenIdToHashSeed(
237
234
  0
@@ -246,9 +243,8 @@ contract MinterPolyptychV0 is
246
243
  * considered for adding to future allowlists.
247
244
  * @param _NFTAddress NFT core address to be unregistered.
248
245
  */
249
- function unregisterNFTAddress(
250
- address _NFTAddress
251
- ) external onlyCoreAdminACL(this.unregisterNFTAddress.selector) {
246
+ function unregisterNFTAddress(address _NFTAddress) external {
247
+ _onlyCoreAdminACL(this.unregisterNFTAddress.selector);
252
248
  _registeredNFTAddresses.remove(_NFTAddress);
253
249
  emit UnregisteredNFTAddress(_NFTAddress);
254
250
  }
@@ -287,7 +283,8 @@ contract MinterPolyptychV0 is
287
283
  uint256[] memory _ownedNFTProjectIdsAdd,
288
284
  address[] memory _ownedNFTAddressesRemove,
289
285
  uint256[] memory _ownedNFTProjectIdsRemove
290
- ) external onlyArtist(_projectId) {
286
+ ) external {
287
+ _onlyArtist(_projectId);
291
288
  allowHoldersOfProjects(
292
289
  _projectId,
293
290
  _ownedNFTAddressesAdd,
@@ -339,7 +336,8 @@ contract MinterPolyptychV0 is
339
336
  function manuallyLimitProjectMaxInvocations(
340
337
  uint256 _projectId,
341
338
  uint256 _maxInvocations
342
- ) external onlyArtist(_projectId) {
339
+ ) external {
340
+ _onlyArtist(_projectId);
343
341
  // CHECKS
344
342
  // ensure that the manually set maxInvocations is not greater than what is set on the core contract
345
343
  uint256 maxInvocations;
@@ -376,7 +374,8 @@ contract MinterPolyptychV0 is
376
374
  function updatePricePerTokenInWei(
377
375
  uint256 _projectId,
378
376
  uint256 _pricePerTokenInWei
379
- ) external onlyArtist(_projectId) {
377
+ ) external {
378
+ _onlyArtist(_projectId);
380
379
  ProjectConfig storage _projectConfig = projectConfig[_projectId];
381
380
  _projectConfig.pricePerTokenInWei = _pricePerTokenInWei;
382
381
  _projectConfig.priceIsConfigured = true;
@@ -404,7 +403,8 @@ contract MinterPolyptychV0 is
404
403
  uint256 _projectId,
405
404
  string memory _currencySymbol,
406
405
  address _currencyAddress
407
- ) external onlyArtist(_projectId) {
406
+ ) external {
407
+ _onlyArtist(_projectId);
408
408
  // require null address if symbol is "ETH"
409
409
  require(
410
410
  (keccak256(abi.encodePacked(_currencySymbol)) ==
@@ -531,9 +531,8 @@ contract MinterPolyptychV0 is
531
531
  * @notice Warning: Disabling purchaseTo is not supported on this minter.
532
532
  * This method exists purely for interface-conformance purposes.
533
533
  */
534
- function togglePurchaseToDisabled(
535
- uint256 _projectId
536
- ) external view onlyArtist(_projectId) {
534
+ function togglePurchaseToDisabled(uint256 _projectId) external view {
535
+ _onlyArtist(_projectId);
537
536
  revert("Action not supported");
538
537
  }
539
538
 
@@ -880,7 +879,8 @@ contract MinterPolyptychV0 is
880
879
  uint256 _projectId,
881
880
  address[] memory _ownedNFTAddresses,
882
881
  uint256[] memory _ownedNFTProjectIds
883
- ) public onlyArtist(_projectId) {
882
+ ) public {
883
+ _onlyArtist(_projectId);
884
884
  // require same length arrays
885
885
  require(
886
886
  _ownedNFTAddresses.length == _ownedNFTProjectIds.length,
@@ -925,7 +925,8 @@ contract MinterPolyptychV0 is
925
925
  uint256 _projectId,
926
926
  address[] memory _ownedNFTAddresses,
927
927
  uint256[] memory _ownedNFTProjectIds
928
- ) public onlyArtist(_projectId) {
928
+ ) public {
929
+ _onlyArtist(_projectId);
929
930
  // require same length arrays
930
931
  require(
931
932
  _ownedNFTAddresses.length == _ownedNFTProjectIds.length,
@@ -950,9 +951,8 @@ contract MinterPolyptychV0 is
950
951
  * @notice Allows the artist to increment the minter to the next polyptych panel
951
952
  * @param _projectId Project ID to increment to its next polyptych panel
952
953
  */
953
- function incrementPolyptychProjectPanelId(
954
- uint256 _projectId
955
- ) public onlyArtist(_projectId) {
954
+ function incrementPolyptychProjectPanelId(uint256 _projectId) public {
955
+ _onlyArtist(_projectId);
956
956
  projectConfig[_projectId].polyptychPanelId++;
957
957
  }
958
958