Skip to content

Commit ede4574

Browse files
wip
1 parent 986335d commit ede4574

File tree

2 files changed

+20
-23
lines changed

2 files changed

+20
-23
lines changed

program-tests/sdk-test/src/decompress_to_pda.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use borsh::{BorshDeserialize, BorshSerialize};
22
use light_sdk::{
3+
account::LightAccount,
34
cpi::{CpiAccounts, CpiAccountsConfig},
45
error::LightSdkError,
56
instruction::{account_meta::CompressedAccountMeta, ValidityProof},
@@ -32,6 +33,12 @@ pub fn decompress_to_pda(
3233
&accounts[instruction_data.system_accounts_offset as usize..],
3334
CpiAccountsConfig::new(crate::LIGHT_CPI_SIGNER),
3435
);
36+
// we zero out the compressed account.
37+
let compressed_account = LightAccount::<'_, MyPdaAccount>::new_mut(
38+
&crate::ID,
39+
&instruction_data.compressed_account.meta,
40+
instruction_data.compressed_account.data,
41+
)?;
3542

3643
// Custom seeds for PDA derivation
3744
// Caller program should provide the seeds used for their onchain PDA.
@@ -41,8 +48,7 @@ pub fn decompress_to_pda(
4148
// this inits pda_account if not already initialized
4249
decompress_idempotent::<MyPdaAccount>(
4350
pda_account,
44-
Some(&instruction_data.compressed_account.meta),
45-
&instruction_data.compressed_account.data,
51+
compressed_account,
4652
instruction_data.proof,
4753
cpi_accounts,
4854
&crate::ID,

program-tests/sdk-test/src/sdk/decompress_idempotent.rs

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ pub const SLOTS_UNTIL_COMPRESSION: u64 = 100;
3838
/// * `Err(LightSdkError)` if there was an error
3939
pub fn decompress_idempotent<'info, A>(
4040
pda_account: &AccountInfo<'info>,
41-
compressed_account_meta: Option<&CompressedAccountMeta>,
42-
compressed_account_data: &A,
41+
mut compressed_account: LightAccount<'_, A>,
4342
proof: ValidityProof,
4443
cpi_accounts: CpiAccounts<'_, 'info>,
4544
owner_program: &Pubkey,
@@ -63,13 +62,6 @@ where
6362
return Ok(());
6463
}
6564

66-
// we zero out the compressed account.
67-
let mut compressed_account = LightAccount::<'_, A>::new_mut(
68-
owner_program,
69-
compressed_account_meta.ok_or(LightSdkError::ConstraintViolation)?,
70-
compressed_account_data.clone(), // TODO: try avoid clone
71-
)?;
72-
7365
// Get compressed address
7466
let compressed_address = compressed_account
7567
.address()
@@ -124,23 +116,17 @@ where
124116
&[&signer_seeds_refs],
125117
)?;
126118

127-
// Serialize the account data
128-
let mut data_bytes = vec![];
129-
compressed_account_data
130-
.serialize(&mut data_bytes)
131-
.map_err(|_| LightSdkError::Borsh)?;
132-
133-
// Initialize PDA with decompressed data
134-
let mut decompressed_pda: A = compressed_account.account;
119+
// Initialize PDA with decompressed data and update slot
120+
let mut decompressed_pda = compressed_account.account.clone();
135121
decompressed_pda.set_last_written_slot(current_slot);
136-
137122
// Write data to PDA
138123
decompressed_pda
139124
.serialize(&mut &mut pda_account.try_borrow_mut_data()?[8..])
140125
.map_err(|_| LightSdkError::Borsh)?;
141126

142-
// Zero the compressed account with CPI
127+
// Zero the compressed account
143128
compressed_account.account = A::default();
129+
144130
let cpi_inputs = CpiInputs::new(proof, vec![compressed_account.to_account_info()?]);
145131
cpi_inputs.invoke_light_system_program(cpi_accounts)?;
146132

@@ -214,14 +200,19 @@ mod tests {
214200
data: instruction_data.data,
215201
};
216202

203+
let mut compressed_account = LightAccount::<'_, MyPdaAccount>::new_mut(
204+
&crate::ID,
205+
&instruction_data.compressed_account_meta.unwrap(),
206+
account_data,
207+
)?;
208+
217209
// Custom seeds
218210
let custom_seeds: Vec<&[u8]> = vec![b"decompressed_pda"];
219211

220212
// Call decompress_idempotent - this should work whether PDA exists or not
221213
decompress_idempotent::<MyPdaAccount>(
222214
pda_account,
223-
instruction_data.compressed_account_meta.as_ref(),
224-
&account_data,
215+
compressed_account,
225216
instruction_data.proof,
226217
cpi_accounts,
227218
&crate::ID,

0 commit comments

Comments
 (0)