@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.
Files changed (106) hide show
  1. package/.env.example +8 -1
  2. package/README.md +44 -165
  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/MinterDAExpV0.sol/MinterDAExpV0.json +2 -2
  9. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV1.sol/MinterDAExpV1.json +2 -2
  10. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
  11. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
  12. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  13. package/artifacts/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExpSettlement}/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +3 -3
  14. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV0.sol/MinterDALinV0.json +2 -2
  15. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV1.sol/MinterDALinV1.json +2 -2
  16. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
  17. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
  18. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV0.sol/MinterHolderV0.json +2 -2
  19. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
  20. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
  21. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
  22. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV0.sol/MinterMerkleV0.json +2 -2
  23. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
  24. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
  25. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
  26. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
  27. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV0.sol/MinterSetPriceV0.json +2 -2
  28. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV1.sol/MinterSetPriceV1.json +2 -2
  29. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  30. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  31. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V0.sol/MinterSetPriceERC20V0.json +2 -2
  32. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V1.sol/MinterSetPriceERC20V1.json +2 -2
  33. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  34. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  35. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +2 -2
  36. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterDAExpSettlementV1.sol/IFilteredMinterDAExpSettlementV1.json +767 -0
  37. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterSEAV0.sol/IFilteredMinterSEAV0.json +1032 -0
  38. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +149 -0
  39. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +149 -0
  40. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +130 -0
  41. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +1066 -0
  42. package/artifacts/contracts/interfaces/0.8.x/IMinterFilterV0.sol/IMinterFilterV0.json +6 -0
  43. package/artifacts/contracts/interfaces/0.8.x/IRandomizerPolyptychV0.sol/IRandomizerPolyptychV0.json +87 -0
  44. package/artifacts/contracts/interfaces/0.8.x/IRandomizerV2.sol/IRandomizerV2.json +1 -1
  45. package/artifacts/contracts/interfaces/0.8.x/IWETH.sol/IWETH.json +55 -0
  46. package/artifacts/contracts/libs/integration-refs/weth9/weth9.sol/WETH9_.json +295 -0
  47. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV0.sol/MinterFilterV0.json +8 -2
  48. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +34 -2
  49. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +1127 -0
  50. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV4.sol/MinterDAExpV4.json +15 -2
  51. package/artifacts/contracts/minter-suite/Minters/MinterDALinV4.sol/MinterDALinV4.json +15 -2
  52. package/artifacts/contracts/minter-suite/Minters/MinterHolderV4.sol/MinterHolderV4.json +15 -2
  53. package/artifacts/contracts/minter-suite/Minters/MinterMerkleV5.sol/MinterMerkleV5.json +15 -2
  54. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +792 -0
  55. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/MinterPolyptychV0.json +1268 -0
  56. package/artifacts/contracts/minter-suite/Minters/MinterSEAV0.sol/MinterSEAV0.json +1310 -0
  57. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +15 -2
  58. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV4.sol/MinterSetPriceV4.json +15 -2
  59. package/artifacts/contracts/mock/DeadReceiverBidderMock.sol/DeadReceiverBidderMock.json +33 -0
  60. package/artifacts/contracts/mock/GasLimitReceiverBidderMock.sol/GasLimitReceiverBidderMock.json +46 -0
  61. package/artifacts/contracts/mock/GasLimitReceiverMock.sol/GasLimitReceiverMock.json +28 -0
  62. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +2 -2
  63. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +3 -3
  64. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +51 -0
  65. package/artifacts/contracts/{BasicRandomizer.sol → randomizer/BasicRandomizer.sol}/BasicRandomizer.json +3 -3
  66. package/artifacts/contracts/randomizer/BasicRandomizerBase_v0_0_0.sol/RandomizerBase.json +10 -0
  67. package/artifacts/contracts/randomizer/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +229 -0
  68. package/artifacts/contracts/randomizer/RandomizerV2.sol/BasicRandomizerV2.json +102 -0
  69. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +2 -2
  70. package/contracts/DependencyRegistryV0.sol +74 -113
  71. package/contracts/GenArt721CoreV3.sol +124 -171
  72. package/contracts/GenArt721CoreV3_Engine.sol +136 -198
  73. package/contracts/GenArt721CoreV3_Engine_Flex.sol +2274 -0
  74. package/contracts/{minter-suite/Minters → archive/minter-suite/Minters/MinterDAExpSettlement}/MinterDAExpSettlementV1.sol +4 -4
  75. package/contracts/explorations/GenArt721CoreV3_Explorations.sol +147 -176
  76. package/contracts/interfaces/0.8.x/IFilteredMinterDAExpSettlementV1.sol +21 -0
  77. package/contracts/interfaces/0.8.x/IFilteredMinterSEAV0.sol +145 -0
  78. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol +39 -0
  79. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol +0 -3
  80. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol +132 -0
  81. package/contracts/interfaces/0.8.x/IMinterFilterV0.sol +6 -0
  82. package/contracts/interfaces/0.8.x/IRandomizerPolyptychV0.sol +31 -0
  83. package/contracts/interfaces/0.8.x/IRandomizerV2.sol +5 -2
  84. package/contracts/interfaces/0.8.x/IWETH.sol +11 -0
  85. package/contracts/libs/integration-refs/weth9/weth9.sol +763 -0
  86. package/contracts/minter-suite/MinterFilter/MinterFilterV1.sol +53 -47
  87. package/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol +1304 -0
  88. package/contracts/minter-suite/Minters/MinterDAExpV4.sol +47 -24
  89. package/contracts/minter-suite/Minters/MinterDALinV4.sol +46 -21
  90. package/contracts/minter-suite/Minters/MinterHolderV4.sol +54 -25
  91. package/contracts/minter-suite/Minters/MinterMerkleV5.sol +47 -20
  92. package/contracts/minter-suite/Minters/MinterPolyptychV0.sol +998 -0
  93. package/contracts/minter-suite/Minters/MinterSEAV0.sol +1224 -0
  94. package/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol +45 -16
  95. package/contracts/minter-suite/Minters/MinterSetPriceV4.sol +40 -13
  96. package/contracts/mock/DeadReceiverBidderMock.sol +23 -0
  97. package/contracts/mock/GasLimitReceiverBidderMock.sol +23 -0
  98. package/contracts/mock/GasLimitReceiverMock.sol +19 -0
  99. package/contracts/mock/RandomizerV2_NoAssignMock.sol +2 -11
  100. package/contracts/mock/ReentrancySEAMock.sol +36 -0
  101. package/contracts/{BasicRandomizer.sol → randomizer/BasicRandomizer.sol} +1 -1
  102. package/contracts/randomizer/BasicRandomizerBase_v0_0_0.sol +23 -0
  103. package/contracts/randomizer/PolyptychRandomizerV0.sol +117 -0
  104. package/contracts/{BasicRandomizerV2.sol → randomizer/RandomizerV2.sol} +7 -15
  105. package/package.json +32 -13
  106. package/artifacts/contracts/BasicRandomizerV2.sol/BasicRandomizerV2.json +0 -102
@@ -6,6 +6,8 @@ import "../../interfaces/0.8.x/IFilteredMinterV0.sol";
6
6
  import "../../interfaces/0.8.x/IAdminACLV0.sol";
7
7
  import "../../interfaces/0.8.x/IGenArt721CoreContractV3.sol";
8
8
 
9
+ import "../../libs/0.8.x/Bytes32Strings.sol";
10
+
9
11
  import "@openzeppelin-4.5/contracts/utils/structs/EnumerableMap.sol";
10
12
 
11
13
  pragma solidity 0.8.17;
@@ -25,8 +27,8 @@ pragma solidity 0.8.17;
25
27
  * ----------------------------------------------------------------------------
26
28
  * The following functions are restricted to the core contract's Admin ACL
27
29
  * contract:
28
- * - addApprovedMinters
29
- * - removeApprovedMinters
30
+ * - addApprovedMinter
31
+ * - removeApprovedMinter
30
32
  * - removeMintersForProjects
31
33
  * ----------------------------------------------------------------------------
32
34
  * The following functions are restricted to the core contract's Admin ACL
@@ -39,6 +41,21 @@ pragma solidity 0.8.17;
39
41
  contract MinterFilterV1 is IMinterFilterV0 {
40
42
  // add Enumerable Map methods
41
43
  using EnumerableMap for EnumerableMap.UintToAddressMap;
44
+ // add Bytes32Strings methods
45
+ using Bytes32Strings for bytes32;
46
+
47
+ /// version & type of this core contract
48
+ bytes32 constant MINTER_FILTER_VERSION = "v1.0.1";
49
+
50
+ function minterFilterVersion() external pure returns (string memory) {
51
+ return MINTER_FILTER_VERSION.toString();
52
+ }
53
+
54
+ bytes32 constant MINTER_FILTER_TYPE = "MinterFilterV1";
55
+
56
+ function minterFilterType() external pure returns (string memory) {
57
+ return MINTER_FILTER_TYPE.toString();
58
+ }
42
59
 
43
60
  /// Core contract address this minter interacts with
44
61
  address public immutable genArt721CoreAddress;
@@ -55,45 +72,43 @@ contract MinterFilterV1 is IMinterFilterV0 {
55
72
  /// minter address => is an approved minter?
56
73
  mapping(address => bool) public isApprovedMinter;
57
74
 
58
- modifier onlyNonZeroAddress(address _address) {
75
+ function _onlyNonZeroAddress(address _address) internal pure {
59
76
  require(_address != address(0), "Must input non-zero address");
60
- _;
61
77
  }
62
78
 
63
- // modifier to restrict access to only AdminACL allowed calls
79
+ // function to restrict access to only AdminACL allowed calls
64
80
  // @dev defers which ACL contract is used to the core contract
65
- modifier onlyCoreAdminACL(bytes4 _selector) {
81
+ function _onlyCoreAdminACL(bytes4 _selector) internal {
66
82
  require(_coreAdminACLAllowed(_selector), "Only Core AdminACL allowed");
67
- _;
68
83
  }
69
84
 
70
- // modifier to restrict access to only the artist of `_projectId`, or
85
+ // function to restrict access to only the artist of `_projectId`, or
71
86
  // AdminACL allowed calls
72
87
  // @dev defers which ACL contract is used to the core contract
73
- modifier onlyCoreAdminACLOrArtist(uint256 _projectId, bytes4 _selector) {
88
+ function _onlyCoreAdminACLOrArtist(
89
+ uint256 _projectId,
90
+ bytes4 _selector
91
+ ) internal {
74
92
  require(
75
93
  msg.sender ==
76
94
  genArtCoreContract.projectIdToArtistAddress(_projectId) ||
77
95
  _coreAdminACLAllowed(_selector),
78
96
  "Only Core AdminACL or Artist"
79
97
  );
80
- _;
81
98
  }
82
99
 
83
- modifier onlyValidProjectId(uint256 _projectId) {
100
+ function _onlyValidProjectId(uint256 _projectId) internal view {
84
101
  require(
85
102
  _projectId < genArtCoreContract.nextProjectId(),
86
103
  "Only existing projects"
87
104
  );
88
- _;
89
105
  }
90
106
 
91
- modifier usingApprovedMinter(address _minterAddress) {
107
+ function _usingApprovedMinter(address _minterAddress) internal view {
92
108
  require(
93
109
  isApprovedMinter[_minterAddress],
94
110
  "Only approved minters are allowed"
95
111
  );
96
- _;
97
112
  }
98
113
 
99
114
  /**
@@ -101,11 +116,11 @@ contract MinterFilterV1 is IMinterFilterV0 {
101
116
  * @param _genArt721Address Art Blocks core contract address
102
117
  * this contract will be a minter for. Can never be updated.
103
118
  */
104
- constructor(
105
- address _genArt721Address
106
- ) onlyNonZeroAddress(_genArt721Address) {
119
+ constructor(address _genArt721Address) {
120
+ _onlyNonZeroAddress(_genArt721Address);
107
121
  genArt721CoreAddress = _genArt721Address;
108
122
  genArtCoreContract = IGenArt721CoreContractV3(_genArt721Address);
123
+ emit Deployed();
109
124
  }
110
125
 
111
126
  /**
@@ -126,13 +141,9 @@ contract MinterFilterV1 is IMinterFilterV0 {
126
141
  * @notice Approves minter `_minterAddress`.
127
142
  * @param _minterAddress Minter to be added as an approved minter.
128
143
  */
129
- function addApprovedMinter(
130
- address _minterAddress
131
- )
132
- external
133
- onlyCoreAdminACL(this.addApprovedMinter.selector)
134
- onlyNonZeroAddress(_minterAddress)
135
- {
144
+ function addApprovedMinter(address _minterAddress) external {
145
+ _onlyCoreAdminACL(this.addApprovedMinter.selector);
146
+ _onlyNonZeroAddress(_minterAddress);
136
147
  isApprovedMinter[_minterAddress] = true;
137
148
  emit MinterApproved(
138
149
  _minterAddress,
@@ -144,9 +155,8 @@ contract MinterFilterV1 is IMinterFilterV0 {
144
155
  * @notice Removes previously approved minter `_minterAddress`.
145
156
  * @param _minterAddress Minter to remove.
146
157
  */
147
- function removeApprovedMinter(
148
- address _minterAddress
149
- ) external onlyCoreAdminACL(this.removeApprovedMinter.selector) {
158
+ function removeApprovedMinter(address _minterAddress) external {
159
+ _onlyCoreAdminACL(this.removeApprovedMinter.selector);
150
160
  require(isApprovedMinter[_minterAddress], "Only approved minters");
151
161
  require(
152
162
  numProjectsUsingMinter[_minterAddress] == 0,
@@ -165,12 +175,13 @@ contract MinterFilterV1 is IMinterFilterV0 {
165
175
  function setMinterForProject(
166
176
  uint256 _projectId,
167
177
  address _minterAddress
168
- )
169
- external
170
- onlyCoreAdminACLOrArtist(_projectId, this.setMinterForProject.selector)
171
- usingApprovedMinter(_minterAddress)
172
- onlyValidProjectId(_projectId)
173
- {
178
+ ) external {
179
+ _onlyCoreAdminACLOrArtist(
180
+ _projectId,
181
+ this.setMinterForProject.selector
182
+ );
183
+ _usingApprovedMinter(_minterAddress);
184
+ _onlyValidProjectId(_projectId);
174
185
  // decrement number of projects using a previous minter
175
186
  (bool hasPreviousMinter, address previousMinter) = minterForProject
176
187
  .tryGet(_projectId);
@@ -192,15 +203,11 @@ contract MinterFilterV1 is IMinterFilterV0 {
192
203
  * @param _projectId Project ID to remove minter.
193
204
  * @dev requires project to have an assigned minter
194
205
  */
195
- function removeMinterForProject(
196
- uint256 _projectId
197
- )
198
- external
199
- onlyCoreAdminACLOrArtist(
206
+ function removeMinterForProject(uint256 _projectId) external {
207
+ _onlyCoreAdminACLOrArtist(
200
208
  _projectId,
201
209
  this.removeMinterForProject.selector
202
- )
203
- {
210
+ );
204
211
  _removeMinterForProject(_projectId);
205
212
  }
206
213
 
@@ -210,9 +217,8 @@ contract MinterFilterV1 is IMinterFilterV0 {
210
217
  * @dev requires all project IDs to have an assigned minter
211
218
  * @dev caution with respect to single tx gas limits
212
219
  */
213
- function removeMintersForProjects(
214
- uint256[] calldata _projectIds
215
- ) external onlyCoreAdminACL(this.removeMintersForProjects.selector) {
220
+ function removeMintersForProjects(uint256[] calldata _projectIds) external {
221
+ _onlyCoreAdminACL(this.removeMintersForProjects.selector);
216
222
  uint256 numProjects = _projectIds.length;
217
223
  for (uint256 i; i < numProjects; i++) {
218
224
  _removeMinterForProject(_projectIds[i]);
@@ -265,7 +271,8 @@ contract MinterFilterV1 is IMinterFilterV0 {
265
271
  */
266
272
  function getMinterForProject(
267
273
  uint256 _projectId
268
- ) external view onlyValidProjectId(_projectId) returns (address) {
274
+ ) external view returns (address) {
275
+ _onlyValidProjectId(_projectId);
269
276
  (bool _hasMinter, address _currentMinter) = minterForProject.tryGet(
270
277
  _projectId
271
278
  );
@@ -278,9 +285,8 @@ contract MinterFilterV1 is IMinterFilterV0 {
278
285
  * @param _projectId Project ID to query.
279
286
  * @return bool true if project has an assigned minter, else false
280
287
  */
281
- function projectHasMinter(
282
- uint256 _projectId
283
- ) external view onlyValidProjectId(_projectId) returns (bool) {
288
+ function projectHasMinter(uint256 _projectId) external view returns (bool) {
289
+ _onlyValidProjectId(_projectId);
284
290
  (bool _hasMinter, ) = minterForProject.tryGet(_projectId);
285
291
  return _hasMinter;
286
292
  }