Transaction sender
JSON-RPC compatibility plus raw HTTP and QUIC fast paths for Solana transaction submission.
Sending a transaction is easy; landing it fast, in the slot you wanted, is the hard part. The transaction sender accepts signed transactions through JSON-RPC compatibility, raw HTTP, or QUIC, then applies auth, route policy, tracing, and configured fast-path fanout.
What is a Solana transaction sender?
Definition
A transaction sender is the service that delivers your signed transaction to the validators producing upcoming blocks. Instead of relying only on general-purpose RPC forwarding, rpc edge accepts signed transactions through JSON-RPC compatibility, raw HTTP, or QUIC, then applies auth, route policy, rate limits, tracing, and configured fast-path fanout.
Endpoints
Most customers can start with JSON-RPC compatibility through the normal RPC endpoint:
https://rpc.rpcedge.com?key=YOUR_UUID_KEYThe dedicated relay host is for the fastest sender paths:
| Transport | Endpoint |
|---|---|
| Route-aware HTTP | POST https://relay.rpcedge.com/v1/submit |
| Raw HTTP transaction bytes/base64 | POST https://relay.rpcedge.com/v1/transactions |
| JSON-RPC HTTP compatibility | POST https://relay.rpcedge.com/v1/sendTransaction |
| QUIC | relay.rpcedge.com:4433 |
The Frankfurt-pinned alias is frankfurt.relay.rpcedge.com with the same paths and ports.
JSON-RPC compatibility
const sig = await connection.sendRawTransaction(serializedTx, {
skipPreflight: true,
maxRetries: 0,
});The gateway forwards enabled send methods to the rpc edge transaction sender. The sender can fan out through configured fast paths such as direct TPU and partner routes.
Relay client
Use the Rust relay client when you want the direct HTTP or QUIC sender path instead of normal JSON-RPC compatibility.
https://github.com/rpc-edge/rpcedge-relay-client[dependencies]
rpcedge-relay-client = { git = "https://github.com/rpc-edge/rpcedge-relay-client" }use rpcedge_relay_client::{RelayClient, RelayClientConfig, RouteSet};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = RelayClient::new(RelayClientConfig::new(
"https://relay.rpcedge.com",
"YOUR_UUID_KEY",
))?;
let response = client
.send_transaction_base64("BASE64_TRANSACTION", RouteSet::server_default())
.await?;
println!("accepted={} signature={}", response.accepted, response.signature);
Ok(())
}The client sends both Authorization: Bearer <key> and x-api-key: <key>. You can pass either the
base URL https://relay.rpcedge.com or the full submit URL
https://relay.rpcedge.com/v1/submit.
For route-aware sender planning, see the leader slot API.
When you need more
For atomicity, ordering, or to bid for inclusion, use Jito bundles where enabled on your key. Jito bundle access is private and requires approval.