use anchor_lang::{prelude::*, solana_program::pubkey::Pubkey};
pub mod invoke;
pub use invoke::instruction::*;
pub mod invoke_cpi;
pub use invoke_cpi::{initialize::*, instruction::*};
pub mod constants;
pub mod errors;
pub mod sdk;
pub mod utils;
declare_id!("6UqiSPd2mRCTTwkzhcs1M6DGYsqHWd5jiPueX3LwDMXQ");
#[program]
pub mod light_system_program {
use light_heap::{bench_sbf_end, bench_sbf_start};
use self::{
invoke::{processor::process, verify_signer::input_compressed_accounts_signer_check},
invoke_cpi::processor::process_invoke_cpi,
};
use super::*;
pub fn init_cpi_context_account(ctx: Context<InitializeCpiContextAccount>) -> Result<()> {
let merkle_tree_account = ctx.accounts.associated_merkle_tree.load()?;
merkle_tree_account.load_merkle_tree()?;
ctx.accounts
.cpi_context_account
.init(ctx.accounts.associated_merkle_tree.key());
msg!(
"initialized cpi signature account pubkey {:?}",
ctx.accounts.cpi_context_account.key()
);
Ok(())
}
pub fn invoke<'a, 'b, 'c: 'info, 'info>(
ctx: Context<'a, 'b, 'c, 'info, InvokeInstruction<'info>>,
inputs: Vec<u8>,
) -> Result<()> {
let inputs: InstructionDataInvoke =
InstructionDataInvoke::deserialize(&mut inputs.as_slice())?;
inputs.check_input_lengths()?;
input_compressed_accounts_signer_check(&inputs, &ctx.accounts.authority.key())?;
process(inputs, None, ctx)
}
pub fn invoke_cpi<'a, 'b, 'c: 'info, 'info>(
ctx: Context<'a, 'b, 'c, 'info, InvokeCpiInstruction<'info>>,
inputs: Vec<u8>,
) -> Result<()> {
bench_sbf_start!("cpda_deserialize");
let inputs: InstructionDataInvokeCpi =
InstructionDataInvokeCpi::deserialize(&mut inputs.as_slice())?;
bench_sbf_end!("cpda_deserialize");
process_invoke_cpi(ctx, inputs)
}
}