▾ Documentation

Tips

Required tip on every Sender transaction. Minimum 1,000,000 lamports (0.001 SOL), tip addresses, and how to attach.

// updated 2026-06-04

Every transaction sent through Sender must include a tip. Without one, it's rejected at the gateway.

Why are tips required?

The tip pays for priority routing through Supanode's stake-weighted connection to the active leader and through Jito's bundle auction. Tips are paid only on transactions that get included - if your transaction doesn't land, the tip doesn't move.

What is the minimum Sender tip?

1,000,000 lamports (0.001 SOL) per transaction. Below this floor the transaction is rejected at the gateway.

The amount above the minimum is your call - it depends on how aggressive you need to be during contention. Supanode doesn't publish recommended levels.

How do you attach a tip?

Add a System Program transfer instruction to your transaction, paying to one of the official tip addresses below. Placement within the transaction doesn't matter.

Tip addresses

Five rotating addresses. Choose one randomly per transaction to avoid hot-account contention.

1andAhkXmzRbuD37iuzTLnYKRkBGU7X26zw1wv2FBpT
1andoC8jkb9EXEz1RpgQiuGqgm8sEAsASBScS2nip4f
1andeJ5dyAENtyMHSHv3ZXDzJEctmqgAFvGbssqoyvH
1andf7rAwTZHozYhEm7ieCMvWMczGbHDNbAR5ktsmAq
1andxYDwQuoWuDFJ1rdyGCXET5AfEc4H3nYJkaU9Eay

Code samples

TypeScript

import {
  Connection, Keypair, SystemProgram,
  Transaction, PublicKey, LAMPORTS_PER_SOL,
} from "@solana/web3.js";

const TIP_ACCOUNTS = [
  "1andAhkXmzRbuD37iuzTLnYKRkBGU7X26zw1wv2FBpT",
  "1andoC8jkb9EXEz1RpgQiuGqgm8sEAsASBScS2nip4f",
  "1andeJ5dyAENtyMHSHv3ZXDzJEctmqgAFvGbssqoyvH",
  "1andf7rAwTZHozYhEm7ieCMvWMczGbHDNbAR5ktsmAq",
  "1andxYDwQuoWuDFJ1rdyGCXET5AfEc4H3nYJkaU9Eay",
];

function pickRandomTipAccount(): PublicKey {
  const random = TIP_ACCOUNTS[Math.floor(Math.random() * TIP_ACCOUNTS.length)];
  return new PublicKey(random);
}

const tipAmount = 1_000_000; // 0.001 SOL - minimum

const tipInstruction = SystemProgram.transfer({
  fromPubkey: payer.publicKey,
  toPubkey: pickRandomTipAccount(),
  lamports: tipAmount,
});

transaction.add(tipInstruction);

Rust

use solana_sdk::{pubkey::Pubkey, system_instruction};
use std::str::FromStr;
use rand::seq::SliceRandom;

const TIP_ACCOUNTS: [&str; 5] = [
    "1andAhkXmzRbuD37iuzTLnYKRkBGU7X26zw1wv2FBpT",
    "1andoC8jkb9EXEz1RpgQiuGqgm8sEAsASBScS2nip4f",
    "1andeJ5dyAENtyMHSHv3ZXDzJEctmqgAFvGbssqoyvH",
    "1andf7rAwTZHozYhEm7ieCMvWMczGbHDNbAR5ktsmAq",
    "1andxYDwQuoWuDFJ1rdyGCXET5AfEc4H3nYJkaU9Eay",
];

fn pick_random_tip_account() -> Pubkey {
    let mut rng = rand::thread_rng();
    let pick = TIP_ACCOUNTS.choose(&mut rng).unwrap();
    Pubkey::from_str(pick).unwrap()
}

let tip_amount = 1_000_000u64; // 0.001 SOL - minimum

let tip_ix = system_instruction::transfer(
    &payer.pubkey(),
    &pick_random_tip_account(),
    tip_amount,
);

Best practices

  • Randomize per transaction. Hot-account contention reduces throughput. Pick a different tip address each time.
  • Track your landing rate. If transactions aren't landing during contention, raising the tip is one lever. The right amount is workload-dependent.

External references

See also