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_KEY

The dedicated relay host is for the fastest sender paths:

TransportEndpoint
Route-aware HTTPPOST https://relay.rpcedge.com/v1/submit
Raw HTTP transaction bytes/base64POST https://relay.rpcedge.com/v1/transactions
JSON-RPC HTTP compatibilityPOST https://relay.rpcedge.com/v1/sendTransaction
QUICrelay.rpcedge.com:4433

The Frankfurt-pinned alias is frankfurt.relay.rpcedge.com with the same paths and ports.

JSON-RPC compatibility

send.ts
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
Cargo.toml
[dependencies]
rpcedge-relay-client = { git = "https://github.com/rpc-edge/rpcedge-relay-client" }
send-transaction.rs
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.

Transaction sender · rpc edge docs