@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
@@ -240,65 +240,60 @@ contract GenArt721CoreV3 is
240
240
  bool public newProjectsForbidden;
241
241
 
242
242
  /// version & type of this core contract
243
- string public constant coreVersion = "v3.0.0";
243
+ string public constant coreVersion = "v3.0.2";
244
244
  string public constant coreType = "GenArt721CoreV3";
245
245
 
246
246
  /// default base URI to initialize all new project projectBaseURI values to
247
247
  string public defaultBaseURI;
248
248
 
249
- modifier onlyNonZeroAddress(address _address) {
249
+ function _onlyNonZeroAddress(address _address) internal pure {
250
250
  require(_address != address(0), "Must input non-zero address");
251
- _;
252
251
  }
253
252
 
254
- modifier onlyNonEmptyString(string memory _string) {
253
+ function _onlyNonEmptyString(string memory _string) internal pure {
255
254
  require(bytes(_string).length != 0, "Must input non-empty string");
256
- _;
257
255
  }
258
256
 
259
- modifier onlyValidTokenId(uint256 _tokenId) {
257
+ function _onlyValidTokenId(uint256 _tokenId) internal view {
260
258
  require(_exists(_tokenId), "Token ID does not exist");
261
- _;
262
259
  }
263
260
 
264
- modifier onlyValidProjectId(uint256 _projectId) {
261
+ function _onlyValidProjectId(uint256 _projectId) internal view {
265
262
  require(
266
263
  (_projectId >= startingProjectId) && (_projectId < _nextProjectId),
267
264
  "Project ID does not exist"
268
265
  );
269
- _;
270
266
  }
271
267
 
272
- modifier onlyUnlocked(uint256 _projectId) {
268
+ function _onlyUnlocked(uint256 _projectId) internal view {
273
269
  // Note: calling `_projectUnlocked` enforces that the `_projectId`
274
270
  // passed in is valid.`
275
271
  require(_projectUnlocked(_projectId), "Only if unlocked");
276
- _;
277
272
  }
278
273
 
279
- modifier onlyAdminACL(bytes4 _selector) {
274
+ function _onlyAdminACL(bytes4 _selector) internal {
280
275
  require(
281
276
  adminACLAllowed(msg.sender, address(this), _selector),
282
277
  "Only Admin ACL allowed"
283
278
  );
284
- _;
285
279
  }
286
280
 
287
- modifier onlyArtist(uint256 _projectId) {
281
+ function _onlyArtist(uint256 _projectId) internal view {
288
282
  require(
289
283
  msg.sender == projectIdToFinancials[_projectId].artistAddress,
290
284
  "Only artist"
291
285
  );
292
- _;
293
286
  }
294
287
 
295
- modifier onlyArtistOrAdminACL(uint256 _projectId, bytes4 _selector) {
288
+ function _onlyArtistOrAdminACL(
289
+ uint256 _projectId,
290
+ bytes4 _selector
291
+ ) internal {
296
292
  require(
297
293
  msg.sender == projectIdToFinancials[_projectId].artistAddress ||
298
294
  adminACLAllowed(msg.sender, address(this), _selector),
299
295
  "Only artist or Admin ACL allowed"
300
296
  );
301
- _;
302
297
  }
303
298
 
304
299
  /**
@@ -307,10 +302,10 @@ contract GenArt721CoreV3 is
307
302
  * contract to continue to function if the owner decides to renounce
308
303
  * ownership.
309
304
  */
310
- modifier onlyAdminACLOrRenouncedArtist(
305
+ function _onlyAdminACLOrRenouncedArtist(
311
306
  uint256 _projectId,
312
307
  bytes4 _selector
313
- ) {
308
+ ) internal {
314
309
  require(
315
310
  adminACLAllowed(msg.sender, address(this), _selector) ||
316
311
  (owner() == address(0) &&
@@ -318,7 +313,6 @@ contract GenArt721CoreV3 is
318
313
  projectIdToFinancials[_projectId].artistAddress),
319
314
  "Only Admin ACL allowed, or artist if owner has renounced"
320
315
  );
321
- _;
322
316
  }
323
317
 
324
318
  /**
@@ -340,10 +334,8 @@ contract GenArt721CoreV3 is
340
334
  address _randomizerContract,
341
335
  address _adminACLContract,
342
336
  uint248 _startingProjectId
343
- )
344
- ERC721_PackedHashSeed(_tokenName, _tokenSymbol)
345
- onlyNonZeroAddress(_randomizerContract)
346
- {
337
+ ) ERC721_PackedHashSeed(_tokenName, _tokenSymbol) {
338
+ _onlyNonZeroAddress(_randomizerContract);
347
339
  // record contracts starting project ID
348
340
  // casting-up is safe
349
341
  startingProjectId = uint256(_startingProjectId);
@@ -447,10 +439,8 @@ contract GenArt721CoreV3 is
447
439
  * for indexing purposes, it must be emitted by the randomizer. This is to
448
440
  * minimize gas when minting.
449
441
  */
450
- function setTokenHash_8PT(
451
- uint256 _tokenId,
452
- bytes32 _hashSeed
453
- ) external onlyValidTokenId(_tokenId) {
442
+ function setTokenHash_8PT(uint256 _tokenId, bytes32 _hashSeed) external {
443
+ _onlyValidTokenId(_tokenId);
454
444
  OwnerAndHashSeed storage ownerAndHashSeed = _ownersAndHashSeeds[
455
445
  _tokenId
456
446
  ];
@@ -500,11 +490,9 @@ contract GenArt721CoreV3 is
500
490
  */
501
491
  function updateArtblocksCurationRegistryAddress(
502
492
  address _artblocksCurationRegistryAddress
503
- )
504
- external
505
- onlyAdminACL(this.updateArtblocksCurationRegistryAddress.selector)
506
- onlyNonZeroAddress(_artblocksCurationRegistryAddress)
507
- {
493
+ ) external {
494
+ _onlyAdminACL(this.updateArtblocksCurationRegistryAddress.selector);
495
+ _onlyNonZeroAddress(_artblocksCurationRegistryAddress);
508
496
  artblocksCurationRegistryAddress = _artblocksCurationRegistryAddress;
509
497
  emit PlatformUpdated(FIELD_ARTBLOCKS_CURATION_REGISTRY_ADDRESS);
510
498
  }
@@ -516,11 +504,9 @@ contract GenArt721CoreV3 is
516
504
  */
517
505
  function updateArtblocksDependencyRegistryAddress(
518
506
  address _artblocksDependencyRegistryAddress
519
- )
520
- external
521
- onlyAdminACL(this.updateArtblocksDependencyRegistryAddress.selector)
522
- onlyNonZeroAddress(_artblocksDependencyRegistryAddress)
523
- {
507
+ ) external {
508
+ _onlyAdminACL(this.updateArtblocksDependencyRegistryAddress.selector);
509
+ _onlyNonZeroAddress(_artblocksDependencyRegistryAddress);
524
510
  artblocksDependencyRegistryAddress = _artblocksDependencyRegistryAddress;
525
511
  emit PlatformUpdated(FIELD_ARTBLOCKS_DEPENDENCY_REGISTRY_ADDRESS);
526
512
  }
@@ -533,11 +519,9 @@ contract GenArt721CoreV3 is
533
519
  */
534
520
  function updateArtblocksPrimarySalesAddress(
535
521
  address payable _artblocksPrimarySalesAddress
536
- )
537
- external
538
- onlyAdminACL(this.updateArtblocksPrimarySalesAddress.selector)
539
- onlyNonZeroAddress(_artblocksPrimarySalesAddress)
540
- {
522
+ ) external {
523
+ _onlyAdminACL(this.updateArtblocksPrimarySalesAddress.selector);
524
+ _onlyNonZeroAddress(_artblocksPrimarySalesAddress);
541
525
  _updateArtblocksPrimarySalesAddress(_artblocksPrimarySalesAddress);
542
526
  }
543
527
 
@@ -549,11 +533,9 @@ contract GenArt721CoreV3 is
549
533
  */
550
534
  function updateArtblocksSecondarySalesAddress(
551
535
  address payable _artblocksSecondarySalesAddress
552
- )
553
- external
554
- onlyAdminACL(this.updateArtblocksSecondarySalesAddress.selector)
555
- onlyNonZeroAddress(_artblocksSecondarySalesAddress)
556
- {
536
+ ) external {
537
+ _onlyAdminACL(this.updateArtblocksSecondarySalesAddress.selector);
538
+ _onlyNonZeroAddress(_artblocksSecondarySalesAddress);
557
539
  _updateArtblocksSecondarySalesAddress(_artblocksSecondarySalesAddress);
558
540
  }
559
541
 
@@ -565,10 +547,8 @@ contract GenArt721CoreV3 is
565
547
  */
566
548
  function updateArtblocksPrimarySalesPercentage(
567
549
  uint256 artblocksPrimarySalesPercentage_
568
- )
569
- external
570
- onlyAdminACL(this.updateArtblocksPrimarySalesPercentage.selector)
571
- {
550
+ ) external {
551
+ _onlyAdminACL(this.updateArtblocksPrimarySalesPercentage.selector);
572
552
  require(
573
553
  artblocksPrimarySalesPercentage_ <=
574
554
  ART_BLOCKS_MAX_PRIMARY_SALES_PERCENTAGE,
@@ -593,7 +573,8 @@ contract GenArt721CoreV3 is
593
573
  */
594
574
  function updateArtblocksSecondarySalesBPS(
595
575
  uint256 _artblocksSecondarySalesBPS
596
- ) external onlyAdminACL(this.updateArtblocksSecondarySalesBPS.selector) {
576
+ ) external {
577
+ _onlyAdminACL(this.updateArtblocksSecondarySalesBPS.selector);
597
578
  require(
598
579
  _artblocksSecondarySalesBPS <= ART_BLOCKS_MAX_SECONDARY_SALES_BPS,
599
580
  "Max of ART_BLOCKS_MAX_SECONDARY_SALES_BPS BPS"
@@ -606,13 +587,9 @@ contract GenArt721CoreV3 is
606
587
  * @notice Updates minter to `_address`.
607
588
  * @param _address Address of new minter.
608
589
  */
609
- function updateMinterContract(
610
- address _address
611
- )
612
- external
613
- onlyAdminACL(this.updateMinterContract.selector)
614
- onlyNonZeroAddress(_address)
615
- {
590
+ function updateMinterContract(address _address) external {
591
+ _onlyAdminACL(this.updateMinterContract.selector);
592
+ _onlyNonZeroAddress(_address);
616
593
  minterContract = _address;
617
594
  emit MinterUpdated(_address);
618
595
  }
@@ -621,13 +598,9 @@ contract GenArt721CoreV3 is
621
598
  * @notice Updates randomizer to `_randomizerAddress`.
622
599
  * @param _randomizerAddress Address of new randomizer.
623
600
  */
624
- function updateRandomizerAddress(
625
- address _randomizerAddress
626
- )
627
- external
628
- onlyAdminACL(this.updateRandomizerAddress.selector)
629
- onlyNonZeroAddress(_randomizerAddress)
630
- {
601
+ function updateRandomizerAddress(address _randomizerAddress) external {
602
+ _onlyAdminACL(this.updateRandomizerAddress.selector);
603
+ _onlyNonZeroAddress(_randomizerAddress);
631
604
  _updateRandomizerAddress(_randomizerAddress);
632
605
  }
633
606
 
@@ -635,13 +608,9 @@ contract GenArt721CoreV3 is
635
608
  * @notice Toggles project `_projectId` as active/inactive.
636
609
  * @param _projectId Project ID to be toggled.
637
610
  */
638
- function toggleProjectIsActive(
639
- uint256 _projectId
640
- )
641
- external
642
- onlyAdminACL(this.toggleProjectIsActive.selector)
643
- onlyValidProjectId(_projectId)
644
- {
611
+ function toggleProjectIsActive(uint256 _projectId) external {
612
+ _onlyAdminACL(this.toggleProjectIsActive.selector);
613
+ _onlyValidProjectId(_projectId);
645
614
  projects[_projectId].active = !projects[_projectId].active;
646
615
  emit ProjectUpdated(_projectId, FIELD_PROJECT_ACTIVE);
647
616
  }
@@ -682,12 +651,10 @@ contract GenArt721CoreV3 is
682
651
  uint256 _additionalPayeePrimarySalesPercentage,
683
652
  address payable _additionalPayeeSecondarySales,
684
653
  uint256 _additionalPayeeSecondarySalesPercentage
685
- )
686
- external
687
- onlyValidProjectId(_projectId)
688
- onlyArtist(_projectId)
689
- onlyNonZeroAddress(_artistAddress)
690
- {
654
+ ) external {
655
+ _onlyValidProjectId(_projectId);
656
+ _onlyArtist(_projectId);
657
+ _onlyNonZeroAddress(_artistAddress);
691
658
  ProjectFinance storage projectFinance = projectIdToFinancials[
692
659
  _projectId
693
660
  ];
@@ -802,15 +769,13 @@ contract GenArt721CoreV3 is
802
769
  uint256 _additionalPayeePrimarySalesPercentage,
803
770
  address payable _additionalPayeeSecondarySales,
804
771
  uint256 _additionalPayeeSecondarySalesPercentage
805
- )
806
- external
807
- onlyValidProjectId(_projectId)
808
- onlyAdminACLOrRenouncedArtist(
772
+ ) external {
773
+ _onlyValidProjectId(_projectId);
774
+ _onlyAdminACLOrRenouncedArtist(
809
775
  _projectId,
810
776
  this.adminAcceptArtistAddressesAndSplits.selector
811
- )
812
- onlyNonZeroAddress(_artistAddress)
813
- {
777
+ );
778
+ _onlyNonZeroAddress(_artistAddress);
814
779
  // checks
815
780
  require(
816
781
  proposedArtistAddressesAndSplitsHash[_projectId] ==
@@ -856,15 +821,13 @@ contract GenArt721CoreV3 is
856
821
  function updateProjectArtistAddress(
857
822
  uint256 _projectId,
858
823
  address payable _artistAddress
859
- )
860
- external
861
- onlyValidProjectId(_projectId)
862
- onlyAdminACLOrRenouncedArtist(
824
+ ) external {
825
+ _onlyValidProjectId(_projectId);
826
+ _onlyAdminACLOrRenouncedArtist(
863
827
  _projectId,
864
828
  this.updateProjectArtistAddress.selector
865
- )
866
- onlyNonZeroAddress(_artistAddress)
867
- {
829
+ );
830
+ _onlyNonZeroAddress(_artistAddress);
868
831
  projectIdToFinancials[_projectId].artistAddress = _artistAddress;
869
832
  emit ProjectUpdated(_projectId, FIELD_PROJECT_ARTIST_ADDRESS);
870
833
  }
@@ -873,9 +836,8 @@ contract GenArt721CoreV3 is
873
836
  * @notice Toggles paused state of project `_projectId`.
874
837
  * @param _projectId Project ID to be toggled.
875
838
  */
876
- function toggleProjectIsPaused(
877
- uint256 _projectId
878
- ) external onlyArtist(_projectId) {
839
+ function toggleProjectIsPaused(uint256 _projectId) external {
840
+ _onlyArtist(_projectId);
879
841
  projects[_projectId].paused = !projects[_projectId].paused;
880
842
  emit ProjectUpdated(_projectId, FIELD_PROJECT_PAUSED);
881
843
  }
@@ -889,12 +851,10 @@ contract GenArt721CoreV3 is
889
851
  function addProject(
890
852
  string memory _projectName,
891
853
  address payable _artistAddress
892
- )
893
- external
894
- onlyAdminACL(this.addProject.selector)
895
- onlyNonEmptyString(_projectName)
896
- onlyNonZeroAddress(_artistAddress)
897
- {
854
+ ) external {
855
+ _onlyAdminACL(this.addProject.selector);
856
+ _onlyNonEmptyString(_projectName);
857
+ _onlyNonZeroAddress(_artistAddress);
898
858
  require(!newProjectsForbidden, "New projects forbidden");
899
859
  uint256 projectId = _nextProjectId;
900
860
  projectIdToFinancials[projectId].artistAddress = _artistAddress;
@@ -910,10 +870,8 @@ contract GenArt721CoreV3 is
910
870
  /**
911
871
  * @notice Forever forbids new projects from being added to this contract.
912
872
  */
913
- function forbidNewProjects()
914
- external
915
- onlyAdminACL(this.forbidNewProjects.selector)
916
- {
873
+ function forbidNewProjects() external {
874
+ _onlyAdminACL(this.forbidNewProjects.selector);
917
875
  require(!newProjectsForbidden, "Already forbidden");
918
876
  _forbidNewProjects();
919
877
  }
@@ -926,12 +884,10 @@ contract GenArt721CoreV3 is
926
884
  function updateProjectName(
927
885
  uint256 _projectId,
928
886
  string memory _projectName
929
- )
930
- external
931
- onlyUnlocked(_projectId)
932
- onlyArtistOrAdminACL(_projectId, this.updateProjectName.selector)
933
- onlyNonEmptyString(_projectName)
934
- {
887
+ ) external {
888
+ _onlyUnlocked(_projectId);
889
+ _onlyArtistOrAdminACL(_projectId, this.updateProjectName.selector);
890
+ _onlyNonEmptyString(_projectName);
935
891
  projects[_projectId].name = _projectName;
936
892
  emit ProjectUpdated(_projectId, FIELD_PROJECT_NAME);
937
893
  }
@@ -945,12 +901,13 @@ contract GenArt721CoreV3 is
945
901
  function updateProjectArtistName(
946
902
  uint256 _projectId,
947
903
  string memory _projectArtistName
948
- )
949
- external
950
- onlyUnlocked(_projectId)
951
- onlyArtistOrAdminACL(_projectId, this.updateProjectArtistName.selector)
952
- onlyNonEmptyString(_projectArtistName)
953
- {
904
+ ) external {
905
+ _onlyUnlocked(_projectId);
906
+ _onlyArtistOrAdminACL(
907
+ _projectId,
908
+ this.updateProjectArtistName.selector
909
+ );
910
+ _onlyNonEmptyString(_projectArtistName);
954
911
  projects[_projectId].artist = _projectArtistName;
955
912
  emit ProjectUpdated(_projectId, FIELD_PROJECT_ARTIST_NAME);
956
913
  }
@@ -969,7 +926,8 @@ contract GenArt721CoreV3 is
969
926
  function updateProjectSecondaryMarketRoyaltyPercentage(
970
927
  uint256 _projectId,
971
928
  uint256 _secondMarketRoyalty
972
- ) external onlyArtist(_projectId) {
929
+ ) external {
930
+ _onlyArtist(_projectId);
973
931
  require(
974
932
  _secondMarketRoyalty <= ARTIST_MAX_SECONDARY_ROYALTY_PERCENTAGE,
975
933
  "Max of ARTIST_MAX_SECONDARY_ROYALTY_PERCENTAGE percent"
@@ -1017,7 +975,8 @@ contract GenArt721CoreV3 is
1017
975
  function updateProjectWebsite(
1018
976
  uint256 _projectId,
1019
977
  string memory _projectWebsite
1020
- ) external onlyArtist(_projectId) {
978
+ ) external {
979
+ _onlyArtist(_projectId);
1021
980
  projects[_projectId].website = _projectWebsite;
1022
981
  emit ProjectUpdated(_projectId, FIELD_PROJECT_WEBSITE);
1023
982
  }
@@ -1030,12 +989,10 @@ contract GenArt721CoreV3 is
1030
989
  function updateProjectLicense(
1031
990
  uint256 _projectId,
1032
991
  string memory _projectLicense
1033
- )
1034
- external
1035
- onlyUnlocked(_projectId)
1036
- onlyArtistOrAdminACL(_projectId, this.updateProjectLicense.selector)
1037
- onlyNonEmptyString(_projectLicense)
1038
- {
992
+ ) external {
993
+ _onlyUnlocked(_projectId);
994
+ _onlyArtistOrAdminACL(_projectId, this.updateProjectLicense.selector);
995
+ _onlyNonEmptyString(_projectLicense);
1039
996
  projects[_projectId].license = _projectLicense;
1040
997
  emit ProjectUpdated(_projectId, FIELD_PROJECT_LICENSE);
1041
998
  }
@@ -1052,7 +1009,8 @@ contract GenArt721CoreV3 is
1052
1009
  function updateProjectMaxInvocations(
1053
1010
  uint256 _projectId,
1054
1011
  uint24 _maxInvocations
1055
- ) external onlyArtist(_projectId) {
1012
+ ) external {
1013
+ _onlyArtist(_projectId);
1056
1014
  // CHECKS
1057
1015
  Project storage project = projects[_projectId];
1058
1016
  uint256 _invocations = project.invocations;
@@ -1083,12 +1041,10 @@ contract GenArt721CoreV3 is
1083
1041
  function addProjectScript(
1084
1042
  uint256 _projectId,
1085
1043
  string memory _script
1086
- )
1087
- external
1088
- onlyUnlocked(_projectId)
1089
- onlyArtistOrAdminACL(_projectId, this.addProjectScript.selector)
1090
- onlyNonEmptyString(_script)
1091
- {
1044
+ ) external {
1045
+ _onlyUnlocked(_projectId);
1046
+ _onlyArtistOrAdminACL(_projectId, this.addProjectScript.selector);
1047
+ _onlyNonEmptyString(_script);
1092
1048
  Project storage project = projects[_projectId];
1093
1049
  // store script in contract bytecode
1094
1050
  project.scriptBytecodeAddresses[project.scriptCount] = _script
@@ -1108,12 +1064,10 @@ contract GenArt721CoreV3 is
1108
1064
  uint256 _projectId,
1109
1065
  uint256 _scriptId,
1110
1066
  string memory _script
1111
- )
1112
- external
1113
- onlyUnlocked(_projectId)
1114
- onlyArtistOrAdminACL(_projectId, this.updateProjectScript.selector)
1115
- onlyNonEmptyString(_script)
1116
- {
1067
+ ) external {
1068
+ _onlyUnlocked(_projectId);
1069
+ _onlyArtistOrAdminACL(_projectId, this.updateProjectScript.selector);
1070
+ _onlyNonEmptyString(_script);
1117
1071
  Project storage project = projects[_projectId];
1118
1072
  require(_scriptId < project.scriptCount, "scriptId out of range");
1119
1073
  // purge old contract bytecode contract from the blockchain state
@@ -1136,13 +1090,12 @@ contract GenArt721CoreV3 is
1136
1090
  * @notice Removes last script from project `_projectId`.
1137
1091
  * @param _projectId Project to be updated.
1138
1092
  */
1139
- function removeProjectLastScript(
1140
- uint256 _projectId
1141
- )
1142
- external
1143
- onlyUnlocked(_projectId)
1144
- onlyArtistOrAdminACL(_projectId, this.removeProjectLastScript.selector)
1145
- {
1093
+ function removeProjectLastScript(uint256 _projectId) external {
1094
+ _onlyUnlocked(_projectId);
1095
+ _onlyArtistOrAdminACL(
1096
+ _projectId,
1097
+ this.removeProjectLastScript.selector
1098
+ );
1146
1099
  Project storage project = projects[_projectId];
1147
1100
  require(project.scriptCount > 0, "there are no scripts to remove");
1148
1101
  // purge old contract bytecode contract from the blockchain state
@@ -1174,11 +1127,12 @@ contract GenArt721CoreV3 is
1174
1127
  function updateProjectScriptType(
1175
1128
  uint256 _projectId,
1176
1129
  bytes32 _scriptTypeAndVersion
1177
- )
1178
- external
1179
- onlyUnlocked(_projectId)
1180
- onlyArtistOrAdminACL(_projectId, this.updateProjectScriptType.selector)
1181
- {
1130
+ ) external {
1131
+ _onlyUnlocked(_projectId);
1132
+ _onlyArtistOrAdminACL(
1133
+ _projectId,
1134
+ this.updateProjectScriptType.selector
1135
+ );
1182
1136
  Project storage project = projects[_projectId];
1183
1137
  // require exactly one @ symbol in _scriptTypeAndVersion
1184
1138
  require(
@@ -1202,12 +1156,13 @@ contract GenArt721CoreV3 is
1202
1156
  function updateProjectAspectRatio(
1203
1157
  uint256 _projectId,
1204
1158
  string memory _aspectRatio
1205
- )
1206
- external
1207
- onlyUnlocked(_projectId)
1208
- onlyArtistOrAdminACL(_projectId, this.updateProjectAspectRatio.selector)
1209
- onlyNonEmptyString(_aspectRatio)
1210
- {
1159
+ ) external {
1160
+ _onlyUnlocked(_projectId);
1161
+ _onlyArtistOrAdminACL(
1162
+ _projectId,
1163
+ this.updateProjectAspectRatio.selector
1164
+ );
1165
+ _onlyNonEmptyString(_aspectRatio);
1211
1166
  // Perform more detailed input validation for aspect ratio.
1212
1167
  bytes memory aspectRatioBytes = bytes(_aspectRatio);
1213
1168
  uint256 bytesLength = aspectRatioBytes.length;
@@ -1250,7 +1205,9 @@ contract GenArt721CoreV3 is
1250
1205
  function updateProjectBaseURI(
1251
1206
  uint256 _projectId,
1252
1207
  string memory _newBaseURI
1253
- ) external onlyArtist(_projectId) onlyNonEmptyString(_newBaseURI) {
1208
+ ) external {
1209
+ _onlyArtist(_projectId);
1210
+ _onlyNonEmptyString(_newBaseURI);
1254
1211
  projects[_projectId].projectBaseURI = _newBaseURI;
1255
1212
  emit ProjectUpdated(_projectId, FIELD_PROJECT_BASE_URI);
1256
1213
  }
@@ -1261,13 +1218,9 @@ contract GenArt721CoreV3 is
1261
1218
  * projects. Token URIs are determined by their project's `projectBaseURI`.
1262
1219
  * @param _defaultBaseURI New default base URI.
1263
1220
  */
1264
- function updateDefaultBaseURI(
1265
- string memory _defaultBaseURI
1266
- )
1267
- external
1268
- onlyAdminACL(this.updateDefaultBaseURI.selector)
1269
- onlyNonEmptyString(_defaultBaseURI)
1270
- {
1221
+ function updateDefaultBaseURI(string memory _defaultBaseURI) external {
1222
+ _onlyAdminACL(this.updateDefaultBaseURI.selector);
1223
+ _onlyNonEmptyString(_defaultBaseURI);
1271
1224
  _updateDefaultBaseURI(_defaultBaseURI);
1272
1225
  }
1273
1226
 
@@ -1670,9 +1623,9 @@ contract GenArt721CoreV3 is
1670
1623
  )
1671
1624
  external
1672
1625
  view
1673
- onlyValidTokenId(_tokenId)
1674
1626
  returns (address payable[] memory recipients, uint256[] memory bps)
1675
1627
  {
1628
+ _onlyValidTokenId(_tokenId);
1676
1629
  // initialize arrays with maximum potential length
1677
1630
  recipients = new address payable[](3);
1678
1631
  bps = new uint256[](3);
@@ -1867,7 +1820,8 @@ contract GenArt721CoreV3 is
1867
1820
  */
1868
1821
  function tokenURI(
1869
1822
  uint256 _tokenId
1870
- ) public view override onlyValidTokenId(_tokenId) returns (string memory) {
1823
+ ) public view override returns (string memory) {
1824
+ _onlyValidTokenId(_tokenId);
1871
1825
  string memory _projectBaseURI = projects[tokenIdToProjectId(_tokenId)]
1872
1826
  .projectBaseURI;
1873
1827
  return string.concat(_projectBaseURI, _tokenId.toString());
@@ -1987,9 +1941,8 @@ contract GenArt721CoreV3 is
1987
1941
  * @return bool true if project is unlocked, false otherwise.
1988
1942
  * @dev This also enforces that the `_projectId` passed in is valid.
1989
1943
  */
1990
- function _projectUnlocked(
1991
- uint256 _projectId
1992
- ) internal view onlyValidProjectId(_projectId) returns (bool) {
1944
+ function _projectUnlocked(uint256 _projectId) internal view returns (bool) {
1945
+ _onlyValidProjectId(_projectId);
1993
1946
  uint256 projectCompletedTimestamp = projects[_projectId]
1994
1947
  .completedTimestamp;
1995
1948
  bool projectOpen = projectCompletedTimestamp == 0;