11// SPDX-License-Identifier: GPL-3.0-only
22pragma solidity 0.8.30 ;
33
4+ import {SafeCast} from "@openzeppelin4/contracts/utils/math/SafeCast.sol " ;
5+
46import {RocketStorageInterface} from "../../interface/RocketStorageInterface.sol " ;
57import {DepositInterface} from "../../interface/casper/DepositInterface.sol " ;
68import {RocketDAOProtocolSettingsMegapoolInterface} from "../../interface/dao/protocol/settings/RocketDAOProtocolSettingsMegapoolInterface.sol " ;
@@ -194,15 +196,15 @@ contract RocketMegapoolDelegate is RocketMegapoolDelegateBase, RocketMegapoolDel
194196 require (debt == 0 , "Cannot create validator while debt exists " );
195197 // Setup new validator
196198 RocketDepositPoolInterface rocketDepositPool = _getRocketDepositPool ();
197- uint32 validatorId = uint32 ( numValidators) ;
199+ uint32 validatorId = numValidators;
198200 unchecked { // Infeasible overflow
199201 numValidators += 1 ;
200202 }
201203 {
202204 ValidatorInfo memory validator;
203205 validator.inQueue = true ;
204- validator.lastRequestedBond = uint32 (_bondAmount / milliToWei);
205- validator.lastRequestedValue = uint32 (fullDepositValue / milliToWei);
206+ validator.lastRequestedBond = SafeCast. toUint32 (_bondAmount / milliToWei);
207+ validator.lastRequestedValue = SafeCast. toUint32 (fullDepositValue / milliToWei);
206208 validator.expressUsed = _useExpressTicket;
207209 validators[validatorId] = validator;
208210 }
@@ -211,7 +213,7 @@ contract RocketMegapoolDelegate is RocketMegapoolDelegateBase, RocketMegapoolDel
211213 pubkeys[validatorId] = _validatorPubkey;
212214 // Compute and verify supplied deposit data root is correct
213215 // Note: We check this here to ensure the deposit contract will not revert when executing prestake
214- bytes32 depositDataRoot = _computeDepositDataRoot (_validatorPubkey, _validatorSignature, uint64 (prestakeValue / 1 gwei));
216+ bytes32 depositDataRoot = _computeDepositDataRoot (_validatorPubkey, _validatorSignature, SafeCast. toUint64 (prestakeValue / 1 gwei));
215217 require (depositDataRoot == _depositDataRoot, "Invalid deposit data root " );
216218 // Increase queued capital balances
217219 userQueuedCapital += fullDepositValue - _bondAmount;
@@ -296,15 +298,15 @@ contract RocketMegapoolDelegate is RocketMegapoolDelegateBase, RocketMegapoolDel
296298 // Update validator status
297299 validator.inQueue = false ;
298300 validator.inPrestake = true ;
299- validator.lastAssignmentTime = uint32 (block .timestamp );
301+ validator.lastAssignmentTime = SafeCast. toUint32 (block .timestamp );
300302 // Record value assigned from deposit pool (subtract prestakeValue as it is going to deposit contract now)
301- validator.depositValue += uint32 (prestakeValue / milliToWei);
303+ validator.depositValue += SafeCast. toUint32 (prestakeValue / milliToWei);
302304 assignedValue += msg .value - prestakeValue;
303305 validators[_validatorId] = validator;
304306 // Execute prestake operation
305307 bytes memory signature = prestakeSignatures[_validatorId];
306308 bytes memory pubkey = pubkeys[_validatorId];
307- bytes32 depositDataRoot = _computeDepositDataRoot (pubkey, signature, uint64 (prestakeValue / 1 gwei));
309+ bytes32 depositDataRoot = _computeDepositDataRoot (pubkey, signature, SafeCast. toUint64 (prestakeValue / 1 gwei));
308310 casperDeposit.deposit {value: prestakeValue}(pubkey, abi.encodePacked (getWithdrawalCredentials ()), signature, depositDataRoot);
309311 // Remove value from queued balances and add to staking values
310312 uint256 assignedUserCapital = (validator.lastRequestedValue - validator.lastRequestedBond) * milliToWei;
@@ -339,13 +341,13 @@ contract RocketMegapoolDelegate is RocketMegapoolDelegateBase, RocketMegapoolDel
339341 validator.lastAssignmentTime = 0 ;
340342 validator.lastRequestedBond = 0 ;
341343 validator.lastRequestedValue = 0 ;
342- validator.depositValue += uint32 (lastRequestedValue - prestakeValue / milliToWei);
344+ validator.depositValue += SafeCast. toUint32 (lastRequestedValue - prestakeValue / milliToWei);
343345 validators[_validatorId] = validator;
344346 // Perform remaining 31 ETH stake onto beaconchain
345347 // Note: Signature is not verified on subsequent deposits and we know the validator is valid due to state proof
346348 bytes memory signature = hex "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 " ;
347349 bytes memory pubkey = pubkeys[_validatorId];
348- bytes32 depositDataRoot = _computeDepositDataRoot (pubkey, signature, uint64 (assignedUsed / 1 gwei));
350+ bytes32 depositDataRoot = _computeDepositDataRoot (pubkey, signature, SafeCast. toUint64 (assignedUsed / 1 gwei));
349351 casperDeposit.deposit {value: assignedUsed}(pubkey, abi.encodePacked (getWithdrawalCredentials ()), signature, depositDataRoot);
350352 // Emit event
351353 emit MegapoolValidatorStaked (_validatorId, block .timestamp );
@@ -507,7 +509,7 @@ contract RocketMegapoolDelegate is RocketMegapoolDelegateBase, RocketMegapoolDel
507509 if (lastDistributionTime == 0 ) return (_amount, 0 , 0 , 0 );
508510 // Calculate split based on capital ratio and average commission since last distribute
509511 RocketNetworkRevenuesInterface rocketNetworkRevenues = RocketNetworkRevenuesInterface (getContractAddress ("rocketNetworkRevenues " ));
510- uint64 lastDistributionTime64 = uint64 (lastDistributionTime);
512+ uint64 lastDistributionTime64 = SafeCast. toUint64 (lastDistributionTime);
511513 (, uint256 voterShare , uint256 protocolDAOShare , uint256 rethShare ) = rocketNetworkRevenues.calculateSplit (lastDistributionTime64);
512514 uint256 averageCapitalRatio = rocketNetworkRevenues.getNodeAverageCapitalRatioSince (nodeAddress, lastDistributionTime64);
513515 // Sanity check input values
@@ -538,7 +540,7 @@ contract RocketMegapoolDelegate is RocketMegapoolDelegateBase, RocketMegapoolDel
538540 }
539541 }
540542 // Update lockedTime to current time
541- validator.lockedTime = uint64 (block .timestamp );
543+ validator.lockedTime = SafeCast. toUint64 (block .timestamp );
542544 validators[_validatorId] = validator;
543545 // Emit event
544546 emit MegapoolValidatorLocked (_validatorId, block .timestamp );
@@ -633,7 +635,7 @@ contract RocketMegapoolDelegate is RocketMegapoolDelegateBase, RocketMegapoolDel
633635 // Mark as exited
634636 validator.exited = true ;
635637 validator.exiting = false ;
636- validator.exitBalance = uint64 ( _amountInGwei) ;
638+ validator.exitBalance = _amountInGwei;
637639 uint256 withdrawalBalance = uint256 (_amountInGwei) * 1 gwei ;
638640 validators[_validatorId] = validator;
639641 // Handle dissolved recovery
0 commit comments