Gateway and OFR Setup
Solana Gateway and OFR Setup
Get authorization header
In order to receive shreds through the Optimized Feed Relay (OFR) and connect to bloXroute's OFR Relay, you must use a OFR Gateway. To do this, you need to Create An Account and get Authorization.
Installation
docker pull bloxroute/solana-gateway:latest
Startup
docker run --name bxgateway-solana -d \
--network=host bloxroute/solana-gateway:latest \
-auth-header=[AuthHeader] \
-network-interface=eno1 \
-tvu-port=8001 \
-ofr-host=ny.solana-v2.blxrbdn.com \
-port=18888
Verify the Gateway and OFR is running correctly
To verify that your Gateway is running correctly and shreds are being received through OFR, monitor the stdout or logfile logs. Every minute it should report the amount of shreds it sends and receives.
The output should be similar to the following:
time="2025-01-06T10:56:00.000160" level="info" msg="stats: total shreds by source: [(10.142.0.47:0, 449771), (185.26.9.3:8381, 434018)] unseen shreds by source: [(185.26.9.3:8381, 385382), (10.142.0.47:0, 70913)]. Seen 84.46% of shreds first from BDN"
Note: The Gateway does not need to be restarted if your Solana node restarts.
Sample program to receive shreds through OFR
For example, running a custom UDP server with code below to receive shreds from gateway:
package main
import (
"fmt"
"net"
)
func main() {
conn, err := net.ListenUDP("udp", &net.UDPAddr{
IP: net.ParseIP("0.0.0.0"),
Port: 1820,
})
if err != nil {
fmt.Printf("Error starting UDP server: %v\n", err)
return
}
defer conn.Close()
fmt.Printf("UDP server listening\n")
buffer := make([]byte, 1228) // 1228 - udp shred size
// Continuously read data
for {
n, addr, err := conn.ReadFromUDP(buffer)
if err != nil {
fmt.Printf("Error reading from UDP connection: %v\n", err)
continue
}
// or process it generally
fmt.Printf("Received message from %s: %s\n", addr.String(), string(buffer[:n]))
}
}
Firedancer Compatibility
OFR provides partial compatibility with Firedancer specifically due to its XDP-based networking architecture. Currently, integrating with Firedancer requires an Enterprise Elite subscription tier or higher. The following outlines the configuration process for deploying an OFR Gateway with Firedancer:
docker run --name bxgateway-solana -d \
--network=host bloxroute/solana-gateway:latest \
-auth-header=[AuthHeader] \
-network-interface=eno1 \
-tvu-port=8001 \
-ofr-host=ny.solana-v2.blxrbdn.com \
-port=18888 \
-no-validator \ # disable validator
-broadcast-addresses 127.0.0.1:8001 # broadcast shreds to tvu-port on lo
# This configuration enables direct transmission of shreds to the loopback (`lo`)
# interface, where they are subsequently processed by the XDP subsystem and
# dedicated shred tiles.
Last updated