light_merkle_tree_program/verifier_invoked_instructions/
sol_transfer.rs1use anchor_lang::prelude::*;
2
3use crate::{RegisteredAssetPool, RegisteredVerifier};
4#[derive(Accounts)]
5pub struct UnshieldSol<'info> {
6 #[account(mut , seeds=[__program_id.to_bytes().as_ref()],bump,seeds::program=registered_verifier_pda.pubkey)]
8 pub authority: Signer<'info>,
9 #[account(mut)]
10 pub merkle_tree_token: Account<'info, RegisteredAssetPool>,
11 #[account(mut, seeds=[®istered_verifier_pda.pubkey.to_bytes()], bump)]
12 pub registered_verifier_pda: Account<'info, RegisteredVerifier>,
13 #[account(mut)]
15 pub recipient: UncheckedAccount<'info>,
16}
17
18pub fn process_sol_transfer(
19 from_account: &AccountInfo,
20 dest_account: &AccountInfo,
21 amount: u64,
22) -> Result<()> {
23 let from_starting_lamports = from_account.lamports();
24 from_starting_lamports
26 .checked_sub(amount)
27 .ok_or(ProgramError::InvalidAccountData)?;
28 **from_account.lamports.borrow_mut() = from_starting_lamports
29 .checked_sub(amount)
30 .ok_or(ProgramError::InvalidAccountData)?;
31 let dest_starting_lamports = dest_account.lamports();
34 **dest_account.lamports.borrow_mut() = dest_starting_lamports
35 .checked_add(amount)
36 .ok_or(ProgramError::InvalidAccountData)?;
37 dest_starting_lamports
38 .checked_add(amount)
39 .ok_or(ProgramError::InvalidAccountData)?;
40 Ok(())
44}