ShredStream

ShredStream provides the lowest latency to shreds from leaders on Solana.

What Is ShredStream?

Shredstream provides the lowest latency shreds to any RPC or validator on the network. This service can save hundreds of milliseconds when trading on Solana and provides a redundant shred path for servers in remote locations.

Who Is ShredStream For?

  • Traders

  • Validators

  • RPC servers and validators with no/low stake

  • Node operators in areas where internet connectivity to the rest of the cluster is sub-optimal

What are Shreds?

Shreds are fractions of blocks that are made by a block producer on Solana. One can compare shreds to the individual picture frames in a video stream; shreds are constantly being emitted as a validator produces a block to create a block stream. Other nodes on the network receive these shreds and replay them on-the-fly, meaning state is always changing on Solana vs. Ethereum where state is paused intra-slot.

Shreds are distributed to the network in a tree-like manner. This number of hops a shred takes to reach a server is related to a stake-weighted shuffle; servers with high stake are likely to be 0 or 1 hops away while RPC servers are likely to be 1 or 2 hops.

Running a low staked RPC server means shreds sometimes taking multiple hops to reach your server. This results in a higher latency to receive shreds, higher latency to replay, and high latency notifications from Geyser and websockets. Having access to the newest state can result in significant advantages when high frequency trading.

Results

Speedup for Slot Completion (Avg)

  • Amsterdam: 46ms

  • Frankfurt: 45ms

  • NY: 28ms

  • Tokyo: 25ms

Bandwidth

Shredstream requires 4MiB/s or 32Mbit/s per stream. Streaming from multiple regions is supported.

How Does It Work?

Jito runs multiple Block Engines around the world that receive shreds directly from leaders running Jito-Solana. It also receives retransmitted shreds from these leaders.

The block engines verify these shreds before distributing them to hundreds of servers around the world. Expect the highest quality, lowest latency shreds from validators on Solana.

How Do I Sign Up?

Access to ShredStream is free for a limited time while in alpha testing. Complete this form and we should have you setup within 48 hours. You will get an email once setup is complete. The form enables you to opt in for ShredStream, RPC services and bundle submission whitelisting.

Sign-up form: link

Can ask in our Discord if any questions.

Running ShredStream

Overview

The proxy client will connect to Jito Block Engine and authenticate using the provided keypair. Occasionally it will send a heartbeat to keep shreds flowing. Once a shred is received, it will be distributed to all DEST_IP_PORTS. We recommend running a proxy instance for each region you have validators/RPCs in.

Preparation

  1. Get your Solana pubic key approved

  2. Ensure your firewall is open.

  3. Find your TVU port

    • Run get_tvu_port.sh to find your port

    • Example on machine with solana validator: export LEDGER_DIR=MY_LEDGER_DIR; bash -c "$(curl -fsSL https://raw.githubusercontent.com/jito-labs/shredstream-proxy/master/scripts/get_tvu_port.sh)"

    • Example on remote machine (port may differ): export HOST=http://1.2.3.4:8899; bash -c "$(curl -fsSL https://raw.githubusercontent.com/jito-labs/shredstream-proxy/master/scripts/get_tvu_port.sh)"

  4. Run via docker or natively and set the following parameters

    • BLOCK_ENGINE_URL: set to the closest region to your validator/RPC node

    • DESIRED_REGIONS: set to regions you want to receive shreds from. Same regions as for Block Engine

    • DEST_IP_PORTS: IP:Port combinations to receive shreds on

    • Note: these examples will receive shreds from amsterdam and ny, and directly connect to ny region

Running via Docker

View logs with docker logs -f jito-shredstream-proxy

Host Networking

This exposes all ports, bypassing Docker NAT. Recommended setup.

docker run -d \
--name jito-shredstream-proxy \
--rm \
--env RUST_LOG=info \
--env BLOCK_ENGINE_URL=https://ny.mainnet.block-engine.jito.wtf \
--env AUTH_KEYPAIR=my_keypair.json \
--env DESIRED_REGIONS=amsterdam,ny \
--env DEST_IP_PORTS=127.0.0.1:8001,10.0.0.1:8001 \
--network host \
-v $(pwd)/my_keypair.json:/app/my_keypair.json \
jitolabs/jito-shredstream-proxy shredstream

Bridge Networking

For use in places where Docker host networking is not available. Requires manually exposing each destination. Use docker's bridge IP (172.17.0.1) for any shred listeners running locally on the docker host. Use regular IP for all other non-local endpoints. Docker's bridge IP may differ for your system, confirm with ip -brief address show dev docker0.

docker run -d \
--name jito-shredstream-proxy \
--rm \
--env RUST_LOG=info \
--env BLOCK_ENGINE_URL=https://ny.mainnet.block-engine.jito.wtf \
--env AUTH_KEYPAIR=my_keypair.json \
--env DESIRED_REGIONS=amsterdam,ny \
--env SRC_BIND_PORT=20000 \
--env DEST_IP_PORTS=172.17.0.1:8001,10.0.0.1:8001 \
--network bridge \
-p 20000:20000/udp \
-v $(pwd)/my_keypair.json:/app/my_keypair.json \
jitolabs/jito-shredstream-proxy shredstream

Running Natively

git clone https://github.com/jito-labs/shredstream-proxy.git --recurse-submodules

RUST_LOG=info cargo run --release --bin jito-shredstream-proxy -- shredstream \
    --block-engine-url https://ny.mainnet.block-engine.jito.wtf \
    --auth-keypair my_keypair.json \
    --desired-regions amsterdam,ny \
    --dest-ip-ports 127.0.0.1:8001,10.0.0.1:8001

Firewall Configuration

If you use a firewall, allow access to the following IPs:

Amsterdam

  • 74.118.140.240

  • 202.8.8.174

Frankfurt

  • 145.40.93.84

  • 145.40.93.41

NY

  • 141.98.216.96

  • 64.130.48.56

Tokyo

  • 202.8.9.160

  • 202.8.9.19

Last updated