solana_sdk::system_instruction

Function withdraw_nonce_account

source
pub fn withdraw_nonce_account(
    nonce_pubkey: &Pubkey,
    authorized_pubkey: &Pubkey,
    to_pubkey: &Pubkey,
    lamports: u64,
) -> Instruction
Expand description

Withdraw lamports from a durable transaction nonce account.

This function produces an Instruction which must be submitted in a Transaction or invoked to take effect, containing a serialized SystemInstruction::WithdrawNonceAccount.

Withdrawing the entire balance of a nonce account will cause the runtime to destroy it upon successful completion of the transaction.

Otherwise, nonce accounts must maintain a balance greater than or equal to the minimum required for rent exemption. If the result of this instruction would leave the nonce account with a balance less than required for rent exemption, but also greater than zero, then the transaction will fail.

This constructor creates a SystemInstruction::WithdrawNonceAccount instruction.

§Required signers

The authorized_pubkey signer must sign the transaction.

§Examples

use solana_rpc_client::rpc_client::RpcClient;
use solana_sdk::{
    pubkey::Pubkey,
    signature::{Keypair, Signer},
    system_instruction,
    transaction::Transaction,
};
use anyhow::Result;

fn submit_withdraw_nonce_account_tx(
    client: &RpcClient,
    nonce_account_pubkey: &Pubkey,
    authorized_account: &Keypair,
) -> Result<()> {

    let nonce_balance = client.get_balance(nonce_account_pubkey)?;

    let instr = system_instruction::withdraw_nonce_account(
        &nonce_account_pubkey,
        &authorized_account.pubkey(),
        &authorized_account.pubkey(),
        nonce_balance,
    );

    let mut tx = Transaction::new_with_payer(&[instr], Some(&authorized_account.pubkey()));

    let blockhash = client.get_latest_blockhash()?;
    tx.try_sign(&[authorized_account], blockhash)?;

    client.send_and_confirm_transaction(&tx)?;

    Ok(())
}