Sending SOL & Transactions
Send native SOL, confirm signatures, and inspect transaction outcomes from the terminal.
Recipe
Quick-reference recipe card - copy-paste ready.
solana transfer <RECIPIENT> 0.5
solana transfer <RECIPIENT> 0.5 --allow-unfunded-recipient
solana confirm <SIGNATURE>
solana transaction <SIGNATURE>When to reach for this:
- Paying another wallet or funding a new keypair.
- Verifying a transaction landed after client submission.
- Debugging failed transfers with verbose confirmation output.
- Scripting treasury payouts on devnet or mainnet.
Working Example
solana config set --url devnet
solana airdrop 2
RECIPIENT="<RECIPIENT_PUBKEY>"
SIG=$(solana transfer "$RECIPIENT" 0.25 --allow-unfunded-recipient --fee-payer ~/.config/solana/id.json)
solana confirm -v "$SIG"
solana balance "$RECIPIENT"
solana transaction "$SIG" --output json-compact | jq '.transaction.message'What this demonstrates:
transferbuilds, signs, and submits a system transfer instruction.--allow-unfunded-recipientcreates the recipient system account if missing.confirm -vprints commitment-level status and error logs on failure.transactionfetches the decoded transaction for post-mortems.
Deep Dive
How It Works
- Transfers are one instruction to the System Program moving lamports.
- The CLI signs with the configured keypair unless
--fee-payeroverrides. - Recent blockhash embedded in the transaction expires after ~60-90 seconds.
- Confirmation polls RPC until the chosen commitment level is reached.
Transfer Flags
| Flag | Effect |
|---|---|
--allow-unfunded-recipient | Create recipient system account |
--fee-payer <KEYPAIR> | Separate payer for fees |
--with-memo <TEXT> | Attach memo program instruction |
--no-wait | Return signature without confirming |
bash Notes
# Dry-run style check: fund then verify decrease
BEFORE=$(solana balance)
solana transfer <RECIPIENT> 0.1
AFTER=$(solana balance)
echo "sent: $(echo "$BEFORE - $AFTER" | bc)"Gotchas
- Expired blockhash - slow RPC or delayed broadcast fails confirmation. Fix: retry transfer; use fresher RPC; see Retries & Blockhash Management.
- Insufficient lamports - amount plus fee exceeds balance. Fix:
solana balanceand leave fee headroom. - Recipient is off-curve or wrong - typos burn SOL to unreachable addresses. Fix: double-check base58 strings; test with 0.001 SOL first.
- Assuming confirm means finalized - default commitment may be
confirmed. Fix: pass--commitment finalizedfor treasury payouts. - Using transfer for tokens - SOL transfer does not move SPL tokens. Fix: use
spl-token transferinstead.
Alternatives
| Alternative | Use When | Don't Use When |
|---|---|---|
@solana/kit client | App-integrated sends with custom instructions | One-off CLI payments |
spl-token transfer | Moving fungible tokens | Native SOL only |
| Durable nonce transactions | Long-lived signing sessions | Simple one-shot CLI transfers |
| Jito bundles | Latency-sensitive mainnet landing | Devnet testing |
FAQs
What fee does solana transfer charge?
Base fee is 5,000 lamports per signature unless you add priority fees via separate compute budget instructions (not added by default CLI transfer).
Can I send less than 1 SOL?
Yes - amounts support decimal SOL like 0.0001.
What does --no-wait do?
Returns the signature immediately without polling confirmation - useful in scripts that confirm separately.
How do I specify a different signer?
Use --from <KEYPAIR> to sign the transfer with a non-default keypair file.
Why did confirm return transaction failed?
Run solana confirm -v for logs, then solana transaction for full meta. Common causes: insufficient funds, blockhash expiry, or account locks.
Can I attach a memo?
Yes: solana transfer <ADDR> 0.1 --with-memo "invoice-123".
How long until a transfer is final?
confirmed is usually sub-second on healthy RPC. finalized takes one to two epochs - minutes on mainnet.
Does transfer work on localnet?
Yes - point config at local validator and ensure both accounts have lamports.
Can one transaction send to many recipients?
The CLI transfer command sends one recipient per invocation. Batch with a custom transaction or script for multiples.
How do I export a transaction for support?
solana transaction <SIG> --output json-compact > tx.json captures meta, logs, and balances.
Related
- Airdrops & Balances - fund before transferring
- Logs & Debugging - stream logs around sends
- spl-token CLI - token transfers
- Why Transactions Fail to Land - landing failures
Stack versions: This page was written for Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, and LiteSVM 0.6.x.