common.rs 709 B

12345678910111213141516171819
  1. use crate::prelude::{Id, System};
  2. use crate::Result;
  3. use solana_program::account_info::AccountInfo;
  4. use solana_program::system_program;
  5. pub fn close<'info>(info: AccountInfo<'info>, sol_destination: AccountInfo<'info>) -> Result<()> {
  6. // Transfer tokens from the account to the sol_destination.
  7. let dest_starting_lamports = sol_destination.lamports();
  8. **sol_destination.lamports.borrow_mut() =
  9. dest_starting_lamports.checked_add(info.lamports()).unwrap();
  10. **info.lamports.borrow_mut() = 0;
  11. info.assign(&system_program::ID);
  12. info.realloc(0, false).map_err(Into::into)
  13. }
  14. pub fn is_closed(info: &AccountInfo) -> bool {
  15. info.owner == &System::id() && info.data_is_empty()
  16. }