Send a payment
You need:
- An encrypted wallet (see Create a wallet)
- Enough EXFER in it (
exfer wallet balance ...) - The recipient's 64-hex address
- A reachable RPC node (your own, or a community node)
One-liner
RPC="http://82.221.100.201:9334"
exfer wallet send \
--wallet ~/my-wallet.key \
--to 8d896d64864f53214acb49aeb44a09a03d5bb23d19a417a6ce7b0da65c7bd750 \
--amount "10 EXFER" \
--fee "0.001 EXFER" \
--rpc "$RPC" \
--json
You'll be prompted for the wallet passphrase. The transaction is signed locally (the private key never leaves your machine) and submitted to the RPC node, which broadcasts it.
Output:
{
"tx_id": "fb8a634fcce6cfc124de86fa0a4b3e6130a1e6bfda68a34dc4f30ec7a2a2b68c",
"size": 227,
"tip_height": 5553,
"submitted": true
}
Save the tx_id — you'll use it to track confirmation.
Flag reference
| Flag | What it does |
|---|---|
--wallet | Path to your encrypted .key file |
--to | Recipient's 64-hex address |
--amount | Amount to send. Accepts "10 EXFER" or "1000000000" (exfers) |
--fee | Transaction fee. Default 0.001 EXFER (100_000 exfers). Higher = faster inclusion under load |
--rpc | RPC node URL. Fetches your UTXOs and submits the tx |
--datadir | Use a local node instead of RPC (--rpc and --datadir are mutually exclusive) |
--json | Machine-readable output |
Wait for confirmation
Poll get_transaction until block_height appears:
TX_ID="fb8a634fcce6cfc124de86fa0a4b3e6130a1e6bfda68a34dc4f30ec7a2a2b68c"
for i in $(seq 1 60); do
RESULT=$(curl -s -X POST "$RPC" \
-H 'content-type: application/json' \
-d "{\"jsonrpc\":\"2.0\",\"method\":\"get_transaction\",\"params\":{\"hash\":\"$TX_ID\"},\"id\":1}")
if echo "$RESULT" | grep -q '"block_height"'; then
echo "Confirmed: $RESULT"
break
fi
echo "Pending… ($i/60)"
sleep 10
done
Once block_height is set, the transaction is in a block. Wait for the
number of confirmations appropriate for your value (see
Confirmation depth).
Fees
Exfer uses a per-transaction fee, not per-byte. There is no fee auction:
- Mempool ordering: FIFO within a fee-rate band; higher fees go first.
- Minimum: consensus-enforced minimum relay fee.
- Typical:
0.001 EXFER(100_000exfers) clears reliably under normal load.
Under sustained mempool pressure, bumping the fee gets you in the next block sooner. Replace-by-fee is not currently supported — if your tx is stuck, wait for it to drop from mempool (no eviction-based replacement yet).
What's actually happening under the hood
exfer wallet senddecrypts your wallet using the passphrase.- Calls
get_address_utxosover RPC to find your spendable outputs. - Selects enough UTXOs to cover
amount + fee(skips immature coinbases). - Builds an unsigned transaction with one output to
--to, one change output back to you, and a fee output to the miner. - Signs every input locally with your Ed25519 private key.
- Calls
send_raw_transactionwith the signed tx hex. - Returns the
tx_idto you.
The private key only ever decrypts in step 1 and signs in step 5, both in your local process.
Common errors
insufficient funds— your balance minus fee is less than the requested amount. Check withexfer wallet balance.Mempool pre-check failed: duplicate tx— you submitted the same signed tx twice. Wait for the first one to confirm.Transaction validation failed: input ... is immature coinbase— you tried to spend a coinbase output before 360 confirmations. Either wait or fund the wallet from a non-coinbase source.
For the full list of error codes, see Error codes.