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
| Requirement | Amount |
|---|---|
| Minimum tip | 0.001 SOL (1,000,000 lamports) |
Transactions without a valid tip will be rejected.
Tip Addresses
Sp1x2AqpQckPLaWnWCJUNg8k6qQexfaEWcSRKf5JcDV
Sp4JHSh9cksfzXbgK7Pq2ovtn8LirLQydaJKTsiNT77
Sp1xMS2cbw83SZDNr4AGqkBYYLjb3LvVnmDSrTMaHkr
SpagSJmnh8E9cGT5Y431xPPaS2c1xLREGGCWN9yDeUf
SpWrza9E63MQuHeGnnfzmtLVCs3pBdjyKPXUABPo9nq
SpXyoqMHJEhsNQ9fHh3DTGGzrGroZ5zfDtJwFvN4kXi
Spv2g3L837bVeHwkyb18LhA5P1bvJbkvaZbxcZXbwC2
SpDUe5MyFGG97SmdBQMWNPbx2Et9bZt2TCbZm3TujgX
SpKZ28tFzQ13kVjHhsyDEiQfkPGjA7Wmk185KcEDyuh
SpxPqegfoR3QkBN7guRUiU6QfhtTW1CnKSTSSapumqmINFO
Rotate addresses — Use a different tip address for each transaction to avoid write lock contention and improve landing rates.
Adding the Tip Instruction
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
// 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:
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:
| Type | Goes To | Purpose |
|---|---|---|
| Tip | BlockSprint | Fast transaction delivery |
| Priority Fee | Block Producer | Position within the block |
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:
| Limit | Value |
|---|---|
| Transactions per second | 50 TPS |
| Bundles per second | 10 |
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.
