Skip to content

Commit 0ca5009

Browse files
Following best practices for closing accounts (#1187)
* Following best practices for closing accounts. * Removing unwrap. * Switching to try borrow.
1 parent 520e448 commit 0ca5009

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

core/rust/utils/src/account.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use solana_program::{
66
program_error::ProgramError,
77
pubkey::Pubkey,
88
rent::Rent,
9-
system_instruction,
9+
system_instruction, system_program,
1010
sysvar::Sysvar,
1111
};
1212

@@ -108,13 +108,20 @@ pub fn close_account_raw<'a>(
108108
src_account_info: &AccountInfo<'a>,
109109
) -> ProgramResult {
110110
let dest_starting_lamports = dest_account_info.lamports();
111-
**dest_account_info.lamports.borrow_mut() = dest_starting_lamports
111+
let mut dest_lamports_mut = dest_account_info
112+
.lamports
113+
.try_borrow_mut()
114+
.map_err(|_| ProgramError::AccountBorrowFailed)?;
115+
**dest_lamports_mut = dest_starting_lamports
112116
.checked_add(src_account_info.lamports())
113-
.unwrap();
114-
**src_account_info.lamports.borrow_mut() = 0;
117+
.ok_or(ProgramError::InvalidRealloc)?;
115118

116-
let mut src_data = src_account_info.data.borrow_mut();
117-
src_data.fill(0);
119+
let mut src_lamports_mut = src_account_info
120+
.lamports
121+
.try_borrow_mut()
122+
.map_err(|_| ProgramError::AccountBorrowFailed)?;
123+
**src_lamports_mut = 0;
118124

119-
Ok(())
125+
src_account_info.assign(&system_program::ID);
126+
src_account_info.realloc(0, false).map_err(Into::into)
120127
}

0 commit comments

Comments
 (0)