Solana Gateway Setup

Get authorization header

In order to use Solana Gateway you need to Creating An Account and get Authorization Headers.

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 \
  -bdn-host=ny.solana-v2.blxrbdn.com \
  -bdn-grpc-port=5005 \
  -port=18888

Verify Gateway is running correctly

To verify that your Gateway is running correctly, 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 from gateway

Traders with Enterprise Elite plan or above can start a gateway to run without a local Solana node, with gateway startup arguments like -no-validator -broadcast-addresses 127.0.0.1:1820. Custom programs can then be deployed to listen at the addresses to receive and consume shreds from the BDN.

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]))
	}
}

Last updated