@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
@@ -12,33 +12,155 @@ pragma solidity ^0.8.0;
12
12
  */
13
13
 
14
14
  library SetPriceLib {
15
+ /**
16
+ * @notice Price per token updated for project `projectId` to
17
+ * `pricePerToken`.
18
+ * @param projectId Project Id price was updated for
19
+ * @param coreContract Core contract address price was updated for
20
+ * @param pricePerToken price per token, no decimals (e.g. in wei for ETH)
21
+ */
22
+ event PricePerTokenUpdated(
23
+ uint256 indexed projectId,
24
+ address indexed coreContract,
25
+ uint256 indexed pricePerToken
26
+ );
27
+
28
+ /**
29
+ * @notice Price per token reset (unconfigured) for project `projectId`.
30
+ * @param projectId Project Id price was reset for
31
+ * @param coreContract Core contract address price was reset for
32
+ */
33
+ event PricePerTokenReset(
34
+ uint256 indexed projectId,
35
+ address indexed coreContract
36
+ );
37
+
38
+ // position of Set Price Lib storage, using a diamond storage pattern
39
+ // for this library
40
+ bytes32 constant SET_PRICE_LIB_STORAGE_POSITION =
41
+ keccak256("setpricelib.storage");
42
+
15
43
  // project-level variables
16
44
  /**
17
- * Struct used to store a project's currently configured price in wei, and
45
+ * Struct used to store a project's currently configured price, and
18
46
  * whether or not the price has been configured.
19
47
  */
20
48
  struct SetPriceProjectConfig {
21
- uint248 pricePerTokenInWei; // 0 if not configured
49
+ // @dev The price is stored with no accounting for decimals. e.g. in
50
+ // wei for ETH.
51
+ uint248 pricePerToken; // 0 if not configured
22
52
  bool priceIsConfigured;
23
53
  }
24
54
 
55
+ // Diamond storage pattern is used in this library
56
+ struct SetPriceLibStorage {
57
+ mapping(address coreContract => mapping(uint256 projectId => SetPriceProjectConfig)) setPriceProjectConfigs;
58
+ }
59
+
25
60
  /**
26
- * @notice Updates the minter's price per token in wei to be
27
- * `_pricePerTokenInWei`, in Wei, for the referenced SetPriceProjectConfig
28
- * struct in storage.
61
+ * @notice Updates the minter's price per token to be `pricePerToken`.
29
62
  * @dev Note that it is intentionally supported here that the configured
30
63
  * price may be explicitly set to `0`.
31
- * @param _pricePerTokenInWei price per token in wei.
32
- * @param _setPriceProjectConfig struct to update.
64
+ * @param projectId Project Id to update price for
65
+ * @param coreContract Core contract address to update price for
66
+ * @param pricePerToken price per token, no decimals (e.g. in wei for ETH)
33
67
  */
34
- function updatePricePerTokenInWei(
35
- uint256 _pricePerTokenInWei,
36
- SetPriceProjectConfig storage _setPriceProjectConfig
68
+ function updatePricePerToken(
69
+ uint256 projectId,
70
+ address coreContract,
71
+ uint256 pricePerToken
37
72
  ) internal {
73
+ SetPriceProjectConfig
74
+ storage setPriceProjectConfig = getSetPriceProjectConfig({
75
+ projectId: projectId,
76
+ coreContract: coreContract
77
+ });
38
78
  // update storage with new values
39
- _setPriceProjectConfig.pricePerTokenInWei = uint248(
40
- _pricePerTokenInWei
79
+ setPriceProjectConfig.pricePerToken = uint248(pricePerToken);
80
+ setPriceProjectConfig.priceIsConfigured = true;
81
+
82
+ emit PricePerTokenUpdated({
83
+ projectId: projectId,
84
+ coreContract: coreContract,
85
+ pricePerToken: pricePerToken
86
+ });
87
+ }
88
+
89
+ /**
90
+ * @notice Resets the minter's price per token to be unconfigured.
91
+ * @param projectId Project Id to reset price for
92
+ * @param coreContract Core contract address to reset the price for
93
+ */
94
+ function resetPricePerToken(
95
+ uint256 projectId,
96
+ address coreContract
97
+ ) internal {
98
+ SetPriceProjectConfig
99
+ storage setPriceProjectConfig = getSetPriceProjectConfig({
100
+ projectId: projectId,
101
+ coreContract: coreContract
102
+ });
103
+ // update storage with solidity initial values
104
+ setPriceProjectConfig.pricePerToken = uint248(0);
105
+ setPriceProjectConfig.priceIsConfigured = false;
106
+
107
+ emit PricePerTokenReset({
108
+ projectId: projectId,
109
+ coreContract: coreContract
110
+ });
111
+ }
112
+
113
+ /**
114
+ * @notice Checks that the minter's price per token is configured, and
115
+ * returns the price per token.
116
+ * Reverts if the price is not configured.
117
+ * @param projectId Project Id to check and get price for
118
+ * @param coreContract Core contract address to check and get price for
119
+ * @return pricePerToken price per token, no decimals (e.g. in wei for ETH)
120
+ */
121
+ function preMintChecksAndGetPrice(
122
+ uint256 projectId,
123
+ address coreContract
124
+ ) internal view returns (uint256 pricePerToken) {
125
+ SetPriceProjectConfig
126
+ storage setPriceProjectConfig = getSetPriceProjectConfig({
127
+ projectId: projectId,
128
+ coreContract: coreContract
129
+ });
130
+
131
+ // require artist to have configured price of token on this minter
132
+ require(
133
+ setPriceProjectConfig.priceIsConfigured,
134
+ "Price not configured"
41
135
  );
42
- _setPriceProjectConfig.priceIsConfigured = true;
136
+ return setPriceProjectConfig.pricePerToken;
137
+ }
138
+
139
+ /**
140
+ * @notice Loads the SetPriceProjectConfig for a given project and core contract.
141
+ * @param projectId Project Id to get config for
142
+ * @param coreContract Core contract address to get config for
143
+ */
144
+ function getSetPriceProjectConfig(
145
+ uint256 projectId,
146
+ address coreContract
147
+ ) internal view returns (SetPriceProjectConfig storage) {
148
+ return s().setPriceProjectConfigs[coreContract][projectId];
149
+ }
150
+
151
+ /**
152
+ * @notice Return the storage struct for reading and writing. This library
153
+ * uses a diamond storage pattern when managing storage.
154
+ * @return storageStruct The SetPriceLibStorage struct.
155
+ */
156
+ function s()
157
+ internal
158
+ pure
159
+ returns (SetPriceLibStorage storage storageStruct)
160
+ {
161
+ bytes32 position = SET_PRICE_LIB_STORAGE_POSITION;
162
+ assembly ("memory-safe") {
163
+ storageStruct.slot := position
164
+ }
43
165
  }
44
166
  }