ShredStream
ShredStream provides the lowest latency to shreds from leaders on Solana.
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.
- 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-optima
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.
Speedup for Slot Completion (Avg)
- Amsterdam: 46ms
- Frankfurt: 45ms
- NY: 28ms
- Tokyo: 25ms
Shredstream requires 4MiB/s or 32Mbit/s per stream. Streaming from multiple regions is supported.
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.
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.
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.- 1.
- 2.Ensure your firewall is open. Default port for incoming shreds is
20000/udp
. NAT connections currently not supported. - 3.Find your TVU port
- 1.
- 2.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)"
- 3.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 nodeDEST_IP_PORTS
:IP:Port
combinations to receive shreds on- Note: these examples will receive shreds from
amsterdam
andny
, and directly connect tony
region
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:8002,10.0.0.1:8002 \
--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:8002,10.0.0.1:8002 \
--network bridge \
-p 20000:20000/udp \
-v $(pwd)/my_keypair.json:/app/my_keypair.json \
jitolabs/jito-shredstream-proxy shredstream
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:8002,10.0.0.1:8002
Last modified 1mo ago