1
1
use borsh:: BorshSerialize ;
2
2
use light_account_checks:: {
3
- checks:: { check_data_is_zeroed , check_owner, check_signer} ,
3
+ checks:: { account_info_init , check_owner, check_signer} ,
4
4
discriminator:: Discriminator ,
5
5
} ;
6
6
use light_batched_merkle_tree:: merkle_tree:: BatchedMerkleTreeAccount ;
@@ -9,10 +9,7 @@ use light_compressed_account::constants::{
9
9
} ;
10
10
use pinocchio:: { account_info:: AccountInfo , program_error:: ProgramError } ;
11
11
12
- use crate :: {
13
- errors:: SystemProgramError , invoke_cpi:: account:: CpiContextAccount , Result ,
14
- CPI_CONTEXT_ACCOUNT_DISCRIMINATOR ,
15
- } ;
12
+ use crate :: { errors:: SystemProgramError , invoke_cpi:: account:: CpiContextAccount , Result } ;
16
13
pub struct InitializeCpiContextAccount < ' info > {
17
14
pub fee_payer : & ' info AccountInfo ,
18
15
pub cpi_context_account : & ' info AccountInfo ,
@@ -55,12 +52,11 @@ pub fn init_cpi_context_account(accounts: &[AccountInfo]) -> Result<()> {
55
52
// Check that Merkle tree is initialized.
56
53
let ctx = InitializeCpiContextAccount :: from_account_infos ( accounts) ?;
57
54
58
- let mut cpi_context_account_data = ctx. cpi_context_account . try_borrow_mut_data ( ) ?;
59
- // Check account is not initialized.
60
- check_data_is_zeroed :: < 8 > ( & cpi_context_account_data[ ..] ) . map_err ( ProgramError :: from) ?;
61
- // Initialize account with discriminator.
62
- cpi_context_account_data[ ..8 ] . copy_from_slice ( & CPI_CONTEXT_ACCOUNT_DISCRIMINATOR ) ;
55
+ // 1. Check discriminator bytes are zeroed.
56
+ // 2. Set discriminator.
57
+ account_info_init :: < CpiContextAccount > ( ctx. cpi_context_account ) ?;
63
58
59
+ let mut cpi_context_account_data = ctx. cpi_context_account . try_borrow_mut_data ( ) ?;
64
60
let cpi_context_account = CpiContextAccount {
65
61
associated_merkle_tree : * ctx. associated_merkle_tree . key ( ) ,
66
62
..Default :: default ( )
0 commit comments