use anchor_lang::prelude::*;
use crate::{RegisteredAssetPool, RegisteredVerifier};
#[derive(Accounts)]
pub struct UnshieldSol<'info> {
#[account(mut , seeds=[__program_id.to_bytes().as_ref()],bump,seeds::program=registered_verifier_pda.pubkey)]
pub authority: Signer<'info>,
#[account(mut)]
pub merkle_tree_token: Account<'info, RegisteredAssetPool>,
#[account(mut, seeds=[®istered_verifier_pda.pubkey.to_bytes()], bump)]
pub registered_verifier_pda: Account<'info, RegisteredVerifier>,
#[account(mut)]
pub recipient: UncheckedAccount<'info>,
}
pub fn process_sol_transfer(
from_account: &AccountInfo,
dest_account: &AccountInfo,
amount: u64,
) -> Result<()> {
let from_starting_lamports = from_account.lamports();
from_starting_lamports
.checked_sub(amount)
.ok_or(ProgramError::InvalidAccountData)?;
**from_account.lamports.borrow_mut() = from_starting_lamports
.checked_sub(amount)
.ok_or(ProgramError::InvalidAccountData)?;
let dest_starting_lamports = dest_account.lamports();
**dest_account.lamports.borrow_mut() = dest_starting_lamports
.checked_add(amount)
.ok_or(ProgramError::InvalidAccountData)?;
dest_starting_lamports
.checked_add(amount)
.ok_or(ProgramError::InvalidAccountData)?;
Ok(())
}