1use anchor_lang::solana_program::pubkey::Pubkey;
2
3use crate::{
4 address::NewAddressParamsPacked,
5 compressed_account::{
6 OutputCompressedAccountWithPackedContext, PackedCompressedAccountWithMerkleContext,
7 },
8 proof::CompressedProof,
9 verify::{CompressedCpiContext, InstructionDataInvokeCpi},
10 PROGRAM_ID_ACCOUNT_COMPRESSION,
11};
12
13pub fn get_registered_program_pda(program_id: &Pubkey) -> Pubkey {
14 Pubkey::find_program_address(
15 &[program_id.to_bytes().as_slice()],
16 &PROGRAM_ID_ACCOUNT_COMPRESSION,
17 )
18 .0
19}
20
21pub fn get_cpi_authority_pda(program_id: &Pubkey) -> Pubkey {
22 Pubkey::find_program_address(&[b"cpi_authority"], program_id).0
23}
24
25pub fn create_cpi_inputs_for_new_account(
27 proof: CompressedProof,
28 new_address_params: NewAddressParamsPacked,
29 compressed_pda: OutputCompressedAccountWithPackedContext,
30 cpi_context: Option<CompressedCpiContext>,
31) -> InstructionDataInvokeCpi {
32 InstructionDataInvokeCpi {
33 proof: Some(proof),
34 new_address_params: vec![new_address_params],
35 relay_fee: None,
36 input_compressed_accounts_with_merkle_context: vec![],
37 output_compressed_accounts: vec![compressed_pda],
38 compress_or_decompress_lamports: None,
39 is_compress: false,
40 cpi_context,
41 }
42}
43
44pub fn create_cpi_inputs_for_account_update(
45 proof: CompressedProof,
46 old_compressed_pda: PackedCompressedAccountWithMerkleContext,
47 new_compressed_pda: OutputCompressedAccountWithPackedContext,
48 cpi_context: Option<CompressedCpiContext>,
49) -> InstructionDataInvokeCpi {
50 InstructionDataInvokeCpi {
51 proof: Some(proof),
52 new_address_params: vec![],
53 input_compressed_accounts_with_merkle_context: vec![old_compressed_pda],
54 output_compressed_accounts: vec![new_compressed_pda],
55 relay_fee: None,
56 compress_or_decompress_lamports: None,
57 is_compress: false,
58 cpi_context,
59 }
60}
61
62pub fn create_cpi_inputs_for_account_deletion(
63 proof: CompressedProof,
64 compressed_pda: PackedCompressedAccountWithMerkleContext,
65 cpi_context: Option<CompressedCpiContext>,
66) -> InstructionDataInvokeCpi {
67 InstructionDataInvokeCpi {
68 proof: Some(proof),
69 new_address_params: vec![],
70 input_compressed_accounts_with_merkle_context: vec![compressed_pda],
71 output_compressed_accounts: vec![],
72 relay_fee: None,
73 compress_or_decompress_lamports: None,
74 is_compress: false,
75 cpi_context,
76 }
77}