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;
use errors::SystemProgramError;
use sdk::event::PublicTransactionEvent;
declare_id!("H5sFv8VwWmjxHYS2GB4fTDsK7uTtnRT4WiixtHrET3bN");
#[cfg(not(feature = "no-entrypoint"))]
solana_security_txt::security_txt! {
name: "light_system_program",
project_url: "lightprotocol.com",
contacts: "email:security@lightprotocol.com",
policy: "https://github.com/Lightprotocol/light-protocol/blob/main/SECURITY.md",
source_code: "https://github.com/Lightprotocol/light-protocol"
}
#[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<()> {
ctx.accounts.associated_merkle_tree.load()?;
ctx.accounts
.cpi_context_account
.init(ctx.accounts.associated_merkle_tree.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())?;
input_compressed_accounts_signer_check(
&inputs.input_compressed_accounts_with_merkle_context,
&ctx.accounts.authority.key(),
)?;
process(inputs, None, ctx, 0)
}
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)
}
#[cfg(feature = "idl-build")]
pub fn stub_idl_build<'info>(
_ctx: Context<'_, '_, '_, 'info, InvokeInstruction<'info>>,
_inputs1: InstructionDataInvoke,
_inputs2: InstructionDataInvokeCpi,
_inputs3: PublicTransactionEvent,
) -> Result<()> {
Err(SystemProgramError::InstructionNotCallable.into())
}
}