@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
@@ -0,0 +1,59 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ import "../interfaces/v0.8.x/ISharedMinterHolderV0.sol";
5
+
6
+ pragma solidity ^0.8.0;
7
+
8
+ contract ReentrancyHolderMockShared {
9
+ uint256 public currentQtyToPurchase;
10
+ uint256 public currentProjectId;
11
+ address public currentCoreContract;
12
+ uint256 public currentPriceToPay;
13
+ address public currentOwnedNftAddress;
14
+ uint256 public currentOwnedNftTokenId;
15
+
16
+ /**
17
+ @notice This function can be called to induce controlled reentrency attacks
18
+ on the shared AB minter filter suite.
19
+ Note that _priceToPay should be > project price per token to induce refund,
20
+ making reentrency possible via fallback function.
21
+ */
22
+ function attack(
23
+ uint256 _qtyToPurchase,
24
+ address _minterContractAddress,
25
+ uint256 _projectId,
26
+ address _coreContract,
27
+ uint256 _priceToPay,
28
+ address _ownedNftAddress,
29
+ uint256 _ownedNftTokenId
30
+ ) external payable {
31
+ // update state variables so that receive() knows what to do
32
+ currentQtyToPurchase = _qtyToPurchase;
33
+ currentProjectId = _projectId;
34
+ currentCoreContract = _coreContract;
35
+ currentPriceToPay = _priceToPay;
36
+ currentOwnedNftAddress = _ownedNftAddress;
37
+ currentOwnedNftTokenId = _ownedNftTokenId;
38
+ ISharedMinterHolderV0(_minterContractAddress).purchase{
39
+ value: _priceToPay
40
+ }(_projectId, _coreContract, _ownedNftAddress, _ownedNftTokenId);
41
+ }
42
+
43
+ // receiver is called when minter sends refunded Ether to this contract.
44
+ receive() external payable {
45
+ // decrement num to be purchased
46
+ currentQtyToPurchase--;
47
+ if (currentQtyToPurchase > 0) {
48
+ // purchase again!
49
+ ISharedMinterHolderV0(msg.sender).purchase{
50
+ value: currentPriceToPay
51
+ }(
52
+ currentProjectId,
53
+ currentCoreContract,
54
+ currentOwnedNftAddress,
55
+ currentOwnedNftTokenId
56
+ );
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,58 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ import "../interfaces/v0.8.x/ISharedMinterMerkleV0.sol";
5
+
6
+ pragma solidity ^0.8.0;
7
+
8
+ contract ReentrancyMerkleMockShared {
9
+ uint256 public currentQtyToPurchase;
10
+ uint256 public currentProjectId;
11
+ address public currentCoreContract;
12
+ uint256 public currentPriceToPay;
13
+ bytes32[3] currentProof;
14
+
15
+ /**
16
+ @notice This function can be called to induce controlled reentrency attacks
17
+ on the shared AB minter filter suite.
18
+ Note that _priceToPay should be > project price per token to induce refund,
19
+ making reentrency possible via fallback function.
20
+ */
21
+ function attack(
22
+ uint256 _qtyToPurchase,
23
+ address _minterContractAddress,
24
+ uint256 _projectId,
25
+ address _coreContract,
26
+ uint256 _priceToPay,
27
+ bytes32[] memory _proof
28
+ ) external payable {
29
+ // update state variables so that receive() knows what to do
30
+ currentQtyToPurchase = _qtyToPurchase;
31
+ currentProjectId = _projectId;
32
+ currentCoreContract = _coreContract;
33
+ currentPriceToPay = _priceToPay;
34
+ currentProof[0] = _proof[0];
35
+ currentProof[1] = _proof[1];
36
+ currentProof[2] = _proof[2];
37
+ ISharedMinterMerkleV0(_minterContractAddress).purchase{
38
+ value: _priceToPay
39
+ }(_projectId, _coreContract, _proof);
40
+ }
41
+
42
+ // receiver is called when minter sends refunded Ether to this contract.
43
+ receive() external payable {
44
+ // decrement num to be purchased
45
+ currentQtyToPurchase--;
46
+ if (currentQtyToPurchase > 0) {
47
+ // rebuild _proof
48
+ bytes32[] memory _proof = new bytes32[](3);
49
+ _proof[0] = currentProof[0];
50
+ _proof[1] = currentProof[1];
51
+ _proof[2] = currentProof[2];
52
+ // purchase again!
53
+ ISharedMinterMerkleV0(msg.sender).purchase{
54
+ value: currentPriceToPay
55
+ }(currentProjectId, currentCoreContract, _proof);
56
+ }
57
+ }
58
+ }
@@ -0,0 +1,48 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ import "../interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol";
5
+
6
+ pragma solidity ^0.8.0;
7
+
8
+ contract ReentrancyMockShared {
9
+ uint256 public currentQtyToPurchase;
10
+ uint256 public currentProjectId;
11
+ address public currentCoreContract;
12
+ uint256 public currentPriceToPay;
13
+
14
+ /**
15
+ @notice This function can be called to induce controlled reentrency attacks
16
+ on the shared AB minter filter suite.
17
+ Note that _priceToPay should be > project price per token to induce refund,
18
+ making reentrency possible via fallback function.
19
+ */
20
+ function attack(
21
+ uint256 _qtyToPurchase,
22
+ address _minterContractAddress,
23
+ uint256 _projectId,
24
+ address _coreContract,
25
+ uint256 _priceToPay
26
+ ) external payable {
27
+ // update state variables so that receive() knows what to do
28
+ currentQtyToPurchase = _qtyToPurchase;
29
+ currentProjectId = _projectId;
30
+ currentCoreContract = _coreContract;
31
+ currentPriceToPay = _priceToPay;
32
+ ISharedMinterSimplePurchaseV0(_minterContractAddress).purchase{
33
+ value: _priceToPay
34
+ }(_projectId, _coreContract);
35
+ }
36
+
37
+ // receiver is called when minter sends refunded Ether to this contract.
38
+ receive() external payable {
39
+ // decrement num to be purchased
40
+ currentQtyToPurchase--;
41
+ if (currentQtyToPurchase > 0) {
42
+ // purchase again!
43
+ ISharedMinterSimplePurchaseV0(msg.sender).purchase{
44
+ value: currentPriceToPay
45
+ }(currentProjectId, currentCoreContract);
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,40 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ // Created By: Art Blocks Inc.
3
+
4
+ import "../interfaces/v0.8.x/ISharedMinterSEAV0.sol";
5
+
6
+ pragma solidity ^0.8.0;
7
+
8
+ contract ReentrancySEAAutoBidderMockShared {
9
+ uint256 public targetTokenId;
10
+ address public targetCoreContract;
11
+
12
+ /**
13
+ @notice This function can be called to induce controlled reentrency attacks
14
+ on AB minter filter suite.
15
+ Note that _priceToPay should be > project price per token to induce refund,
16
+ making reentrency possible via fallback function.
17
+ */
18
+ function attack(
19
+ uint256 _targetTokenId,
20
+ address _targetCoreContract,
21
+ address _minterContractAddress,
22
+ uint256 _initialBidValue
23
+ ) external payable {
24
+ targetTokenId = _targetTokenId;
25
+ targetCoreContract = _targetCoreContract;
26
+ ISharedMinterSEAV0(_minterContractAddress).createBid{
27
+ value: _initialBidValue
28
+ }(_targetTokenId, _targetCoreContract);
29
+ }
30
+
31
+ // receiver is called when minter sends refunded Ether to this contract, when outbid
32
+ receive() external payable {
33
+ // auto-rebid
34
+ uint256 newBidValue = (msg.value * 110) / 100;
35
+ ISharedMinterSEAV0(msg.sender).createBid{value: newBidValue}(
36
+ targetTokenId,
37
+ targetCoreContract
38
+ );
39
+ }
40
+ }
@@ -1,6 +1,8 @@
1
1
  // SPDX-License-Identifier: LGPL-3.0-only
2
2
  // Creatd By: Art Blocks Inc.
3
3
 
4
+ // @dev fixed to specific solidity version for clarity and for more clear
5
+ // source code verification purposes.
4
6
  pragma solidity 0.8.19;
5
7
 
6
8
  import "../../interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol";
@@ -59,26 +61,26 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
59
61
  // @dev this mapping is only used when the project is configured as using
60
62
  // a hash seed setter contract. It is not populated when the project is
61
63
  // using pseudorandomAtomicContract.
62
- mapping(address => mapping(uint256 => bytes12))
64
+ mapping(address coreContract => mapping(uint256 tokenId => bytes12 preAssignedHashSeed))
63
65
  private _preAssignedHashSeeds;
64
66
 
65
67
  // mapping of core contract => project ID => usesHashSeedSetter Contract
66
- mapping(address => mapping(uint256 => bool))
68
+ mapping(address coreContract => mapping(uint256 projectId => bool usesHashSeedSetter))
67
69
  private _projectUsesHashSeedSetter;
68
70
 
69
71
  // mapping of core contract => projectId => hash seed setter contract
70
- mapping(address => mapping(uint256 => address))
72
+ mapping(address coreContract => mapping(uint256 projectId => address hashSeedSetterContract))
71
73
  private _hashSeedSetterContracts;
72
74
 
73
75
  // modifier to restrict access to only Artist allowed calls
74
76
  function _onlyArtist(
75
- address _coreContract,
76
- uint256 _projectId
77
+ address coreContract,
78
+ uint256 projectId
77
79
  ) internal view {
78
80
  require(
79
81
  msg.sender ==
80
- IGenArt721CoreContractV3_Base(_coreContract)
81
- .projectIdToArtistAddress(_projectId),
82
+ IGenArt721CoreContractV3_Base(coreContract)
83
+ .projectIdToArtistAddress(projectId),
82
84
  "Only Artist"
83
85
  );
84
86
  }
@@ -86,32 +88,32 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
86
88
  /**
87
89
  * Modifier to restrict access to only calls by the hash seed setter
88
90
  * contract of a given project.
89
- * @param _coreContract core contract address associated with the project
90
- * @param _projectId project ID being set
91
+ * @param coreContract core contract address associated with the project
92
+ * @param projectId project ID being set
91
93
  */
92
94
  function _onlyHashSeedSetterContract(
93
- address _coreContract,
94
- uint256 _projectId
95
+ address coreContract,
96
+ uint256 projectId
95
97
  ) internal view {
96
98
  require(
97
- msg.sender == _hashSeedSetterContracts[_coreContract][_projectId],
99
+ msg.sender == _hashSeedSetterContracts[coreContract][projectId],
98
100
  "Only Hash Seed Setter Contract"
99
101
  );
100
102
  }
101
103
 
102
104
  /**
103
105
  *
104
- * @param _pseudorandomAtomicContract Address of the pseudorandom atomic
106
+ * @param pseudorandomAtomicContract_ Address of the pseudorandom atomic
105
107
  * contract to use for atomically generating random values. This contract
106
108
  * does not have an owner, and therefore the pseudorandom atomic contract
107
109
  * address cannot be changed after deployment.
108
110
  */
109
- constructor(address _pseudorandomAtomicContract) {
111
+ constructor(address pseudorandomAtomicContract_) {
110
112
  pseudorandomAtomicContract = IPseudorandomAtomic(
111
- _pseudorandomAtomicContract
113
+ pseudorandomAtomicContract_
112
114
  );
113
115
  emit PseudorandomAtomicContractUpdated({
114
- pseudorandomAtomicContract: _pseudorandomAtomicContract
116
+ pseudorandomAtomicContract: pseudorandomAtomicContract_
115
117
  });
116
118
  }
117
119
 
@@ -119,18 +121,18 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
119
121
  * @inheritdoc ISharedRandomizerV0
120
122
  */
121
123
  function setHashSeedSetterContract(
122
- address _coreContract,
123
- uint256 _projectId,
124
- address _hashSeedSetterContract
124
+ address coreContract,
125
+ uint256 projectId,
126
+ address hashSeedSetterContract
125
127
  ) external {
126
- _onlyArtist(_coreContract, _projectId);
127
- _hashSeedSetterContracts[_coreContract][
128
- _projectId
129
- ] = _hashSeedSetterContract;
128
+ _onlyArtist({projectId: projectId, coreContract: coreContract});
129
+ _hashSeedSetterContracts[coreContract][
130
+ projectId
131
+ ] = hashSeedSetterContract;
130
132
  emit HashSeedSetterForProjectUpdated({
131
- coreContract: _coreContract,
132
- projectId: _projectId,
133
- hashSeedSetterContract: _hashSeedSetterContract
133
+ coreContract: coreContract,
134
+ projectId: projectId,
135
+ hashSeedSetterContract: hashSeedSetterContract
134
136
  });
135
137
  }
136
138
 
@@ -138,18 +140,18 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
138
140
  * @inheritdoc ISharedRandomizerV0
139
141
  */
140
142
  function toggleProjectUseAssignedHashSeed(
141
- address _coreContract,
142
- uint256 _projectId
143
+ address coreContract,
144
+ uint256 projectId
143
145
  ) external {
144
- _onlyArtist(_coreContract, _projectId);
145
- _projectUsesHashSeedSetter[_coreContract][
146
- _projectId
147
- ] = !_projectUsesHashSeedSetter[_coreContract][_projectId];
146
+ _onlyArtist({projectId: projectId, coreContract: coreContract});
147
+ _projectUsesHashSeedSetter[coreContract][
148
+ projectId
149
+ ] = !_projectUsesHashSeedSetter[coreContract][projectId];
148
150
  emit ProjectUsingHashSeedSetterUpdated({
149
- coreContract: _coreContract,
150
- projectId: _projectId,
151
- usingHashSeedSetter: _projectUsesHashSeedSetter[_coreContract][
152
- _projectId
151
+ coreContract: coreContract,
152
+ projectId: projectId,
153
+ usingHashSeedSetter: _projectUsesHashSeedSetter[coreContract][
154
+ projectId
153
155
  ]
154
156
  });
155
157
  }
@@ -158,13 +160,16 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
158
160
  * @inheritdoc ISharedRandomizerV0
159
161
  */
160
162
  function preSetHashSeed(
161
- address _coreContract,
162
- uint256 _tokenId,
163
- bytes12 _hashSeed
163
+ address coreContract,
164
+ uint256 tokenId,
165
+ bytes12 hashSeed
164
166
  ) external {
165
- uint256 projectId = _tokenIdToProjectId(_tokenId);
166
- _onlyHashSeedSetterContract(_coreContract, projectId);
167
- _preAssignedHashSeeds[_coreContract][_tokenId] = _hashSeed;
167
+ uint256 projectId = _tokenIdToProjectId(tokenId);
168
+ _onlyHashSeedSetterContract({
169
+ projectId: projectId,
170
+ coreContract: coreContract
171
+ });
172
+ _preAssignedHashSeeds[coreContract][tokenId] = hashSeed;
168
173
  // @dev event indicating token hash seed assigned is not required for
169
174
  // subgraph indexing because token hash seeds are still assigned
170
175
  // atomically in `assignTokenHash` function. If token hash seeds were
@@ -175,7 +180,7 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
175
180
  /**
176
181
  * @inheritdoc IRandomizer_V3CoreBase
177
182
  */
178
- function assignTokenHash(uint256 _tokenId) external {
183
+ function assignTokenHash(uint256 tokenId) external {
179
184
  // @dev This function is not specifically gated to any specific caller,
180
185
  // but will only call back to the calling contract, `msg.sender`, to
181
186
  // set the specified token's hash seed.
@@ -183,78 +188,81 @@ contract SharedRandomizerV0 is ISharedRandomizerV0 {
183
188
  // the token hash seed on a different core contract.
184
189
  // @dev variables are named to improve readability
185
190
  address coreContract = msg.sender;
186
- uint256 projectId = _tokenIdToProjectId(_tokenId);
191
+ uint256 projectId = _tokenIdToProjectId(tokenId);
187
192
  bytes32 hashSeed;
188
193
  if (_projectUsesHashSeedSetter[coreContract][projectId]) {
189
- hashSeed = _preAssignedHashSeeds[coreContract][_tokenId];
194
+ hashSeed = _preAssignedHashSeeds[coreContract][tokenId];
190
195
  } else {
191
- hashSeed = _getPseudorandomAtomic(coreContract, _tokenId);
196
+ hashSeed = _getPseudorandomAtomic({
197
+ coreContract: coreContract,
198
+ tokenId: tokenId
199
+ });
192
200
  }
193
201
  // verify that the hash seed is non-zero
194
202
  require(hashSeed != 0, "Only non-zero hash seed");
195
203
  // assign the token hash seed on the core contract
196
- IGenArt721CoreContractV3_Base(coreContract).setTokenHash_8PT(
197
- _tokenId,
198
- hashSeed
199
- );
204
+ IGenArt721CoreContractV3_Base(coreContract).setTokenHash_8PT({
205
+ _tokenId: tokenId,
206
+ _hash: hashSeed
207
+ });
200
208
  }
201
209
 
202
210
  /**
203
211
  * @inheritdoc ISharedRandomizerV0
204
212
  */
205
213
  function projectUsesHashSeedSetter(
206
- address _coreContract,
207
- uint256 _projectId
208
- ) external view returns (bool _usingHashSeedSetter) {
209
- return _projectUsesHashSeedSetter[_coreContract][_projectId];
214
+ address coreContract,
215
+ uint256 projectId
216
+ ) external view returns (bool usingHashSeedSetter) {
217
+ return _projectUsesHashSeedSetter[coreContract][projectId];
210
218
  }
211
219
 
212
220
  /**
213
221
  * @inheritdoc ISharedRandomizerV0
214
222
  */
215
223
  function hashSeedSetterContracts(
216
- address _coreContract,
217
- uint256 _projectId
224
+ address coreContract,
225
+ uint256 projectId
218
226
  ) external view returns (address _hashSeedSetterContract) {
219
- return _hashSeedSetterContracts[_coreContract][_projectId];
227
+ return _hashSeedSetterContracts[coreContract][projectId];
220
228
  }
221
229
 
222
230
  /**
223
231
  * @inheritdoc ISharedRandomizerV0
224
232
  */
225
233
  function preAssignedHashSeed(
226
- address _coreContract,
227
- uint256 _tokenId
234
+ address coreContract,
235
+ uint256 tokenId
228
236
  ) external view returns (bytes12 _hashSeed) {
229
- return _preAssignedHashSeeds[_coreContract][_tokenId];
237
+ return _preAssignedHashSeeds[coreContract][tokenId];
230
238
  }
231
239
 
232
240
  /**
233
241
  * @notice Internal function to atomically obtain a pseudorandom number
234
242
  * from the configured pseudorandom contract.
235
- * @param _coreContract - The core contract that is requesting an atomic
243
+ * @param coreContract - The core contract that is requesting an atomic
236
244
  * pseudorandom number.
237
- * @param _tokenId - The token ID on `_coreContract` that is associated
245
+ * @param tokenId - The token ID on `coreContract` that is associated
238
246
  * with the pseudorandom number request.
239
247
  */
240
248
  function _getPseudorandomAtomic(
241
- address _coreContract,
242
- uint256 _tokenId
249
+ address coreContract,
250
+ uint256 tokenId
243
251
  ) internal view returns (bytes32) {
244
252
  return
245
253
  pseudorandomAtomicContract.getPseudorandomAtomic(
246
- keccak256(abi.encodePacked(_coreContract, _tokenId))
254
+ keccak256(abi.encodePacked(coreContract, tokenId))
247
255
  );
248
256
  }
249
257
 
250
258
  /**
251
- * @notice Gets the project ID for a given `_tokenId`.
252
- * @param _tokenId Token ID to be queried.
253
- * @return projectId Project ID for given `_tokenId`.
259
+ * @notice Gets the project ID for a given `tokenId`.
260
+ * @param tokenId Token ID to be queried.
261
+ * @return projectId Project ID for given `tokenId`.
254
262
  */
255
263
  function _tokenIdToProjectId(
256
- uint256 _tokenId
264
+ uint256 tokenId
257
265
  ) internal pure returns (uint256 projectId) {
258
- return _tokenId / ONE_MILLION;
266
+ return tokenId / ONE_MILLION;
259
267
  }
260
268
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@artblocks/contracts",
3
- "version": "1.0.4",
3
+ "version": "1.1.0",
4
4
  "description": "Smart contracts used by Art Blocks",
5
5
  "files": [
6
6
  "/contracts/**/*.sol",
@@ -20,14 +20,12 @@
20
20
  "lint": "prettier --check 'contracts/**/*.sol' && prettier --check 'scripts/**/*.ts' && prettier --check 'test/**/*.ts' && npx eslint 'test/**/*.ts'",
21
21
  "remix": "remixd -s ./ --remix-ide https://remix.ethereum.org",
22
22
  "codegen": "yarn --cwd=\"../..\" codegen:project contracts",
23
- "deploy:dev:v3-engine": "yarn codegen && yarn require-low-gas goerli && NODE_ENV=dev yarn hardhat run --network goerli scripts/engine/V3/generic-engine-deployer.ts",
24
- "deploy:dev-arbitrum:v3-engine": "yarn codegen && yarn require-low-gas arbitrum-goerli && NODE_ENV=arbitrum-dev yarn hardhat run --network arbitrum-goerli scripts/engine/V3/generic-engine-deployer.ts",
25
- "deploy:staging-arbitrum:v3-engine": "yarn codegen && yarn require-low-gas arbitrum-goerli && NODE_ENV=arbitrum-staging yarn hardhat run --network arbitrum-goerli scripts/engine/V3/generic-engine-deployer.ts",
26
- "deploy:arbitrum:v3-engine": "yarn codegen && yarn require-low-gas arbitrum && NODE_ENV=arbitrum yarn hardhat run --network arbitrum scripts/engine/V3/generic-engine-deployer.ts",
27
- "deploy:staging:v3-engine": "yarn codegen && yarn require-low-gas goerli && NODE_ENV=staging yarn hardhat run --network goerli scripts/engine/V3/generic-engine-deployer.ts",
28
- "deploy:mainnet:v3-engine": "yarn codegen && yarn require-low-gas mainnet && NODE_ENV=mainnet yarn hardhat run --network mainnet scripts/engine/V3/generic-engine-deployer.ts",
29
- "deploy:goerli:minter": "yarn require-low-gas goerli && yarn hardhat run --network goerli scripts/minter-deployments/V3/generic-minter-deployer-v3core.ts",
30
- "deploy:mainnet:minter": "yarn require-low-gas mainnet && yarn hardhat run --network mainnet scripts/minter-deployments/V3/generic-minter-deployer-v3core.ts",
23
+ "deploy:v3-engine:dev": "yarn codegen && yarn require-low-gas goerli && NODE_ENV=dev yarn hardhat run --network goerli scripts/engine/V3/generic-engine-shared-suite-deployer.ts",
24
+ "deploy:v3-engine:dev-arbitrum": "yarn codegen && yarn require-low-gas arbitrum-goerli && NODE_ENV=arbitrum-dev yarn hardhat run --network arbitrum-goerli scripts/engine/V3/generic-engine-shared-suite-deployer.ts",
25
+ "deploy:v3-engine:staging-arbitrum:": "yarn codegen && yarn require-low-gas arbitrum-goerli && NODE_ENV=arbitrum-staging yarn hardhat run --network arbitrum-goerli scripts/engine/V3/generic-engine-shared-suite-deployer.ts",
26
+ "deploy:v3-engine:arbitrum": "yarn codegen && yarn require-low-gas arbitrum && NODE_ENV=arbitrum yarn hardhat run --network arbitrum scripts/engine/V3/generic-engine-shared-suite-deployer.ts",
27
+ "deploy:v3-engine:staging": "yarn codegen && yarn require-low-gas goerli && NODE_ENV=staging yarn hardhat run --network goerli scripts/engine/V3/generic-engine-shared-suite-deployer.ts",
28
+ "deploy:v3-engine:mainnet": "yarn codegen && yarn require-low-gas mainnet && NODE_ENV=mainnet yarn hardhat run --network mainnet scripts/engine/V3/generic-engine-shared-suite-deployer.ts",
31
29
  "deploy:shared-randomizer:goerli": "yarn require-low-gas goerli && yarn hardhat run --network goerli scripts/randomizer-deployments/shared-randomizer-deployer.ts",
32
30
  "deploy:shared-randomizer:mainnet": "yarn require-low-gas mainnet && yarn hardhat run --network mainnet scripts/randomizer-deployments/shared-randomizer-deployer.ts",
33
31
  "deploy:shared-randomizer:arbitrum-goerli": "yarn require-low-gas arbitrum-goerli && yarn hardhat run --network arbitrum-goerli scripts/randomizer-deployments/shared-randomizer-deployer.ts",
@@ -36,23 +34,31 @@
36
34
  "deploy:shared-minter-filter:mainnet": "yarn require-low-gas mainnet && yarn hardhat run --network mainnet scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
37
35
  "deploy:shared-minter-filter:arbitrum-goerli": "yarn require-low-gas arbitrum-goerli && yarn hardhat run --network arbitrum-goerli scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
38
36
  "deploy:shared-minter-filter:arbitrum": "yarn require-low-gas arbitrum && yarn hardhat run --network arbitrum scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
39
- "deploy:shared-shared-minters:goerli": "yarn require-low-gas goerli && yarn hardhat run --network goerli scripts/minter-deployments/shared-minters-deployer.ts",
40
- "deploy:shared-shared-minters:mainnet": "yarn require-low-gas mainnet && yarn hardhat run --network mainnet scripts/minter-deployments/shared-minters-deployer.ts",
41
- "deploy:shared-shared-minters:arbitrum-goerli": "yarn require-low-gas arbitrum-goerli && yarn hardhat run --network arbitrum-goerli scripts/minter-deployments/shared-minters-deployer.ts",
42
- "deploy:shared-shared-minters:arbitrum": "yarn require-low-gas arbitrum && yarn hardhat run --network arbitrum scripts/minter-deployments/shared-minters-deployer.ts",
37
+ "deploy:shared-minters:goerli": "yarn require-low-gas goerli && yarn hardhat run --network goerli scripts/minter-deployments/shared-minters-deployer.ts",
38
+ "deploy:shared-minters:mainnet": "yarn require-low-gas mainnet && yarn hardhat run --network mainnet scripts/minter-deployments/shared-minters-deployer.ts",
39
+ "deploy:shared-minters:arbitrum-goerli": "yarn require-low-gas arbitrum-goerli && yarn hardhat run --network arbitrum-goerli scripts/minter-deployments/shared-minters-deployer.ts",
40
+ "deploy:shared-minters:arbitrum": "yarn require-low-gas arbitrum && yarn hardhat run --network arbitrum scripts/minter-deployments/shared-minters-deployer.ts",
43
41
  "require-low-gas": "yarn hardhat run scripts/require-low-gas.ts --network",
44
- "pre-commit": "yarn lint"
42
+ "pre-commit": "yarn lint",
43
+ "deploy:deprecated:dev:v3-engine": "yarn codegen && yarn require-low-gas goerli && NODE_ENV=dev yarn hardhat run --network goerli scripts/engine/V3/deprecated/generic-engine-deployer.ts",
44
+ "deploy:deprecated:staging:v3-engine": "yarn codegen && yarn require-low-gas goerli && NODE_ENV=staging yarn hardhat run --network goerli scripts/engine/V3/deprecated/generic-engine-deployer.ts",
45
+ "deploy:deprecated:dev-arbitrum:v3-engine": "yarn codegen && yarn require-low-gas arbitrum-goerli && NODE_ENV=arbitrum-dev yarn hardhat run --network arbitrum-goerli scripts/engine/V3/deprecated/generic-engine-deployer.ts",
46
+ "deploy:deprecated:staging-arbitrum:v3-engine": "yarn codegen && yarn require-low-gas arbitrum-goerli && NODE_ENV=arbitrum-staging yarn hardhat run --network arbitrum-goerli scripts/engine/V3/deprecated/generic-engine-deployer.ts",
47
+ "deploy:deprecated:arbitrum:v3-engine": "yarn codegen && yarn require-low-gas arbitrum && NODE_ENV=arbitrum yarn hardhat run --network arbitrum scripts/engine/V3/deprecated/generic-engine-deployer.ts",
48
+ "deploy:deprecated:mainnet:v3-engine": "yarn codegen && yarn require-low-gas mainnet && NODE_ENV=mainnet yarn hardhat run --network mainnet scripts/engine/V3/deprecated/generic-engine-deployer.ts",
49
+ "deploy:deprecated:goerli:non-shared-minter": "yarn require-low-gas goerli && yarn hardhat run --network goerli scripts/minter-deployments/V3/generic-minter-deployer-v3core.ts",
50
+ "deploy:deprecated:mainnet:non-shared-minter": "yarn require-low-gas mainnet && yarn hardhat run --network mainnet scripts/minter-deployments/V3/generic-minter-deployer-v3core.ts"
45
51
  },
46
52
  "devDependencies": {
47
- "@aws-sdk/client-s3": "^3.398.0",
48
- "@aws-sdk/credential-providers": "^3.398.0",
53
+ "@aws-sdk/client-s3": "^3.433.0",
54
+ "@aws-sdk/credential-providers": "^3.433.0",
49
55
  "@defi-wonderland/smock": "^2.3.5",
50
56
  "@gnosis.pm/safe-contracts": "^1.3.0",
51
57
  "@gnosis.pm/safe-core-sdk": "^2.1.0",
52
58
  "@gnosis.pm/safe-core-sdk-types": "^1.7.0",
53
59
  "@gnosis.pm/safe-ethers-lib": "1.1.0",
54
60
  "@gnosis.pm/safe-service-client": "^1.4.0",
55
- "@nomicfoundation/hardhat-network-helpers": "^1.0.8",
61
+ "@nomicfoundation/hardhat-network-helpers": "^1.0.9",
56
62
  "@nomiclabs/hardhat-ethers": "^2.2.1",
57
63
  "@nomiclabs/hardhat-etherscan": "^3.1.4",
58
64
  "@nomiclabs/hardhat-solhint": "^3.0.0",
@@ -61,24 +67,24 @@
61
67
  "@nomiclabs/hardhat-web3": "^2.0.0",
62
68
  "@openzeppelin/hardhat-upgrades": "^1.28.0",
63
69
  "@openzeppelin/test-helpers": "^0.5.16",
64
- "@remix-project/remixd": "^0.6.17",
65
- "@typechain/ethers-v5": "^11.1.1",
66
- "@types/jest": "^29.5.4",
67
- "@types/mocha": "^10.0.1",
68
- "@types/prompt": "^1.1.5",
69
- "@typescript-eslint/eslint-plugin": "^6.4.1",
70
- "@typescript-eslint/parser": "^6.4.1",
70
+ "@remix-project/remixd": "^0.6.18",
71
+ "@typechain/ethers-v5": "^11.1.2",
72
+ "@types/jest": "^29.5.6",
73
+ "@types/mocha": "^10.0.3",
74
+ "@types/prompt": "^1.1.7",
75
+ "@typescript-eslint/eslint-plugin": "^6.9.0",
76
+ "@typescript-eslint/parser": "^6.9.0",
71
77
  "aws-sdk-client-mock": "^3.0.0",
72
- "chai": "^4.3.7",
78
+ "chai": "^4.3.10",
73
79
  "coveralls": "^3.1.1",
74
80
  "dotenv": "^16.3.1",
75
- "eslint": "^8.46.0",
81
+ "eslint": "^8.52.0",
76
82
  "eslint-config-custom": "*",
77
- "eslint-plugin-mocha": "^10.1.0",
78
- "eslint-plugin-prettier": "^5.0.0",
83
+ "eslint-plugin-mocha": "^10.2.0",
84
+ "eslint-plugin-prettier": "^5.0.1",
79
85
  "ethereum-waffle": "^4.0.10",
80
86
  "ethers": "^5.7.2",
81
- "hardhat": "^2.17.1",
87
+ "hardhat": "^2.18.2",
82
88
  "hardhat-contract-sizer": "^2.10.0",
83
89
  "hardhat-docgen": "^1.3.0",
84
90
  "hardhat-gas-reporter": "^1.0.9",
@@ -86,14 +92,14 @@
86
92
  "istanbul-combine": "^0.3.0",
87
93
  "keccak256": "^1.0.6",
88
94
  "merkletreejs": "^0.3.9",
89
- "prettier": "^3.0.2",
95
+ "prettier": "^3.0.3",
90
96
  "prettier-plugin-solidity": "^1.1.1",
91
97
  "prompt": "^1.3.0",
92
98
  "prompt-sync": "^4.2.0",
93
- "solidity-coverage": "^0.8.4",
99
+ "solidity-coverage": "^0.8.5",
94
100
  "ts-node": "^9.1.1",
95
101
  "tsconfig": "*",
96
- "typechain": "^8.3.1",
102
+ "typechain": "^8.3.2",
97
103
  "typescript": "^5.2.2"
98
104
  },
99
105
  "author": "Art Blocks, Inc",
@@ -104,7 +110,7 @@
104
110
  "@openzeppelin-4.7/contracts": "npm:@openzeppelin/contracts@4.7.1",
105
111
  "@openzeppelin-4.8/contracts-upgradeable": "npm:@openzeppelin/contracts-upgradeable@4.8.0",
106
112
  "@urql/exchange-retry": "^1.2.0",
107
- "graphql": "^16.8.0",
113
+ "graphql": "^16.8.1",
108
114
  "urql": "^4.0.5"
109
115
  }
110
116
  }