Browse Source

feat: Use new canonical close account pattern (#2169)

Pierre 3 years ago
parent
commit
8ee4600785
2 changed files with 4 additions and 11 deletions
  1. 1 0
      CHANGELOG.md
  2. 3 11
      lang/src/common.rs

+ 1 - 0
CHANGELOG.md

@@ -16,6 +16,7 @@ The minor version will be incremented upon a breaking change and the patch versi
 * spl: Add `create_metadata_accounts_v3` and `set_collection_size` wrappers ([#2119](https://github.com/coral-xyz/anchor/pull/2119))
 * spl: Add `MetadataAccount` account deserialization. ([#2014](https://github.com/coral-xyz/anchor/pull/2014)).
 * lang: Add parsing for consts from impl blocks for IDL PDA seeds generation ([#2128](https://github.com/coral-xyz/anchor/pull/2014))
+* lang: Account closing reassigns to system program and reallocates ([#2169](https://github.com/coral-xyz/anchor/pull/2169)).
 * ts: Add coders for SPL programs ([#2143](https://github.com/coral-xyz/anchor/pull/2143)).
 
 ### Fixes

+ 3 - 11
lang/src/common.rs

@@ -1,9 +1,6 @@
-use crate::bpf_writer::BpfWriter;
-use crate::error::ErrorCode;
-use crate::prelude::error;
 use crate::Result;
 use solana_program::account_info::AccountInfo;
-use std::io::Write;
+use solana_program::system_program;
 
 pub fn close<'info>(info: AccountInfo<'info>, sol_destination: AccountInfo<'info>) -> Result<()> {
     // Transfer tokens from the account to the sol_destination.
@@ -12,11 +9,6 @@ pub fn close<'info>(info: AccountInfo<'info>, sol_destination: AccountInfo<'info
         dest_starting_lamports.checked_add(info.lamports()).unwrap();
     **info.lamports.borrow_mut() = 0;
 
-    // Mark the account discriminator as closed.
-    let mut data = info.try_borrow_mut_data()?;
-    let dst: &mut [u8] = &mut data;
-    let mut writer = BpfWriter::new(dst);
-    writer
-        .write_all(&crate::__private::CLOSED_ACCOUNT_DISCRIMINATOR)
-        .map_err(|_| error!(ErrorCode::AccountDidNotSerialize))
+    info.assign(&system_program::ID);
+    info.realloc(0, false).map_err(Into::into)
 }