Documentation Index
Fetch the complete documentation index at: https://docs.raze.bot/llms.txt
Use this file to discover all available pages before exploring further.
Protocols
The Raze Solana RPC relay accepts transactions over three protocols. Choose based on your latency and integration requirements.
| Protocol | Port | Format | Response | Best for |
|---|
| HTTP | 80/443 | JSON-RPC | Transaction signature / bundle ID | Easiest integration, full feedback |
| QUIC | 8009 | Solana TPU wire format | None (fire-and-forget) | Low latency, Solana-native clients |
| UDP | 8010 | Raw bincode bytes | None (fire-and-forget) | Lowest latency, high throughput |
Servers
| Region | HTTP | QUIC | UDP |
|---|
| Canada | ca.raze.sh | ca.raze.sh:8009 | ca.raze.sh:8010 |
| Singapore | sg.raze.sh | sg.raze.sh:8009 | sg.raze.sh:8010 |
| Frankfurt | fr.raze.sh | fr.raze.sh:8009 | fr.raze.sh:8010 |
| Germany | de.raze.sh | de.raze.sh:8009 | de.raze.sh:8010 |
| New York | ny.raze.sh | ny.raze.sh:8009 | ny.raze.sh:8010 |
| Amsterdam | nl.raze.sh | nl.raze.sh:8009 | nl.raze.sh:8010 |
| London | uk.raze.sh | uk.raze.sh:8009 | uk.raze.sh:8010 |
| Tokyo | jp.raze.sh | jp.raze.sh:8009 | jp.raze.sh:8010 |
HTTP (JSON-RPC)
Standard HTTP POST with JSON-RPC 2.0. Returns transaction signature or bundle ID. See sendTransaction and sendBundle for full details.
Any other Solana JSON-RPC method (getBalance, getAccountInfo, getLatestBlockhash, etc.) is transparently proxied to a load-balanced upstream pool, so the relay endpoint can be used as a drop-in RPC URL — point your client at it and you get the tip-tiered submit path for sendTransaction / sendBundle plus standard reads for everything else.
curl -X POST https://fr.raze.sh \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "sendTransaction",
"params": ["<base64_signed_tx>", {"encoding": "base64"}]
}'
QUIC (Solana TPU)
Native Solana TPU protocol over QUIC. Compatible with solana-tpu-client and any client using ALPN solana-tpu. Fire-and-forget — no response is returned.
Connection details:
- TLS with self-signed certificate (verification skipped by Solana clients)
- ALPN protocol:
solana-tpu
- Max transaction size: 1232 bytes
- Open a unidirectional stream, write the raw transaction bytes, close the stream
Rust (solana-tpu-client)
Node.js
use solana_tpu_client::tpu_client::TpuClient;
use solana_client::rpc_client::RpcClient;
use solana_sdk::transaction::Transaction;
// The relay acts as a TPU endpoint
let rpc = RpcClient::new("https://api.mainnet-beta.solana.com");
let tpu_addr = "fr.raze.sh:8009".parse().unwrap();
// Send raw wire transaction
let tx_bytes = bincode::serialize(&transaction)?;
// Send via QUIC unidirectional stream to tpu_addr
// QUIC requires a native QUIC library (e.g. @aspect-build/quic)
// Most Node.js users should use the HTTP JSON-RPC endpoint instead.
//
// For QUIC, serialize the transaction to bincode format and send
// as a unidirectional stream with ALPN "solana-tpu".
import { serialize } from "@solana/web3.js";
const txBytes = transaction.serialize();
// Send txBytes via QUIC to fr.raze.sh:8009
UDP (Raw Bincode)
Lowest latency option. Send raw bincode-serialized Solana transactions as UDP datagrams. Fire-and-forget — no response, no connection overhead.
Details:
- Max transaction size: 1232 bytes per datagram
- No handshake, no connection state
- Processed on a dedicated OS thread with
recvmmsg() batch processing (32 packets per syscall)
Python
Rust
Node.js
bash (netcat)
import socket
from solders.transaction import Transaction
tx_bytes = bytes(transaction)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(tx_bytes, ("fr.raze.sh", 8010))
sock.close()
use std::net::UdpSocket;
let tx_bytes = bincode::serialize(&transaction)?;
let socket = UdpSocket::bind("0.0.0.0:0")?;
socket.send_to(&tx_bytes, "fr.raze.sh:8010")?;
import dgram from "node:dgram";
const txBytes = transaction.serialize();
const client = dgram.createSocket("udp4");
client.send(txBytes, 8010, "fr.raze.sh", (err) => {
client.close();
});
# Send raw transaction bytes via UDP
echo -n '<binary_tx_data>' | nc -u -w0 fr.raze.sh 8010
Tip-based routing
All protocols use the same tip-based routing. The relay extracts tip amounts from transaction instructions (zero-copy, no full deserialization) and forwards accordingly:
| Tip | Channels |
|---|
| < 0.0001 SOL | Rejected (HTTP returns error -32003, QUIC/UDP silently dropped) |
| 0.0001 – 0.001 SOL | QUIC TPU |
| 0.001 – 0.01 SOL | QUIC TPU + RPC |
| ≥ 0.01 SOL | QUIC TPU + RPC + SWQoS + Jito |