Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Commit 2cdef76

Browse files
authored
stake-pool: Remove some unwraps (#4003)
* stake-pool: Remove a couple of unwraps * Remove one more unwrap * Update CLI too
1 parent 9da538b commit 2cdef76

File tree

7 files changed

+28
-18
lines changed

7 files changed

+28
-18
lines changed

stake-pool/cli/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1103,7 +1103,7 @@ fn command_list(config: &Config, stake_pool_address: &Pubkey) -> CommandResult {
11031103
stake_account_address: stake_account_address.to_string(),
11041104
validator_active_stake_lamports: validator.active_stake_lamports,
11051105
validator_last_update_epoch: validator.last_update_epoch,
1106-
validator_lamports: validator.stake_lamports(),
1106+
validator_lamports: validator.stake_lamports().unwrap(),
11071107
validator_transient_stake_account_address: transient_stake_account_address
11081108
.to_string(),
11091109
validator_transient_stake_lamports: validator.transient_stake_lamports,

stake-pool/program/src/processor.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,9 @@ impl Processor {
446446
stake::instruction::split(stake_account.key, authority.key, amount, split_stake.key);
447447

448448
invoke_signed(
449-
split_instruction.last().unwrap(),
449+
split_instruction
450+
.last()
451+
.ok_or(ProgramError::InvalidInstructionData)?,
450452
&[stake_account, split_stake, authority],
451453
signers,
452454
)
@@ -2237,8 +2239,12 @@ impl Processor {
22372239
.zip(validator_stake_accounts.chunks_exact(2));
22382240
for (validator_stake_record, validator_stakes) in validator_iter {
22392241
// chunks_exact means that we always get 2 elements, making this safe
2240-
let validator_stake_info = validator_stakes.first().unwrap();
2241-
let transient_stake_info = validator_stakes.last().unwrap();
2242+
let validator_stake_info = validator_stakes
2243+
.first()
2244+
.ok_or(ProgramError::InvalidInstructionData)?;
2245+
let transient_stake_info = validator_stakes
2246+
.last()
2247+
.ok_or(ProgramError::InvalidInstructionData)?;
22422248
if check_validator_stake_address(
22432249
program_id,
22442250
stake_pool_info.key,
@@ -2533,7 +2539,7 @@ impl Processor {
25332539
return Err(StakePoolError::StakeListOutOfDate.into());
25342540
}
25352541
total_lamports = total_lamports
2536-
.checked_add(validator_stake_record.stake_lamports())
2542+
.checked_add(validator_stake_record.stake_lamports()?)
25372543
.ok_or(StakePoolError::CalculationFailure)?;
25382544
}
25392545

stake-pool/program/src/state.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -661,10 +661,10 @@ pub struct ValidatorStakeInfo {
661661

662662
impl ValidatorStakeInfo {
663663
/// Get the total lamports on this validator (active and transient)
664-
pub fn stake_lamports(&self) -> u64 {
664+
pub fn stake_lamports(&self) -> Result<u64, StakePoolError> {
665665
self.active_stake_lamports
666666
.checked_add(self.transient_stake_lamports)
667-
.unwrap()
667+
.ok_or(StakePoolError::CalculationFailure)
668668
}
669669

670670
/// Performs a very cheap comparison, for checking if this validator stake
@@ -680,12 +680,14 @@ impl ValidatorStakeInfo {
680680
/// Performs a comparison, used to check if this validator stake
681681
/// info has more active lamports than some limit
682682
pub fn active_lamports_greater_than(data: &[u8], lamports: &u64) -> bool {
683+
// without this unwrap, compute usage goes up significantly
683684
u64::try_from_slice(&data[0..8]).unwrap() > *lamports
684685
}
685686

686687
/// Performs a comparison, used to check if this validator stake
687688
/// info has more transient lamports than some limit
688689
pub fn transient_lamports_greater_than(data: &[u8], lamports: &u64) -> bool {
690+
// without this unwrap, compute usage goes up significantly
689691
u64::try_from_slice(&data[8..16]).unwrap() > *lamports
690692
}
691693

@@ -701,6 +703,8 @@ impl Pack for ValidatorStakeInfo {
701703
const LEN: usize = 73;
702704
fn pack_into_slice(&self, data: &mut [u8]) {
703705
let mut data = data;
706+
// Removing this unwrap would require changing from `Pack` to some other
707+
// trait or `bytemuck`, so it stays in for now
704708
self.serialize(&mut data).unwrap();
705709
}
706710
fn unpack_from_slice(src: &[u8]) -> Result<Self, ProgramError> {

stake-pool/program/tests/deposit.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,8 @@ async fn success(token_program_id: Pubkey) {
235235
.find(&validator_stake_account.vote.pubkey())
236236
.unwrap();
237237
assert_eq!(
238-
post_validator_stake_item.stake_lamports(),
239-
pre_validator_stake_item.stake_lamports() + stake_lamports - stake_rent,
238+
post_validator_stake_item.stake_lamports().unwrap(),
239+
pre_validator_stake_item.stake_lamports().unwrap() + stake_lamports - stake_rent,
240240
);
241241

242242
// Check validator stake account actual SOL balance
@@ -247,7 +247,7 @@ async fn success(token_program_id: Pubkey) {
247247
.await;
248248
assert_eq!(
249249
validator_stake_account.lamports,
250-
post_validator_stake_item.stake_lamports()
250+
post_validator_stake_item.stake_lamports().unwrap()
251251
);
252252
assert_eq!(post_validator_stake_item.transient_stake_lamports, 0);
253253

@@ -429,8 +429,8 @@ async fn success_with_extra_stake_lamports() {
429429
.find(&validator_stake_account.vote.pubkey())
430430
.unwrap();
431431
assert_eq!(
432-
post_validator_stake_item.stake_lamports(),
433-
pre_validator_stake_item.stake_lamports() + stake_lamports - stake_rent,
432+
post_validator_stake_item.stake_lamports().unwrap(),
433+
pre_validator_stake_item.stake_lamports().unwrap() + stake_lamports - stake_rent,
434434
);
435435

436436
// Check validator stake account actual SOL balance
@@ -441,7 +441,7 @@ async fn success_with_extra_stake_lamports() {
441441
.await;
442442
assert_eq!(
443443
validator_stake_account.lamports,
444-
post_validator_stake_item.stake_lamports()
444+
post_validator_stake_item.stake_lamports().unwrap()
445445
);
446446
assert_eq!(post_validator_stake_item.transient_stake_lamports, 0);
447447

stake-pool/program/tests/helpers/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2127,7 +2127,7 @@ pub async fn get_validator_list_sum(
21272127
let validator_sum: u64 = validator_list
21282128
.validators
21292129
.iter()
2130-
.map(|info| info.stake_lamports())
2130+
.map(|info| info.stake_lamports().unwrap())
21312131
.sum();
21322132
let rent = banks_client.get_rent().await.unwrap();
21332133
let rent = rent.minimum_balance(std::mem::size_of::<stake::state::StakeState>());

stake-pool/program/tests/update_validator_list_balance.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,7 @@ async fn merge_transient_stake_after_remove() {
662662
validator_list.validators[0].status,
663663
StakeStatus::ReadyForRemoval
664664
);
665-
assert_eq!(validator_list.validators[0].stake_lamports(), 0);
665+
assert_eq!(validator_list.validators[0].stake_lamports().unwrap(), 0);
666666

667667
let reserve_stake = context
668668
.banks_client

stake-pool/program/tests/withdraw.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,12 +219,12 @@ async fn _success(token_program_id: Pubkey, test_type: SuccessTestType) {
219219
.find(&validator_stake_account.vote.pubkey())
220220
.unwrap();
221221
assert_eq!(
222-
validator_stake_item.stake_lamports(),
223-
validator_stake_item_before.stake_lamports() - tokens_burnt
222+
validator_stake_item.stake_lamports().unwrap(),
223+
validator_stake_item_before.stake_lamports().unwrap() - tokens_burnt
224224
);
225225
assert_eq!(
226226
validator_stake_item.active_stake_lamports,
227-
validator_stake_item.stake_lamports(),
227+
validator_stake_item.stake_lamports().unwrap(),
228228
);
229229

230230
// Check tokens used

0 commit comments

Comments
 (0)