lamports += -> checked_add_lamports (#16791)

This commit is contained in:
Jeff Washington (jwash) 2021-04-27 09:11:35 -05:00 committed by GitHub
parent 81402ee7f5
commit 4e7e675c07
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 18 deletions

View File

@ -421,7 +421,9 @@ fn process_loader_upgradeable_instruction(
program.try_account_ref_mut()?.executable = true;
// Drain the Buffer account back to the payer
payer.try_account_ref_mut()?.lamports += buffer.lamports()?;
payer
.try_account_ref_mut()?
.checked_add_lamports(buffer.lamports()?)?;
buffer.try_account_ref_mut()?.lamports = 0;
ic_logger_msg!(logger, "Deployed program {:?}", program.unsigned_key());
@ -547,9 +549,10 @@ fn process_loader_upgradeable_instruction(
// Fund ProgramData to rent-exemption, spill the rest
spill.try_account_ref_mut()?.lamports += (programdata.lamports()?
+ buffer.lamports()?)
.saturating_sub(programdata_balance_required);
spill.try_account_ref_mut()?.checked_add_lamports(
(programdata.lamports()? + buffer.lamports()?)
.saturating_sub(programdata_balance_required),
)?;
buffer.try_account_ref_mut()?.lamports = 0;
programdata.try_account_ref_mut()?.lamports = programdata_balance_required;
@ -640,7 +643,9 @@ fn process_loader_upgradeable_instruction(
return Err(InstructionError::MissingRequiredSignature);
}
recipient_account.try_account_ref_mut()?.lamports += close_account.lamports()?;
recipient_account
.try_account_ref_mut()?
.checked_add_lamports(close_account.lamports()?)?;
close_account.try_account_ref_mut()?.lamports = 0;
for elt in close_account.try_account_ref_mut()?.data_as_mut_slice() {
*elt = 0;

View File

@ -49,7 +49,9 @@ fn apply_signature(
}
budget_state.pending_budget = None;
contract_keyed_account.try_account_ref_mut()?.lamports -= payment.lamports;
to_keyed_account.try_account_ref_mut()?.lamports += payment.lamports;
to_keyed_account
.try_account_ref_mut()?
.checked_add_lamports(payment.lamports)?;
}
Ok(())
}
@ -80,7 +82,9 @@ fn apply_timestamp(
}
budget_state.pending_budget = None;
contract_keyed_account.try_account_ref_mut()?.lamports -= payment.lamports;
to_keyed_account.try_account_ref_mut()?.lamports += payment.lamports;
to_keyed_account
.try_account_ref_mut()?
.checked_add_lamports(payment.lamports)?;
}
Ok(())
}
@ -111,7 +115,9 @@ fn apply_account_data(
}
budget_state.pending_budget = None;
contract_keyed_account.try_account_ref_mut()?.lamports -= payment.lamports;
to_keyed_account.try_account_ref_mut()?.lamports += payment.lamports;
to_keyed_account
.try_account_ref_mut()?
.checked_add_lamports(payment.lamports)?;
}
Ok(())
}
@ -135,7 +141,9 @@ pub fn process_instruction(
let to_keyed_account = contract_keyed_account;
let contract_keyed_account = keyed_account_at_index(keyed_accounts, 1)?;
contract_keyed_account.try_account_ref_mut()?.lamports = 0;
to_keyed_account.try_account_ref_mut()?.lamports += payment.lamports;
to_keyed_account
.try_account_ref_mut()?
.checked_add_lamports(payment.lamports)?;
return Ok(());
}
let existing =

View File

@ -10,7 +10,7 @@ use crate::{
};
use serde_derive::{Deserialize, Serialize};
use solana_sdk::{
account::{AccountSharedData, ReadableAccount},
account::{AccountSharedData, ReadableAccount, WritableAccount},
account_utils::{State, StateMut},
clock::{Clock, Epoch, UnixTimestamp},
ic_msg,
@ -1155,7 +1155,9 @@ impl<'a> StakeAccount for KeyedAccount<'a> {
self.set_state(&StakeState::Uninitialized)?;
}
split.try_account_ref_mut()?.lamports += lamports;
split
.try_account_ref_mut()?
.checked_add_lamports(lamports)?;
self.try_account_ref_mut()?.lamports -= lamports;
Ok(())
} else {
@ -1203,7 +1205,7 @@ impl<'a> StakeAccount for KeyedAccount<'a> {
// Drain the source stake account
let lamports = source_account.lamports()?;
source_account.try_account_ref_mut()?.lamports -= lamports;
self.try_account_ref_mut()?.lamports += lamports;
self.try_account_ref_mut()?.checked_add_lamports(lamports)?;
Ok(())
}
@ -1284,7 +1286,7 @@ impl<'a> StakeAccount for KeyedAccount<'a> {
}
self.try_account_ref_mut()?.lamports -= lamports;
to.try_account_ref_mut()?.lamports += lamports;
to.try_account_ref_mut()?.checked_add_lamports(lamports)?;
Ok(())
}
}
@ -1486,8 +1488,8 @@ pub fn redeem_rewards(
inflation_point_calc_tracer,
fix_stake_deactivate,
) {
stake_account.lamports += stakers_reward;
vote_account.lamports += voters_reward;
stake_account.checked_add_lamports(stakers_reward)?;
vote_account.checked_add_lamports(voters_reward)?;
stake_account.set_state(&StakeState::Stake(meta, stake))?;
@ -3171,7 +3173,7 @@ mod tests {
);
// simulate rewards
stake_account.borrow_mut().lamports += 10;
stake_account.borrow_mut().checked_add_lamports(10).unwrap();
// withdrawal before deactivate works for rewards amount
let stake_keyed_account = KeyedAccount::new(&stake_pubkey, true, &stake_account);
let to_keyed_account = KeyedAccount::new(&to, false, &to_account);
@ -3188,7 +3190,7 @@ mod tests {
);
// simulate rewards
stake_account.borrow_mut().lamports += 10;
stake_account.borrow_mut().checked_add_lamports(10).unwrap();
// withdrawal of rewards fails if not in excess of stake
let stake_keyed_account = KeyedAccount::new(&stake_pubkey, true, &stake_account);
let to_keyed_account = KeyedAccount::new(&to, false, &to_account);
@ -5964,7 +5966,11 @@ mod tests {
stake_keyed_account.deactivate(&clock, &signers).unwrap();
// Out of band deposit
stake_keyed_account.try_account_ref_mut().unwrap().lamports += withdraw_lamports;
stake_keyed_account
.try_account_ref_mut()
.unwrap()
.checked_add_lamports(withdraw_lamports)
.unwrap();
clock.epoch += 1;
stake_keyed_account