Skip to content

Commit 3fa9940

Browse files
authored
Merge pull request #688 from lidofinance/fix/shapella-upgrade-beta3-to-rc
Fix: shapella upgrade from beta3 to rc
2 parents 2bce10d + 98ff5e7 commit 3fa9940

File tree

56 files changed

+4330
-1350
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+4330
-1350
lines changed

contracts/0.4.24/Lido.sol

+9-9
Original file line numberDiff line numberDiff line change
@@ -1175,8 +1175,8 @@ contract Lido is Versioned, StETHPermit, AragonApp {
11751175
* 4. Pass the accounting values to sanity checker to smoothen positive token rebase
11761176
* (i.e., postpone the extra rewards to be applied during the next rounds)
11771177
* 5. Invoke finalization of the withdrawal requests
1178-
* 6. Distribute protocol fee (treasury & node operators)
1179-
* 7. Burn excess shares within the allowed limit (can postpone some shares to be burnt later)
1178+
* 6. Burn excess shares within the allowed limit (can postpone some shares to be burnt later)
1179+
* 7. Distribute protocol fee (treasury & node operators)
11801180
* 8. Complete token rebase by informing observers (emit an event and call the external receivers if any)
11811181
* 9. Sanity check for the provided simulated share rate
11821182
*/
@@ -1261,6 +1261,13 @@ contract Lido is Versioned, StETHPermit, AragonApp {
12611261
);
12621262

12631263
// Step 6.
1264+
// Burn the previously requested shares
1265+
if (reportContext.sharesToBurn > 0) {
1266+
IBurner(contracts.burner).commitSharesToBurn(reportContext.sharesToBurn);
1267+
_burnShares(contracts.burner, reportContext.sharesToBurn);
1268+
}
1269+
1270+
// Step 7.
12641271
// Distribute protocol fee (treasury & node operators)
12651272
reportContext.sharesMintedAsFees = _processRewards(
12661273
reportContext,
@@ -1269,13 +1276,6 @@ contract Lido is Versioned, StETHPermit, AragonApp {
12691276
elRewards
12701277
);
12711278

1272-
// Step 7.
1273-
// Burn the previously requested shares
1274-
if (reportContext.sharesToBurn > 0) {
1275-
IBurner(contracts.burner).commitSharesToBurn(reportContext.sharesToBurn);
1276-
_burnShares(contracts.burner, reportContext.sharesToBurn);
1277-
}
1278-
12791279
// Step 8.
12801280
// Complete token rebase by informing observers (emit an event and call the external receivers if any)
12811281
(

contracts/0.4.24/nos/NodeOperatorsRegistry.sol

+43-43
Large diffs are not rendered by default.

contracts/0.4.24/test_helpers/MockLegacyOracle.sol

+5-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,11 @@ contract MockLegacyOracle is ILegacyOracle, LegacyOracle {
9191
}
9292

9393
function initializeAsV3() external {
94-
CONTRACT_VERSION_POSITION_DEPRECATED.setStorageUint256(3);
94+
CONTRACT_VERSION_POSITION_DEPRECATED.setStorageUint256(3);
95+
}
96+
97+
function setLido(address lido) external {
98+
LIDO_POSITION.setStorageAddress(lido);
9599
}
96100

97101
}

contracts/0.4.24/test_helpers/NodeOperatorsRegistryMock.sol

+14-14
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ contract NodeOperatorsRegistryMock is NodeOperatorsRegistry {
99

1010
function increaseNodeOperatorDepositedSigningKeysCount(uint256 _nodeOperatorId, uint64 _keysCount) external {
1111
Packed64x4.Packed memory signingKeysStats = _nodeOperators[_nodeOperatorId].signingKeysStats;
12-
signingKeysStats.set(DEPOSITED_KEYS_COUNT_OFFSET, signingKeysStats.get(DEPOSITED_KEYS_COUNT_OFFSET) + _keysCount);
12+
signingKeysStats.set(TOTAL_DEPOSITED_KEYS_COUNT_OFFSET, signingKeysStats.get(TOTAL_DEPOSITED_KEYS_COUNT_OFFSET) + _keysCount);
1313
_nodeOperators[_nodeOperatorId].signingKeysStats = signingKeysStats;
1414

1515
Packed64x4.Packed memory totalSigningKeysStats = _loadSummarySigningKeysStats();
1616
totalSigningKeysStats.set(
17-
DEPOSITED_KEYS_COUNT_OFFSET, totalSigningKeysStats.get(DEPOSITED_KEYS_COUNT_OFFSET).add(_keysCount)
17+
TOTAL_DEPOSITED_KEYS_COUNT_OFFSET, totalSigningKeysStats.get(TOTAL_DEPOSITED_KEYS_COUNT_OFFSET).add(_keysCount)
1818
);
1919
_saveSummarySigningKeysStats(totalSigningKeysStats);
2020

@@ -26,34 +26,34 @@ contract NodeOperatorsRegistryMock is NodeOperatorsRegistry {
2626
Packed64x4.Packed memory signingKeysStats;
2727
for (uint256 i; i < nodeOperatorsCount; ++i) {
2828
signingKeysStats = _loadOperatorSigningKeysStats(i);
29-
testing_setDepositedSigningKeysCount(i, signingKeysStats.get(VETTED_KEYS_COUNT_OFFSET));
29+
testing_setDepositedSigningKeysCount(i, signingKeysStats.get(TOTAL_VETTED_KEYS_COUNT_OFFSET));
3030
}
3131
}
3232

3333
function testing_markAllKeysDeposited(uint256 _nodeOperatorId) external {
3434
_onlyExistedNodeOperator(_nodeOperatorId);
3535
Packed64x4.Packed memory signingKeysStats = _nodeOperators[_nodeOperatorId].signingKeysStats;
36-
testing_setDepositedSigningKeysCount(_nodeOperatorId, signingKeysStats.get(VETTED_KEYS_COUNT_OFFSET));
36+
testing_setDepositedSigningKeysCount(_nodeOperatorId, signingKeysStats.get(TOTAL_VETTED_KEYS_COUNT_OFFSET));
3737
}
3838

3939
function testing_setDepositedSigningKeysCount(uint256 _nodeOperatorId, uint256 _depositedSigningKeysCount) public {
4040
_onlyExistedNodeOperator(_nodeOperatorId);
4141
// NodeOperator storage nodeOperator = _nodeOperators[_nodeOperatorId];
4242
Packed64x4.Packed memory signingKeysStats = _loadOperatorSigningKeysStats(_nodeOperatorId);
43-
uint64 depositedSigningKeysCountBefore = signingKeysStats.get(DEPOSITED_KEYS_COUNT_OFFSET);
43+
uint64 depositedSigningKeysCountBefore = signingKeysStats.get(TOTAL_DEPOSITED_KEYS_COUNT_OFFSET);
4444
if (_depositedSigningKeysCount == depositedSigningKeysCountBefore) {
4545
return;
4646
}
4747

4848
require(
49-
_depositedSigningKeysCount <= signingKeysStats.get(VETTED_KEYS_COUNT_OFFSET),
49+
_depositedSigningKeysCount <= signingKeysStats.get(TOTAL_VETTED_KEYS_COUNT_OFFSET),
5050
"DEPOSITED_SIGNING_KEYS_COUNT_TOO_HIGH"
5151
);
5252
require(
53-
_depositedSigningKeysCount >= signingKeysStats.get(EXITED_KEYS_COUNT_OFFSET), "DEPOSITED_SIGNING_KEYS_COUNT_TOO_LOW"
53+
_depositedSigningKeysCount >= signingKeysStats.get(TOTAL_EXITED_KEYS_COUNT_OFFSET), "DEPOSITED_SIGNING_KEYS_COUNT_TOO_LOW"
5454
);
5555

56-
signingKeysStats.set(DEPOSITED_KEYS_COUNT_OFFSET, uint64(_depositedSigningKeysCount));
56+
signingKeysStats.set(TOTAL_DEPOSITED_KEYS_COUNT_OFFSET, uint64(_depositedSigningKeysCount));
5757
_saveOperatorSigningKeysStats(_nodeOperatorId, signingKeysStats);
5858

5959
emit DepositedSigningKeysCountChanged(_nodeOperatorId, _depositedSigningKeysCount);
@@ -87,9 +87,9 @@ contract NodeOperatorsRegistryMock is NodeOperatorsRegistry {
8787
operator.rewardAddress = _rewardAddress;
8888

8989
Packed64x4.Packed memory signingKeysStats;
90-
signingKeysStats.set(DEPOSITED_KEYS_COUNT_OFFSET, depositedSigningKeysCount);
91-
signingKeysStats.set(VETTED_KEYS_COUNT_OFFSET, vettedSigningKeysCount);
92-
signingKeysStats.set(EXITED_KEYS_COUNT_OFFSET, exitedSigningKeysCount);
90+
signingKeysStats.set(TOTAL_DEPOSITED_KEYS_COUNT_OFFSET, depositedSigningKeysCount);
91+
signingKeysStats.set(TOTAL_VETTED_KEYS_COUNT_OFFSET, vettedSigningKeysCount);
92+
signingKeysStats.set(TOTAL_EXITED_KEYS_COUNT_OFFSET, exitedSigningKeysCount);
9393
signingKeysStats.set(TOTAL_KEYS_COUNT_OFFSET, totalSigningKeysCount);
9494

9595
operator.signingKeysStats = signingKeysStats;
@@ -101,9 +101,9 @@ contract NodeOperatorsRegistryMock is NodeOperatorsRegistry {
101101
emit NodeOperatorAdded(id, _name, _rewardAddress, 0);
102102

103103
Packed64x4.Packed memory totalSigningKeysStats = _loadSummarySigningKeysStats();
104-
totalSigningKeysStats.set(VETTED_KEYS_COUNT_OFFSET, totalSigningKeysStats.get(VETTED_KEYS_COUNT_OFFSET).add(vettedSigningKeysCount));
105-
totalSigningKeysStats.set(DEPOSITED_KEYS_COUNT_OFFSET, totalSigningKeysStats.get(DEPOSITED_KEYS_COUNT_OFFSET).add(depositedSigningKeysCount));
106-
totalSigningKeysStats.set(EXITED_KEYS_COUNT_OFFSET, totalSigningKeysStats.get(EXITED_KEYS_COUNT_OFFSET).add(exitedSigningKeysCount));
104+
totalSigningKeysStats.set(TOTAL_VETTED_KEYS_COUNT_OFFSET, totalSigningKeysStats.get(TOTAL_VETTED_KEYS_COUNT_OFFSET).add(vettedSigningKeysCount));
105+
totalSigningKeysStats.set(TOTAL_DEPOSITED_KEYS_COUNT_OFFSET, totalSigningKeysStats.get(TOTAL_DEPOSITED_KEYS_COUNT_OFFSET).add(depositedSigningKeysCount));
106+
totalSigningKeysStats.set(TOTAL_EXITED_KEYS_COUNT_OFFSET, totalSigningKeysStats.get(TOTAL_EXITED_KEYS_COUNT_OFFSET).add(exitedSigningKeysCount));
107107
totalSigningKeysStats.set(TOTAL_KEYS_COUNT_OFFSET, totalSigningKeysStats.get(TOTAL_KEYS_COUNT_OFFSET).add(totalSigningKeysCount));
108108
_saveSummarySigningKeysStats(totalSigningKeysStats);
109109
}

contracts/0.8.9/DepositSecurityModule.sol

+3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ interface IStakingRouter {
2626
function getStakingModuleIsActive(uint256 _stakingModuleId) external view returns (bool);
2727
function getStakingModuleNonce(uint256 _stakingModuleId) external view returns (uint256);
2828
function getStakingModuleLastDepositBlock(uint256 _stakingModuleId) external view returns (uint256);
29+
function hasStakingModule(uint256 _stakingModuleId) external view returns (bool);
2930
}
3031

3132

@@ -377,6 +378,8 @@ contract DepositSecurityModule {
377378
* such attestations will be enough to reach quorum.
378379
*/
379380
function canDeposit(uint256 stakingModuleId) external view returns (bool) {
381+
if (!STAKING_ROUTER.hasStakingModule(stakingModuleId)) return false;
382+
380383
bool isModuleActive = STAKING_ROUTER.getStakingModuleIsActive(stakingModuleId);
381384
uint256 lastDepositBlock = STAKING_ROUTER.getStakingModuleLastDepositBlock(stakingModuleId);
382385
bool isLidoCanDeposit = LIDO.canDeposit();

0 commit comments

Comments
 (0)