1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use solana_client::{rpc_client::RpcClient, rpc_config::RpcSendTransactionConfig};
use solana_program::instruction::Instruction;
use solana_sdk::{
    commitment_config::{CommitmentConfig, CommitmentLevel},
    signature::Signature,
};
use solana_sdk::transaction::Transaction;

use crate::command::CliConfig;

pub fn send_tx(
    client: &RpcClient,
    config: &CliConfig,
    ixs: &[Instruction],
) -> Result<Signature, solana_client::client_error::ClientError> {
    let payer = config.pubkey().unwrap();
    let recent_blockhash = client.get_latest_blockhash().unwrap();
    let tx =
        Transaction::new_signed_with_payer(ixs, Some(&payer), &config.signers, recent_blockhash);
    client.send_and_confirm_transaction_with_spinner_and_config(
        &tx,
        CommitmentConfig {
            commitment: CommitmentLevel::Processed,
        },
        RpcSendTransactionConfig {
            skip_preflight: true,
            preflight_commitment: None,
            encoding: None,
            max_retries: Some(2),
            min_context_slot: None,
        },
    )
}