@artblocks/contracts 1.0.0 → 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.
- package/.env.example +8 -1
- package/README.md +44 -165
- package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
- package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +2 -2
- package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +2 -2
- package/artifacts/contracts/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +2 -2
- package/artifacts/contracts/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +2229 -0
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV0.sol/MinterDAExpV0.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV1.sol/MinterDAExpV1.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
- package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExpSettlement}/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +3 -3
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV0.sol/MinterDALinV0.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV1.sol/MinterDALinV1.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV0.sol/MinterHolderV0.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV0.sol/MinterMerkleV0.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV0.sol/MinterSetPriceV0.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV1.sol/MinterSetPriceV1.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol/MinterSetPriceERC20V0.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol/MinterSetPriceERC20V1.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
- package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
- package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +2 -2
- package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterDAExpSettlementV1.sol/IFilteredMinterDAExpSettlementV1.json +767 -0
- package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterSEAV0.sol/IFilteredMinterSEAV0.json +1032 -0
- package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +149 -0
- package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +149 -0
- package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +130 -0
- package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +1066 -0
- package/artifacts/contracts/interfaces/0.8.x/IMinterFilterV0.sol/IMinterFilterV0.json +6 -0
- package/artifacts/contracts/interfaces/0.8.x/IRandomizerPolyptychV0.sol/IRandomizerPolyptychV0.json +87 -0
- package/artifacts/contracts/interfaces/0.8.x/IRandomizerV2.sol/IRandomizerV2.json +1 -1
- package/artifacts/contracts/interfaces/0.8.x/IWETH.sol/IWETH.json +55 -0
- package/artifacts/contracts/libs/integration-refs/weth9/weth9.sol/WETH9_.json +295 -0
- package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV0.sol/MinterFilterV0.json +8 -2
- package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +34 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +1127 -0
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpV4.sol/MinterDAExpV4.json +15 -2
- package/artifacts/contracts/minter-suite/Minters/MinterDALinV4.sol/MinterDALinV4.json +15 -2
- package/artifacts/contracts/minter-suite/Minters/MinterHolderV4.sol/MinterHolderV4.json +15 -2
- package/artifacts/contracts/minter-suite/Minters/MinterMerkleV5.sol/MinterMerkleV5.json +15 -2
- package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +792 -0
- package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/MinterPolyptychV0.json +1268 -0
- package/artifacts/contracts/minter-suite/Minters/MinterSEAV0.sol/MinterSEAV0.json +1310 -0
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +15 -2
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV4.sol/MinterSetPriceV4.json +15 -2
- package/artifacts/contracts/mock/DeadReceiverBidderMock.sol/DeadReceiverBidderMock.json +33 -0
- package/artifacts/contracts/mock/GasLimitReceiverBidderMock.sol/GasLimitReceiverBidderMock.json +46 -0
- package/artifacts/contracts/mock/GasLimitReceiverMock.sol/GasLimitReceiverMock.json +28 -0
- package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +2 -2
- package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +3 -3
- package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +51 -0
- package/artifacts/contracts/{BasicRandomizer.sol → randomizer/BasicRandomizer.sol}/BasicRandomizer.json +3 -3
- package/artifacts/contracts/randomizer/BasicRandomizerBase_v0_0_0.sol/RandomizerBase.json +10 -0
- package/artifacts/contracts/randomizer/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +229 -0
- package/artifacts/contracts/randomizer/RandomizerV2.sol/BasicRandomizerV2.json +102 -0
- package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +2 -2
- package/contracts/DependencyRegistryV0.sol +74 -113
- package/contracts/GenArt721CoreV3.sol +124 -171
- package/contracts/GenArt721CoreV3_Engine.sol +136 -198
- package/contracts/GenArt721CoreV3_Engine_Flex.sol +2274 -0
- package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExpSettlement}/MinterDAExpSettlementV1.sol +4 -4
- package/contracts/explorations/GenArt721CoreV3_Explorations.sol +147 -176
- package/contracts/interfaces/0.8.x/IFilteredMinterDAExpSettlementV1.sol +21 -0
- package/contracts/interfaces/0.8.x/IFilteredMinterSEAV0.sol +145 -0
- package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol +39 -0
- package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol +0 -3
- package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol +132 -0
- package/contracts/interfaces/0.8.x/IMinterFilterV0.sol +6 -0
- package/contracts/interfaces/0.8.x/IRandomizerPolyptychV0.sol +31 -0
- package/contracts/interfaces/0.8.x/IRandomizerV2.sol +5 -2
- package/contracts/interfaces/0.8.x/IWETH.sol +11 -0
- package/contracts/libs/integration-refs/weth9/weth9.sol +763 -0
- package/contracts/minter-suite/MinterFilter/MinterFilterV1.sol +53 -47
- package/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol +1304 -0
- package/contracts/minter-suite/Minters/MinterDAExpV4.sol +47 -24
- package/contracts/minter-suite/Minters/MinterDALinV4.sol +46 -21
- package/contracts/minter-suite/Minters/MinterHolderV4.sol +54 -25
- package/contracts/minter-suite/Minters/MinterMerkleV5.sol +47 -20
- package/contracts/minter-suite/Minters/MinterPolyptychV0.sol +998 -0
- package/contracts/minter-suite/Minters/MinterSEAV0.sol +1224 -0
- package/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol +45 -16
- package/contracts/minter-suite/Minters/MinterSetPriceV4.sol +40 -13
- package/contracts/mock/DeadReceiverBidderMock.sol +23 -0
- package/contracts/mock/GasLimitReceiverBidderMock.sol +23 -0
- package/contracts/mock/GasLimitReceiverMock.sol +19 -0
- package/contracts/mock/RandomizerV2_NoAssignMock.sol +2 -11
- package/contracts/mock/ReentrancySEAMock.sol +36 -0
- package/contracts/{BasicRandomizer.sol → randomizer/BasicRandomizer.sol} +1 -1
- package/contracts/randomizer/BasicRandomizerBase_v0_0_0.sol +23 -0
- package/contracts/randomizer/PolyptychRandomizerV0.sol +117 -0
- package/contracts/{BasicRandomizerV2.sol → randomizer/RandomizerV2.sol} +7 -15
- package/package.json +32 -13
- 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.
|
|
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
|
-
|
|
249
|
+
function _onlyNonZeroAddress(address _address) internal pure {
|
|
250
250
|
require(_address != address(0), "Must input non-zero address");
|
|
251
|
-
_;
|
|
252
251
|
}
|
|
253
252
|
|
|
254
|
-
|
|
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
|
-
|
|
257
|
+
function _onlyValidTokenId(uint256 _tokenId) internal view {
|
|
260
258
|
require(_exists(_tokenId), "Token ID does not exist");
|
|
261
|
-
_;
|
|
262
259
|
}
|
|
263
260
|
|
|
264
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
505
|
-
|
|
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
|
-
|
|
521
|
-
|
|
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
|
-
|
|
538
|
-
|
|
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
|
-
|
|
554
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
687
|
-
|
|
688
|
-
|
|
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
|
-
|
|
807
|
-
|
|
808
|
-
onlyAdminACLOrRenouncedArtist(
|
|
772
|
+
) external {
|
|
773
|
+
_onlyValidProjectId(_projectId);
|
|
774
|
+
_onlyAdminACLOrRenouncedArtist(
|
|
809
775
|
_projectId,
|
|
810
776
|
this.adminAcceptArtistAddressesAndSplits.selector
|
|
811
|
-
)
|
|
812
|
-
|
|
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
|
-
|
|
861
|
-
|
|
862
|
-
onlyAdminACLOrRenouncedArtist(
|
|
824
|
+
) external {
|
|
825
|
+
_onlyValidProjectId(_projectId);
|
|
826
|
+
_onlyAdminACLOrRenouncedArtist(
|
|
863
827
|
_projectId,
|
|
864
828
|
this.updateProjectArtistAddress.selector
|
|
865
|
-
)
|
|
866
|
-
|
|
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
|
-
|
|
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
|
-
|
|
894
|
-
|
|
895
|
-
|
|
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
|
-
|
|
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
|
-
|
|
931
|
-
|
|
932
|
-
|
|
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
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
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
|
|
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
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
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
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
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
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
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
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
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
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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;
|