Skip to content

Commit c140c3c

Browse files
committed
upgrade to 0.8.24, gas improvements
1 parent d78a91f commit c140c3c

38 files changed

+68
-79
lines changed

contracts/SSVNetwork.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "./interfaces/ISSVNetwork.sol";
55

contracts/SSVNetworkViews.sol

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "./interfaces/ISSVViews.sol";
55
import "./libraries/Types.sol";
@@ -67,7 +67,7 @@ contract SSVNetworkViews is UUPSUpgradeable, Ownable2StepUpgradeable, ISSVViews
6767
) external view override returns (uint64[] memory whitelistedOperatorIds) {
6868
return ssvNetwork.getWhitelistedOperators(operatorIds, whitelistedAddress);
6969
}
70-
function isWhitelistingContract(address contractAddress) external view returns (bool isWhitelistingContract) {
70+
function isWhitelistingContract(address contractAddress) external view returns (bool) {
7171
return ssvNetwork.isWhitelistingContract(contractAddress);
7272
}
7373

contracts/SSVProxy.sol

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import {SSVModules, SSVStorage, StorageData} from "./libraries/SSVStorage.sol";
55

66
abstract contract SSVProxy {
7-
87
function _delegate(address implementation) internal {
98
assembly {
109
// Copy msg.data. We take full control of memory in this inline assembly

contracts/interfaces/ISSVClusters.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "./ISSVNetworkCore.sol";
55

contracts/interfaces/ISSVDAO.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "./ISSVNetworkCore.sol";
55

contracts/interfaces/ISSVNetwork.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "./ISSVNetworkCore.sol";
55
import "./ISSVOperators.sol";

contracts/interfaces/ISSVNetworkCore.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
interface ISSVNetworkCore {
55
/***********/

contracts/interfaces/ISSVOperators.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "./ISSVNetworkCore.sol";
55

contracts/interfaces/ISSVOperatorsWhitelist.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "./ISSVNetworkCore.sol";
55
import "./external/ISSVWhitelistingContract.sol";

contracts/interfaces/ISSVViews.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "./ISSVNetworkCore.sol";
55

contracts/interfaces/external/ISSVWhitelistingContract.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
interface ISSVWhitelistingContract {
55
/// @notice Checks if the caller is whitelisted

contracts/libraries/ClusterLib.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../interfaces/ISSVNetworkCore.sol";
55
import "./SSVStorage.sol";

contracts/libraries/CoreLib.sol

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "./SSVStorage.sol";
55

@@ -55,7 +55,6 @@ library CoreLib {
5555
return size > 0;
5656
}
5757

58-
5958
function setModuleContract(SSVModules moduleId, address moduleAddress) internal {
6059
if (!isContract(moduleAddress)) revert ISSVNetworkCore.TargetModuleDoesNotExist();
6160

contracts/libraries/OperatorLib.sol

+5-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../interfaces/ISSVNetworkCore.sol";
55
import "../interfaces/external/ISSVWhitelistingContract.sol";
@@ -66,16 +66,13 @@ library OperatorLib {
6666
if (operator.whitelisted) {
6767
address whitelistedAddress = s.operatorsWhitelist[operatorId];
6868
if (whitelistedAddress != address(0)) {
69-
// Check if the whitelisted address is a custom contract and use its logic to check if msg.sender is whitelisted
70-
if (isWhitelistingContract(whitelistedAddress)) {
69+
// Legacy address whitelists (EOAs or generic contracts)
70+
if (whitelistedAddress != msg.sender) {
71+
// Check if msg.sender is whitelisted via whitelisting contract
72+
// No need to check isWhitelistingContract() as its verified when registering it
7173
if (!ISSVWhitelistingContract(whitelistedAddress).isWhitelisted(msg.sender, operatorId)) {
7274
revert ISSVNetworkCore.CallerNotWhitelisted();
7375
}
74-
} else {
75-
// Legacy address whitelists (EOAs or generic contracts)
76-
if (whitelistedAddress != msg.sender) {
77-
revert ISSVNetworkCore.CallerNotWhitelisted();
78-
}
7976
}
8077
} else {
8178
// Handle bitmap-based whitelisting

contracts/libraries/ProtocolLib.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../interfaces/ISSVNetworkCore.sol";
55
import "./Types.sol";

contracts/libraries/SSVStorage.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../interfaces/ISSVNetworkCore.sol";
55
import "@openzeppelin/contracts/utils/Counters.sol";

contracts/libraries/SSVStorageProtocol.sol

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
/// @title SSV Network Storage Protocol
55
/// @notice Represents the operational settings and parameters required by the SSV Network
@@ -33,7 +33,7 @@ struct StorageProtocol {
3333
}
3434

3535
library SSVStorageProtocol {
36-
uint256 constant private SSV_STORAGE_POSITION = uint256(keccak256("ssv.network.storage.protocol")) - 1;
36+
uint256 private constant SSV_STORAGE_POSITION = uint256(keccak256("ssv.network.storage.protocol")) - 1;
3737

3838
function load() internal pure returns (StorageProtocol storage sd) {
3939
uint256 position = SSV_STORAGE_POSITION;

contracts/libraries/Types.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
uint256 constant DEDUCTED_DIGITS = 10_000_000;
55

contracts/libraries/ValidatorLib.sol

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../interfaces/ISSVNetworkCore.sol";
55
import "./SSVStorage.sol";
@@ -42,8 +42,8 @@ library ValidatorLib {
4242
}
4343

4444
function validateCorrectState(bytes32 validatorData, bytes32 hashedOperatorIds) internal pure returns (bool) {
45-
// All bits set to 1 except LSB
46-
// Clear LSB of stored validator data and compare
47-
return (validatorData & ~bytes32(uint256(1))) == hashedOperatorIds;
45+
// All bits set to 1 except LSB
46+
// Clear LSB of stored validator data and compare
47+
return (validatorData & ~bytes32(uint256(1))) == hashedOperatorIds;
4848
}
4949
}

contracts/modules/SSVClusters.sol

+2-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../interfaces/ISSVClusters.sol";
55
import "../libraries/ClusterLib.sol";
@@ -151,13 +151,7 @@ contract SSVClusters is ISSVClusters {
151151

152152
if (cluster.active) {
153153
StorageProtocol storage sp = SSVStorageProtocol.load();
154-
(uint64 clusterIndex, ) = OperatorLib.updateClusterOperators(
155-
operatorIds,
156-
false,
157-
validatorsRemoved,
158-
s,
159-
sp
160-
);
154+
(uint64 clusterIndex, ) = OperatorLib.updateClusterOperators(operatorIds, false, validatorsRemoved, s, sp);
161155

162156
cluster.updateClusterData(clusterIndex, sp.currentNetworkFeeIndex());
163157

contracts/modules/SSVDAO.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../interfaces/ISSVDAO.sol";
55
import "../libraries/Types.sol";

contracts/modules/SSVOperators.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../interfaces/ISSVOperators.sol";
55
import "../libraries/Types.sol";

contracts/modules/SSVOperatorsWhitelist.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import {ISSVOperatorsWhitelist} from "../interfaces/ISSVOperatorsWhitelist.sol";
55
import {ISSVWhitelistingContract} from "../interfaces/external/ISSVWhitelistingContract.sol";

contracts/modules/SSVViews.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../interfaces/ISSVViews.sol";
55
import "../libraries/Types.sol";

contracts/test/SSVNetworkBasicUpgrade.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../SSVNetwork.sol";
55

contracts/test/SSVNetworkReinitializable.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../SSVNetwork.sol";
55
import {SSVStorageT as SSVStorageUpgrade} from "./libraries/SSVStorageT.sol";

contracts/test/SSVNetworkUpgrade.sol

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "./interfaces/ISSVNetworkT.sol";
55

@@ -131,7 +131,7 @@ contract SSVNetworkUpgrade is
131131
abi.encodeWithSignature("removeOperator(uint64)", operatorId)
132132
);
133133
}
134-
134+
135135
function declareOperatorFee(uint64 operatorId, uint256 fee) external override {
136136
_delegateCall(
137137
SSVStorage.load().ssvContracts[SSVModules.SSV_OPERATORS],

contracts/test/SSVNetworkValidatorsPerOperator.sol

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../SSVNetwork.sol";
55

6-
76
contract SSVNetworkValidatorsPerOperatorUpgrade is SSVNetwork {
8-
97
function initializev2(uint32 validatorsPerOperatorLimit_) external reinitializer(_getInitializedVersion() + 1) {
108
SSVStorageProtocol.load().validatorsPerOperatorLimit = validatorsPerOperatorLimit_;
119
}

contracts/test/interfaces/ISSVNetworkT.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../../interfaces/ISSVNetworkCore.sol";
55
import "../../interfaces/ISSVOperators.sol";

contracts/test/libraries/CoreLibT.sol

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../../libraries/SSVStorage.sol";
55

66
library CoreLibT {
7-
87
function getVersion() internal pure returns (string memory) {
98
return "v1.1.0";
109
}
@@ -14,4 +13,4 @@ library CoreLibT {
1413
revert ISSVNetworkCore.TokenTransferFailed();
1514
}
1615
}
17-
}
16+
}

contracts/test/libraries/SSVStorageT.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../../interfaces/ISSVNetworkCore.sol";
55
import "../../libraries/Types.sol";

contracts/test/mocks/MockWhitelistingContract.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../../interfaces/external/ISSVWhitelistingContract.sol";
55
import "@openzeppelin/contracts/utils/introspection/ERC165.sol";

contracts/test/modules/SSVOperatorsUpdate.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../../interfaces/ISSVOperators.sol";
55
import "../../libraries/Types.sol";

contracts/upgrades/stage/goerli/SSVNetworkValidatorsPerOperator.sol

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../../../SSVNetwork.sol";
55

6-
76
contract SSVNetworkValidatorsPerOperator is SSVNetwork {
8-
97
function initializev2(uint32 validatorsPerOperatorLimit_) external reinitializer(_getInitializedVersion() + 1) {
108
SSVStorageProtocol.load().validatorsPerOperatorLimit = validatorsPerOperatorLimit_;
119
}

contracts/upgrades/stage/holesky/SSVNetworkUpgradeValidatorsPerOperator.sol

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
2-
pragma solidity 0.8.18;
2+
pragma solidity 0.8.24;
33

44
import "../../../SSVNetwork.sol";
55

6-
76
contract SSVNetworkUpgradeValidatorsPerOperator is SSVNetwork {
8-
97
function initializev2(uint32 validatorsPerOperatorLimit_) external reinitializer(_getInitializedVersion() + 1) {
108
SSVStorageProtocol.load().validatorsPerOperatorLimit = validatorsPerOperatorLimit_;
119
}

hardhat.config.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ const config: HardhatUserConfig = {
3030
},
3131
{
3232
version: '0.8.18',
33+
},
34+
{
35+
version: '0.8.24',
3336
settings: {
3437
optimizer: {
3538
enabled: true,
@@ -48,10 +51,11 @@ const config: HardhatUserConfig = {
4851
hardhat: {
4952
forking: {
5053
enabled: process.env.FORK_TESTING_ENABLED ? true : false,
51-
url: "https://mainnet.infura.io/v3/1810bc4fb927499990638f8451a455e4",
54+
url: process.env.MAINNET_ETH_NODE_URL,
5255
blockNumber: 19621100,
5356
},
5457
allowUnlimitedContractSize: true,
58+
gas: 5000000,
5559
},
5660
},
5761
etherscan: {

0 commit comments

Comments
 (0)