pub fn approve(
    ctx: Context<'_, '_, '_, '_, Approve<'_>>,
    fund_bump: u8
) -> Result<()>
Expand description

Approves the transactions and executes the transfer in case the m approvals are met.

Examples

Here is how to approve pending transfers on Devnet:

use std::rc::Rc;

use solana_sdk::commitment_config::CommitmentConfig;
use solana_sdk::instruction::AccountMeta;
use solana_sdk::pubkey::Pubkey;
use solana_sdk::signature::read_keypair_file;
use solana_sdk::signer::Signer;

use anchor_client::{Client, Cluster};

let url = Cluster::Devnet;
let signer = Rc::new(read_keypair_file(
    shellexpand::tilde("~/.config/solana/id.json").as_ref(),
)?);
let opts = CommitmentConfig::processed();
let pid = multisig_lite::id();
let program = Client::new_with_options(url, signer.clone(), opts).program(pid);

// Gets the PDAs.
let (state_pda, state_bump) =
    Pubkey::find_program_address(&[b"state", signer.pubkey().as_ref()], &pid);
let (fund_pda, fund_bump) = Pubkey::find_program_address(&[b"fund", state_pda.as_ref()], &pid);

// Gets the pending transfers and the recipients account info.
let mut remaining_accounts = vec![];
let state: multisig_lite::State = program.account(state_pda)?;
for transfer_pubkey in state.queue {
    let transfer: multisig_lite::Transfer = program.account(transfer_pubkey)?;

    // Pushes the transfer account.
    remaining_accounts.push(AccountMeta {
        pubkey: transfer_pubkey,
        is_signer: false,
        is_writable: true,
    });

    // Pushes the recipient account.
    remaining_accounts.push(AccountMeta {
        pubkey: transfer.recipient,
        is_signer: false,
        is_writable: true,
    });
}

// Approve the multisig account.
let sig = program
    .request()
    .accounts(multisig_lite::accounts::Approve {
        signer: signer.pubkey(),
        state: state_pda,
        fund: fund_pda,
    })
    .args(multisig_lite::instruction::Approve { fund_bump })
    .accounts(remaining_accounts)
    .signer(signer.as_ref())
    .send()?;

println!("{sig}");