Skip to content
Tip in $RELAYPaying the tip in $RELAY costs less than paying it in SOL: the tip needle sits lower.SOL$RELAY
Paying the tip in $RELAY costs less than paying it in SOL: the tip needle sits lower.

Paying tips in $RELAY

Provisional: $RELAY tipping launches with the token. The mechanics on this page — discount levels, TWAP window, burn share — are provisional and will be finalized before launch.

The relay charges a tip per transaction, payable in SOL or $RELAY — $RELAY at a discount. A portion of every confirmed tip is burned, so supply contracts with usage.

How tips work today (SOL)

Every transaction submitted to the relay must include a tip to one of the Fast… FastRelay tip wallets (selected at random):

  • Minimum: 0.001 SOL (1,000,000 lamports)
  • Recommended during congestion: 0.002–0.005 SOL
  • Staked wallets pay less, down to tip-free at full stake — see your effective rate
  • Jito atomic bundles additionally require a Jito tip (minimum 1,000 lamports) — a separate requirement

The full rules — tip wallet list, ALT restrictions, bundle requirements, error codes — are in the relay integration guide.

Worked example: building a SOL tip (real today)

The tip is not a separate API call — it is a plain SystemProgram.transfer inside your signed transaction, sending at least 1,000,000 lamports to one of the Fast… wallets. Build the transaction, add the tip instruction, sign, base64-encode, and submit to the relay:

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

// FastRelay tip wallets — pick one at random per transaction.
// Full list in the integration guide: /docs/relay/tips
const TIP_WALLETS = [
  "Fast4fVSRa7HCyhWrnrgty8VwUbH3fas28NDhFsUpLW3",
  "Fastb3cHVBqbTSc7p7HacsMFdJVje5m9ASgprGsPCD4U",
  "Fast2uKJ79oMFwmz3EmyLcGF9H9b6Nn2NBRRTPjTDsuo",
  "FasthH6DiM2KyfjvD2M6edqHWg9TUj9UDX7J1v3iy6rf",
];
const tipWallet = new PublicKey(
  TIP_WALLETS[Math.floor(Math.random() * TIP_WALLETS.length)]
);

const RELAY_TIP_LAMPORTS = 1_000_000; // 0.001 SOL — the relay minimum

const connection = new Connection(
  "https://api.mainnet-beta.solana.com",
  "confirmed"
);
const payer = Keypair.fromSecretKey(/* your signer's secret key */);

const tx = new Transaction();

// … your app instructions (swap, transfer, etc.) go here …

// The relay tip: a plain SystemProgram transfer to a Fast… wallet.
tx.add(
  SystemProgram.transfer({
    fromPubkey: payer.publicKey,
    toPubkey: tipWallet,
    lamports: RELAY_TIP_LAMPORTS,
  })
);

tx.feePayer = payer.publicKey;
tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;
tx.sign(payer);

// Base64-encode the fully signed transaction and hand it to the relay.
const txBase64 = tx.serialize().toString("base64");

const res = await fetch("https://fra.fastrelay.sh/v1/sendTx", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ tx: txBase64, simulate: false }),
});

console.log(await res.json());
// → { "status": "accepted", "request_id": "…", "signature": "5wH…" }

The tip lives inside the signed transaction, so the curl submission is identical to any other — you are just posting the base64 blob you built above:

bash
curl -X POST "https://fra.fastrelay.sh/v1/sendTx" \
  -H "Content-Type: application/json" \
  -d '{
    "tx": "BASE64_SIGNED_TX_WITH_TIP_TRANSFER",
    "simulate": false
  }'

If the transfer to a Fast… wallet is missing or below 1,000,000 lamports, the relay rejects the transaction with tip_missing or tip_insufficient.

Paying in $RELAY instead

At launch, $RELAY becomes a second way to pay the same tip, at a discount to the SOL price:

  • Value-targeted, not a fixed token count. The $RELAY tip targets a set SOL-value at tip time, priced via a time-averaged (TWAP) RELAY/SOL price — so the tip always tracks value rather than a fixed number of tokens.
  • Discounted for stakers. Stakers tip at a further discount that scales with stake — see Staking.
  • A portion of every confirmed tip is burned. Real relay usage permanently removes $RELAY from supply — supply is fixed and only ever decreases. Verify it live on the burn dashboard.

There is no client code for $RELAY tips yet — this path opens with the token. Until then, the SOL tip shown above is the only tip the relay accepts. When $RELAY tipping ships, the transaction shape stays the same (a token transfer to the relay's tip program in place of the SOL SystemProgram.transfer); the worked example will be published here at launch.

SOL fallback — always available

Tipping in $RELAY is optional. SOL tips continue to work exactly as they do today, with the same minimums and the same tip wallets. Nothing about the existing integration breaks when $RELAY tipping ships.