Quick Start
Start landing transactions faster with BlockSprint.
What You'll Need
Before you begin, make sure you have:
- A BlockSprint account — Sign up at https://blocksprint.io
- An API key — Created automatically when you register
- A signed Solana transaction — Legacy, v0 or Transaction V1, ready to submit
INFO
New accounts get 50 TPS by default. Need more? Reach out on https://t.me/blocksprint.
Step 1: Grab Your API Key
After signing up, head to Api Keys page. Your first key is generated automatically — it starts with bs_.
Step 2: Pick Your Endpoint
BlockSprint runs nodes across the globe. Choose the one closest to your servers: Endpoints
Step 3: Include a Tip
Every transaction must include a tip. Add a SOL transfer of at least 0.001 SOL to one of the BlockSprint tip wallets:
import { SystemProgram, PublicKey, LAMPORTS_PER_SOL } from "@solana/web3.js";
// BlockSprint tip wallets - rotate to avoid write lock contention
const TIP_WALLETS = [
"Sp1x2AqpQckPLaWnWCJUNg8k6qQexfaEWcSRKf5JcDV",
"Sp4JHSh9cksfzXbgK7Pq2ovtn8LirLQydaJKTsiNT77",
"Sp1xMS2cbw83SZDNr4AGqkBYYLjb3LvVnmDSrTMaHkr",
"SpagSJmnh8E9cGT5Y431xPPaS2c1xLREGGCWN9yDeUf",
"SpWrza9E63MQuHeGnnfzmtLVCs3pBdjyKPXUABPo9nq",
"SpXyoqMHJEhsNQ9fHh3DTGGzrGroZ5zfDtJwFvN4kXi",
"Spv2g3L837bVeHwkyb18LhA5P1bvJbkvaZbxcZXbwC2",
"SpDUe5MyFGG97SmdBQMWNPbx2Et9bZt2TCbZm3TujgX",
"SpKZ28tFzQ13kVjHhsyDEiQfkPGjA7Wmk185KcEDyuh",
"SpxPqegfoR3QkBN7guRUiU6QfhtTW1CnKSTSSapumqm",
];
const tipWallet = TIP_WALLETS[Math.floor(Math.random() * TIP_WALLETS.length)];
// Add tip instruction to your transaction
transaction.add(
SystemProgram.transfer({
fromPubkey: yourWallet.publicKey,
toPubkey: new PublicKey(tipWallet),
lamports: 0.001 * LAMPORTS_PER_SOL, // minimum tip: 0.001 SOL
})
);INFO
See the Tipping Guide: https://docs.blocksprint.io/general/tipping-and-rate-limits for details.
Step 4: Send It
UDP (recommended). The fastest way to send: one datagram with your API key and the signed transaction wire bytes, no handshake. See UDP for the packet layout, all endpoints and full examples.
import dgram from "node:dgram";
const apiKey = Buffer.from("YOUR_API_KEY");
// txBytes = your signed transaction as raw wire bytes (Buffer)
const packet = Buffer.concat([Buffer.from([apiKey.length]), apiKey, txBytes]);
const socket = dgram.createSocket("udp4"); // create once, reuse for every send
socket.send(packet, 5000, "fra.blocksprint.io");let api_key = "YOUR_API_KEY";
// tx_bytes = your signed transaction as raw wire bytes
let mut packet = vec![api_key.len() as u8];
packet.extend_from_slice(api_key.as_bytes());
packet.extend_from_slice(&tx_bytes);
let socket = std::net::UdpSocket::bind("0.0.0.0:0")?; // create once, reuse for every send
socket.send_to(&packet, "fra.blocksprint.io:5000")?;sendTransaction (HTTP). Also supported, but the slowest option. Use it only if you need an HTTP response; otherwise use UDP. Pass your API key as a query parameter and POST your signed transaction.
cURL
curl 'https://fra.blocksprint.io?api_key=YOUR_API_KEY' \
-X POST \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "sendTransaction",
"params": ["YOUR_BASE64_TRANSACTION", {"encoding": "base64", "skipPreflight": true}]
}'JavaScript
const endpoint = "https://fra.blocksprint.io";
const apiKey = "YOUR_API_KEY";
const result = await fetch(`${endpoint}?api_key=${apiKey}`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "sendTransaction",
params: [base64Tx, { encoding: "base64", skipPreflight: true }],
}),
});
const { result: txSignature } = await result.json();Rust
let endpoint = format!("https://fra.blocksprint.io?api_key={}", api_key);
let res = reqwest::Client::new()
.post(&endpoint)
.json(&serde_json::json!({
"jsonrpc": "2.0",
"id": 1,
"method": "sendTransaction",
"params": [base64_tx, {"encoding": "base64", "skipPreflight": true}]
}))
.send()
.await?;Handling Errors
| Code | What It Means | What To Do |
|---|---|---|
200 | Accepted | Transaction is being forwarded |
400 | Invalid transaction, encoding or tip | Fix the transaction and its tip |
401 | Bad API key | Double-check your key |
403 | Key expired, or IP not allowed for this key | Check the key in your dashboard |
5xx | Server issue | Retry with exponential backoff |
Retry pattern:
async function sendWithRetry(tx, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const res = await sendTransaction(tx);
if (res.status < 500) return res;
await new Promise(r => setTimeout(r, Math.pow(2, i) * 1000));
}
throw new Error("Max retries exceeded");
}To land a transaction, rebroadcast the same signed transaction every ~2 seconds until it confirms or its blockhash expires.
