Skip to main content

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.
ProtocolPortFormatResponseBest for
HTTP80/443JSON-RPCTransaction signature / bundle IDEasiest integration, full feedback
QUIC8009Solana TPU wire formatNone (fire-and-forget)Low latency, Solana-native clients
UDP8010Raw bincode bytesNone (fire-and-forget)Lowest latency, high throughput

Servers

RegionHTTPQUICUDP
Canadaca.raze.shca.raze.sh:8009ca.raze.sh:8010
Singaporesg.raze.shsg.raze.sh:8009sg.raze.sh:8010
Frankfurtfr.raze.shfr.raze.sh:8009fr.raze.sh:8010
Germanyde.raze.shde.raze.sh:8009de.raze.sh:8010
New Yorkny.raze.shny.raze.sh:8009ny.raze.sh:8010
Amsterdamnl.raze.shnl.raze.sh:8009nl.raze.sh:8010
Londonuk.raze.shuk.raze.sh:8009uk.raze.sh:8010
Tokyojp.raze.shjp.raze.sh:8009jp.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
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

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)
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()

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:
TipChannels
< 0.0001 SOLRejected (HTTP returns error -32003, QUIC/UDP silently dropped)
0.0001 – 0.001 SOLQUIC TPU
0.001 – 0.01 SOLQUIC TPU + RPC
≥ 0.01 SOLQUIC TPU + RPC + SWQoS + Jito