Skip to content

Tipping & Rate Limits ​

Everything you need to know about transaction tips and rate limits.


Tipping ​

Each transaction must include a SOL transfer to a BlockSprint tip address.

Minimum Tip ​

RequirementAmount
Minimum tip0.001 SOL (1,000,000 lamports)

Transactions without a valid tip will be rejected.

Tip Addresses ​

bash
Sp1x2AqpQckPLaWnWCJUNg8k6qQexfaEWcSRKf5JcDV
Sp4JHSh9cksfzXbgK7Pq2ovtn8LirLQydaJKTsiNT77
Sp1xMS2cbw83SZDNr4AGqkBYYLjb3LvVnmDSrTMaHkr
SpagSJmnh8E9cGT5Y431xPPaS2c1xLREGGCWN9yDeUf
SpWrza9E63MQuHeGnnfzmtLVCs3pBdjyKPXUABPo9nq
SpXyoqMHJEhsNQ9fHh3DTGGzrGroZ5zfDtJwFvN4kXi
Spv2g3L837bVeHwkyb18LhA5P1bvJbkvaZbxcZXbwC2
SpDUe5MyFGG97SmdBQMWNPbx2Et9bZt2TCbZm3TujgX
SpKZ28tFzQ13kVjHhsyDEiQfkPGjA7Wmk185KcEDyuh
SpxPqegfoR3QkBN7guRUiU6QfhtTW1CnKSTSSapumqm

INFO

Rotate addresses — Use a different tip address for each transaction to avoid write lock contention and improve landing rates.


Adding the Tip Instruction ​

JavaScript ​

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

// Tip addresses: see the full list above or your dashboard
const TIP_ADDRESSES = [
  "Sp1x2AqpQckPLaWnWCJUNg8k6qQexfaEWcSRKf5JcDV",
  "Sp4JHSh9cksfzXbgK7Pq2ovtn8LirLQydaJKTsiNT77",
];

function getRandomTipAddress() {
  return new PublicKey(
    TIP_ADDRESSES[Math.floor(Math.random() * TIP_ADDRESSES.length)]
  );
}

// Create tip instruction (0.001 SOL minimum)
const tipInstruction = SystemProgram.transfer({
  fromPubkey: wallet.publicKey,
  toPubkey: getRandomTipAddress(),
  lamports: 1_000_000,
});

transaction.add(tipInstruction);

Rust ​

rust
// Crates: solana-address (feature "decode"), solana-system-interface, rand 0.8
use rand::seq::SliceRandom;
use solana_address::Address;
use solana_system_interface::instruction::transfer;

// Tip addresses: see the full list above or your dashboard
const TIP_ADDRESSES: &[&str] = &[
    "Sp1x2AqpQckPLaWnWCJUNg8k6qQexfaEWcSRKf5JcDV",
    "Sp4JHSh9cksfzXbgK7Pq2ovtn8LirLQydaJKTsiNT77",
];

fn get_random_tip_address() -> Address {
    let address = TIP_ADDRESSES.choose(&mut rand::thread_rng()).unwrap();
    address.parse().unwrap()
}

// 0.001 SOL minimum
let tip_ix = transfer(
    &payer,
    &get_random_tip_address(),
    1_000_000,
);

Conditional Tipping ​

Only pay the tip if your transaction succeeds by placing it last:

javascript
const instructions = [
  swapInstruction,   // Your logic first
  tipInstruction,    // Tip only executes if swap succeeds
];

If someone front-runs your opportunity or the swap fails, you don't pay the tip.


Tip vs Priority Fee ​

These are different — use both for best results:

TypeGoes ToPurpose
TipBlockSprintFast transaction delivery
Priority FeeBlock ProducerPosition within the block
javascript
import { ComputeBudgetProgram, SystemProgram } from "@solana/web3.js";

const instructions = [
  // Priority fee
  ComputeBudgetProgram.setComputeUnitPrice({
    microLamports: 1_000_000,
  }),

  // Your instruction
  swapInstruction,

  // BlockSprint tip
  SystemProgram.transfer({
    fromPubkey: wallet.publicKey,
    toPubkey: tipAddress,
    lamports: 1_000_000,
  }),
];

INFO

Transaction V1: add the tip the same way, as a normal SOL transfer to a tip address. In V1, the priority fee (total lamports) and the compute limits are set in the transaction's config fields instead of ComputeBudget instructions.


Rate Limits ​

Every API key includes:

LimitValue
Transactions per second50 TPS
Bundles per second10

Keep your sending within your limits. Need higher limits? Contact us on Telegram or email support@blocksprint.io.


Retries ​

Rebroadcast the same signed transaction every ~2 seconds until it confirms or its blockhash expires. Set maxRetries: 0 to avoid redundant retries on your end.