Skip to content

Repository files navigation

RPCFast gRPCBench

rpcfast-grpcbench compares Solana transaction stream delivery speed across:

  • Yellowstone gRPC
  • Jito ShredStream SubscribeEntries
  • Aperture txstream
  • Shreder Binary
  • Corvus aRPC v1
  • OrbitFlare Jetstream

It records local receive timestamps for transaction signatures, compares only signatures seen by at least two endpoints, and writes a self-contained HTML report. It does not call RPC or use block time.

Usage

cp grpcbench.example.toml grpcbench.toml
export YELLOWSTONE_X_TOKEN=...
export JITO_SHREDSTREAM_X_TOKEN=...
export APERTURE_X_TOKEN=...
export SHREDER_BINARY_X_TOKEN=... # only when the endpoint requires it
export ARPC_X_TOKEN=...           # dedicated Corvus endpoints only
export JETSTREAM_X_TOKEN=...      # only when the endpoint requires it
cargo run --release -- --config grpcbench.toml --duration 60s --output report.html

Open report.html in a browser.

TOML Config

duration = "60s"
warmup = "5s"
no_tx_timeout = "30s"
buffer_size = 4194304

[yellowstone.rpcfast]
url = "https://solana-yellowstone-grpc.rpcfast.com:443"
x_token_env = "YELLOWSTONE_X_TOKEN"

[jito_shredstream.jito]
url = "https://jito-shredstream.example.com:443"
x_token_env = "JITO_SHREDSTREAM_X_TOKEN"

[aperture_txstream.rpcfast]
url = "https://aperture-grpc.rpcfast.com:443"
x_token_env = "APERTURE_X_TOKEN"
signatures_only = true
include_simulation = false
batch_mode = false

[shreder_binary.fra]
url = "http://fra.binary.shreder.xyz:9991"

[arpc.corvus_fra]
url = "http://arpc.fra.corvus-labs.io:20202"

[jetstream.orbitflare_fra]
url = "http://fra.jetstream.orbitflare.com"

Endpoint table names become report aliases. Tokens can be supplied inline with x_token, but x_token_env is recommended. buffer_size is a byte count used for the gRPC clients' HTTP/2 stream and connection receive windows (and for Aperture's message-size limits). It is not a request-count queue capacity. For Aperture endpoints, include_simulation requests transaction simulation results and defaults to false. For Aperture endpoints, batch_mode uses SubscribeTransactionBatches and defaults to false; the normal mode uses SubscribeTransactions. Shared Corvus aRPC endpoints are IP-allowlisted and do not need a token; dedicated endpoints can set x_token or x_token_env. OrbitFlare's public Jetstream endpoints normally use plain http://; use https:// only for an endpoint that explicitly enables TLS.

Report Semantics

  • Observed signatures: unique signatures seen by at least one endpoint during the measured window.
  • Race eligible: signatures seen by at least two endpoints.
  • Wins: times an endpoint was first among endpoints that saw the same signature.
  • Lag: local receive-time delay behind the fastest endpoint for the same signature.
  • Pairwise winners: one row per endpoint pair. Wins counts how often the displayed faster endpoint arrived first within shared signatures.
  • Pairwise lead: signed receive-time delta for the displayed faster endpoint. Positive values mean it led; negative values mean it was behind for that sample.
  • Pairwise lag: positive receive-time lag for samples where the displayed faster endpoint was behind. n/a means it never lost that pair.
  • Batch-position analysis: signed lead grouped by the zero-based transaction position in a ShredStream or txstream batch. Positive values mean the batch endpoint led its comparison endpoint.

Collectors capture a monotonic receive timestamp and enqueue each observation without awaiting aggregation. Pairwise differences use those monotonic timestamps; wall-clock time is retained only for report bounds. Batched protocols assign one timestamp to every transaction after the enclosing batch is fully decoded and usable, so loop position does not affect race timing. For Aperture txstream, only the primary (first) transaction signature is recorded. Provider timestamps such as created_at are intentionally ignored.

License

This project and its complete source code are licensed under the Apache License 2.0.

About

Benchmark multiple Solana gRPC endpoints

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages