@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.
- package/README.md +2 -2
- package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
- package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +97 -10
- package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +4 -4
- package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +4 -9
- package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +4 -9
- package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +4 -9
- package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +4 -9
- package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +12 -12
- package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +4 -4
- package/artifacts/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol/ICoreRegistryV1.json +6 -6
- package/artifacts/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +19 -0
- package/artifacts/contracts/interfaces/v0.8.x/IMinterFilterV1.sol/IMinterFilterV1.json +22 -22
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol/ISharedMinterDAExpSettlementV0.json +8 -101
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol/ISharedMinterDAExpV0.json +1 -57
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol/ISharedMinterDALinV0.json +1 -57
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol/ISharedMinterDAV0.json +2 -21
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol/ISharedMinterHolderERC20V0.json +158 -0
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol/ISharedMinterHolderV0.json +15 -90
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol/ISharedMinterMerkleV0.json +10 -36
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol/ISharedMinterSEAV0.json +4 -236
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol/ISharedMinterSimplePurchaseV0.json +5 -5
- package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterV0.sol/ISharedMinterV0.json +7 -423
- package/artifacts/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol/ISharedRandomizerV0.json +17 -17
- package/artifacts/contracts/libs/v0.8.x/ABHelpers.sol/ABHelpers.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/Bytes32Strings.sol/Bytes32Strings.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol/DAExpLib.json +60 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/DALib.sol/DALib.json +30 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/DALinLib.sol/DALinLib.json +60 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol/GenericMinterEventsLib.json +346 -0
- package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +29 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol/MerkleLib.json +30 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +2 -2
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +254 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol/SetPriceLib.json +48 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +41 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +35 -3
- package/artifacts/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol/TokenHolderLib.json +79 -3
- package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
- package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +41 -41
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +66 -632
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -20
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +67 -594
- package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +33 -524
- package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +66 -632
- package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +33 -524
- package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +51 -717
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +58 -454
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +61 -552
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +55 -497
- package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +110 -571
- package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +69 -560
- package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +28 -444
- package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
- package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +4 -9
- package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +2 -2
- package/artifacts/contracts/mock/ReentrancyHolderMockShared.sol/ReentrancyHolderMockShared.json +136 -0
- package/artifacts/contracts/mock/ReentrancyMerkleMockShared.sol/ReentrancyMerkleMockShared.json +105 -0
- package/artifacts/contracts/mock/ReentrancyMockShared.sol/ReentrancyMockShared.json +100 -0
- package/artifacts/contracts/mock/ReentrancySEAMockShared.sol/ReentrancySEAAutoBidderMockShared.json +69 -0
- package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +19 -19
- package/contracts/DependencyRegistryV0.sol +84 -16
- package/contracts/archive/readme.md +16 -0
- package/contracts/engine/README.md +21 -0
- package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +4 -10
- package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +4 -10
- package/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol +4 -10
- package/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol +4 -10
- package/contracts/engine-registry/CoreRegistryV1.sol +58 -65
- package/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol +6 -8
- package/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol +3 -0
- package/contracts/interfaces/v0.8.x/IMinterFilterV1.sol +25 -25
- package/contracts/interfaces/v0.8.x/ISharedMinterDAExpSettlementV0.sol +11 -20
- package/contracts/interfaces/v0.8.x/ISharedMinterDAExpV0.sol +1 -14
- package/contracts/interfaces/v0.8.x/ISharedMinterDALinV0.sol +1 -15
- package/contracts/interfaces/v0.8.x/ISharedMinterDAV0.sol +2 -8
- package/contracts/interfaces/v0.8.x/ISharedMinterHolderERC20V0.sol +47 -0
- package/contracts/interfaces/v0.8.x/ISharedMinterHolderV0.sol +15 -43
- package/contracts/interfaces/v0.8.x/ISharedMinterMerkleV0.sol +10 -20
- package/contracts/interfaces/v0.8.x/ISharedMinterSEAV0.sol +4 -67
- package/contracts/interfaces/v0.8.x/ISharedMinterSimplePurchaseV0.sol +5 -5
- package/contracts/interfaces/v0.8.x/ISharedMinterV0.sol +7 -155
- package/contracts/interfaces/v0.8.x/ISharedRandomizerV0.sol +37 -37
- package/contracts/libs/v0.8.x/ABHelpers.sol +14 -14
- package/contracts/libs/v0.8.x/AuthLib.sol +101 -102
- package/contracts/libs/v0.8.x/Bytes32Strings.sol +5 -5
- package/contracts/libs/v0.8.x/minter-libs/DAExpLib.sol +163 -38
- package/contracts/libs/v0.8.x/minter-libs/DALib.sol +26 -0
- package/contracts/libs/v0.8.x/minter-libs/DALinLib.sol +144 -37
- package/contracts/libs/v0.8.x/minter-libs/GenericMinterEventsLib.sol +171 -0
- package/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol +250 -110
- package/contracts/libs/v0.8.x/minter-libs/MerkleLib.sol +257 -48
- package/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol +138 -58
- package/contracts/libs/v0.8.x/minter-libs/SEALib.sol +778 -103
- package/contracts/libs/v0.8.x/minter-libs/SetPriceLib.sol +135 -13
- package/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol +567 -187
- package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +480 -322
- package/contracts/libs/v0.8.x/minter-libs/TokenHolderLib.sol +214 -76
- package/contracts/minter-suite/MinterFilter/MinterFilterV2.sol +347 -304
- package/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol +391 -491
- package/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol +1 -54
- package/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol +388 -628
- package/contracts/minter-suite/Minters/MinterDAExpV5.sol +212 -273
- package/contracts/minter-suite/Minters/MinterDALinHolderV5.sol +393 -488
- package/contracts/minter-suite/Minters/MinterDALinV5.sol +220 -277
- package/contracts/minter-suite/Minters/MinterSEAV1.sol +327 -664
- package/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol +278 -303
- package/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol +355 -446
- package/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol +328 -416
- package/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol +538 -622
- package/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol +429 -553
- package/contracts/minter-suite/Minters/MinterSetPriceV5.sol +180 -227
- package/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol +3 -10
- package/contracts/mock/ReentrancyHolderMockShared.sol +59 -0
- package/contracts/mock/ReentrancyMerkleMockShared.sol +58 -0
- package/contracts/mock/ReentrancyMockShared.sol +48 -0
- package/contracts/mock/ReentrancySEAMockShared.sol +40 -0
- package/contracts/randomizer/shared/SharedRandomizerV0.sol +78 -70
- 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
|
|
76
|
-
uint256
|
|
77
|
+
address coreContract,
|
|
78
|
+
uint256 projectId
|
|
77
79
|
) internal view {
|
|
78
80
|
require(
|
|
79
81
|
msg.sender ==
|
|
80
|
-
IGenArt721CoreContractV3_Base(
|
|
81
|
-
.projectIdToArtistAddress(
|
|
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
|
|
90
|
-
* @param
|
|
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
|
|
94
|
-
uint256
|
|
95
|
+
address coreContract,
|
|
96
|
+
uint256 projectId
|
|
95
97
|
) internal view {
|
|
96
98
|
require(
|
|
97
|
-
msg.sender == _hashSeedSetterContracts[
|
|
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
|
|
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
|
|
111
|
+
constructor(address pseudorandomAtomicContract_) {
|
|
110
112
|
pseudorandomAtomicContract = IPseudorandomAtomic(
|
|
111
|
-
|
|
113
|
+
pseudorandomAtomicContract_
|
|
112
114
|
);
|
|
113
115
|
emit PseudorandomAtomicContractUpdated({
|
|
114
|
-
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
|
|
123
|
-
uint256
|
|
124
|
-
address
|
|
124
|
+
address coreContract,
|
|
125
|
+
uint256 projectId,
|
|
126
|
+
address hashSeedSetterContract
|
|
125
127
|
) external {
|
|
126
|
-
_onlyArtist(
|
|
127
|
-
_hashSeedSetterContracts[
|
|
128
|
-
|
|
129
|
-
] =
|
|
128
|
+
_onlyArtist({projectId: projectId, coreContract: coreContract});
|
|
129
|
+
_hashSeedSetterContracts[coreContract][
|
|
130
|
+
projectId
|
|
131
|
+
] = hashSeedSetterContract;
|
|
130
132
|
emit HashSeedSetterForProjectUpdated({
|
|
131
|
-
coreContract:
|
|
132
|
-
projectId:
|
|
133
|
-
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
|
|
142
|
-
uint256
|
|
143
|
+
address coreContract,
|
|
144
|
+
uint256 projectId
|
|
143
145
|
) external {
|
|
144
|
-
_onlyArtist(
|
|
145
|
-
_projectUsesHashSeedSetter[
|
|
146
|
-
|
|
147
|
-
] = !_projectUsesHashSeedSetter[
|
|
146
|
+
_onlyArtist({projectId: projectId, coreContract: coreContract});
|
|
147
|
+
_projectUsesHashSeedSetter[coreContract][
|
|
148
|
+
projectId
|
|
149
|
+
] = !_projectUsesHashSeedSetter[coreContract][projectId];
|
|
148
150
|
emit ProjectUsingHashSeedSetterUpdated({
|
|
149
|
-
coreContract:
|
|
150
|
-
projectId:
|
|
151
|
-
usingHashSeedSetter: _projectUsesHashSeedSetter[
|
|
152
|
-
|
|
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
|
|
162
|
-
uint256
|
|
163
|
-
bytes12
|
|
163
|
+
address coreContract,
|
|
164
|
+
uint256 tokenId,
|
|
165
|
+
bytes12 hashSeed
|
|
164
166
|
) external {
|
|
165
|
-
uint256 projectId = _tokenIdToProjectId(
|
|
166
|
-
_onlyHashSeedSetterContract(
|
|
167
|
-
|
|
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
|
|
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(
|
|
191
|
+
uint256 projectId = _tokenIdToProjectId(tokenId);
|
|
187
192
|
bytes32 hashSeed;
|
|
188
193
|
if (_projectUsesHashSeedSetter[coreContract][projectId]) {
|
|
189
|
-
hashSeed = _preAssignedHashSeeds[coreContract][
|
|
194
|
+
hashSeed = _preAssignedHashSeeds[coreContract][tokenId];
|
|
190
195
|
} else {
|
|
191
|
-
hashSeed = _getPseudorandomAtomic(
|
|
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
|
|
207
|
-
uint256
|
|
208
|
-
) external view returns (bool
|
|
209
|
-
return _projectUsesHashSeedSetter[
|
|
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
|
|
217
|
-
uint256
|
|
224
|
+
address coreContract,
|
|
225
|
+
uint256 projectId
|
|
218
226
|
) external view returns (address _hashSeedSetterContract) {
|
|
219
|
-
return _hashSeedSetterContracts[
|
|
227
|
+
return _hashSeedSetterContracts[coreContract][projectId];
|
|
220
228
|
}
|
|
221
229
|
|
|
222
230
|
/**
|
|
223
231
|
* @inheritdoc ISharedRandomizerV0
|
|
224
232
|
*/
|
|
225
233
|
function preAssignedHashSeed(
|
|
226
|
-
address
|
|
227
|
-
uint256
|
|
234
|
+
address coreContract,
|
|
235
|
+
uint256 tokenId
|
|
228
236
|
) external view returns (bytes12 _hashSeed) {
|
|
229
|
-
return _preAssignedHashSeeds[
|
|
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
|
|
243
|
+
* @param coreContract - The core contract that is requesting an atomic
|
|
236
244
|
* pseudorandom number.
|
|
237
|
-
* @param
|
|
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
|
|
242
|
-
uint256
|
|
249
|
+
address coreContract,
|
|
250
|
+
uint256 tokenId
|
|
243
251
|
) internal view returns (bytes32) {
|
|
244
252
|
return
|
|
245
253
|
pseudorandomAtomicContract.getPseudorandomAtomic(
|
|
246
|
-
keccak256(abi.encodePacked(
|
|
254
|
+
keccak256(abi.encodePacked(coreContract, tokenId))
|
|
247
255
|
);
|
|
248
256
|
}
|
|
249
257
|
|
|
250
258
|
/**
|
|
251
|
-
* @notice Gets the project ID for a given `
|
|
252
|
-
* @param
|
|
253
|
-
* @return projectId Project ID for given `
|
|
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
|
|
264
|
+
uint256 tokenId
|
|
257
265
|
) internal pure returns (uint256 projectId) {
|
|
258
|
-
return
|
|
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
|
|
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:
|
|
24
|
-
"deploy:dev-arbitrum
|
|
25
|
-
"deploy:staging-arbitrum:
|
|
26
|
-
"deploy:
|
|
27
|
-
"deploy:
|
|
28
|
-
"deploy:
|
|
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-
|
|
40
|
-
"deploy:shared-
|
|
41
|
-
"deploy:shared-
|
|
42
|
-
"deploy:shared-
|
|
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.
|
|
48
|
-
"@aws-sdk/credential-providers": "^3.
|
|
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.
|
|
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.
|
|
65
|
-
"@typechain/ethers-v5": "^11.1.
|
|
66
|
-
"@types/jest": "^29.5.
|
|
67
|
-
"@types/mocha": "^10.0.
|
|
68
|
-
"@types/prompt": "^1.1.
|
|
69
|
-
"@typescript-eslint/eslint-plugin": "^6.
|
|
70
|
-
"@typescript-eslint/parser": "^6.
|
|
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.
|
|
78
|
+
"chai": "^4.3.10",
|
|
73
79
|
"coveralls": "^3.1.1",
|
|
74
80
|
"dotenv": "^16.3.1",
|
|
75
|
-
"eslint": "^8.
|
|
81
|
+
"eslint": "^8.52.0",
|
|
76
82
|
"eslint-config-custom": "*",
|
|
77
|
-
"eslint-plugin-mocha": "^10.
|
|
78
|
-
"eslint-plugin-prettier": "^5.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.
|
|
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.
|
|
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.
|
|
99
|
+
"solidity-coverage": "^0.8.5",
|
|
94
100
|
"ts-node": "^9.1.1",
|
|
95
101
|
"tsconfig": "*",
|
|
96
|
-
"typechain": "^8.3.
|
|
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.
|
|
113
|
+
"graphql": "^16.8.1",
|
|
108
114
|
"urql": "^4.0.5"
|
|
109
115
|
}
|
|
110
116
|
}
|