⚡ DĂ©marrage rapide (shreds bruts)

Le Raw Shred Stream livre des shreds Solana bruts sur votre serveur sous forme de datagrammes UDP, directement dans votre propre rĂ©cepteur. Ce guide binde un socket UDP et reçoit ces datagrammes pour que vous puissiez confirmer que les donnĂ©es arrivent. À partir de lĂ , le dĂ©shredding, le rĂ©assemblage et le dĂ©codage des transactions tournent dans votre propre pipeline — avec un dĂ©codeur optimisĂ©, pour conserver l'avantage de latence.

Les shreds bruts nĂ©cessitent votre propre dĂ©shredding/dĂ©codage. Les datagrammes ci-dessous sont des octets de shred Solana bruts — Ă  vous de rĂ©assembler les slots et de dĂ©coder les transactions, avec un dĂ©codeur optimisĂ© pour conserver l'avantage de latence. Vous voulez vous passer entiĂšrement de dĂ©codeur ? Le Decoded Shred Stream livre des transactions dĂ©jĂ  rĂ©assemblĂ©es au format wire standard. Voir Construire un rĂ©cepteur pour le pipeline complet des shreds bruts.


📋 PrĂ©requis

  1. Créez un compte sur ShredStream.com
  2. Lancez un Raw Shred Stream et choisissez votre région
  3. Entrez l'adresse IP de votre serveur et le port UDP oĂč vous souhaitez recevoir les shreds
  4. Ouvrez votre pare-feu pour le trafic UDP entrant sur ce port — voir Configuration rĂ©seau

đŸ’» Binder un socket UDP

Chaque exemple binde un socket UDP sur le port que vous avez configuré sur ShredStream.com (via la variable d'environnement SHREDSTREAM_PORT) et affiche la taille de chaque datagramme reçu. Définissez SHREDSTREAM_PORT (ou modifiez la valeur par défaut) avec le port que vous avez configuré pour votre stream dans le tableau de bord ShredStream.com.

🟹 JavaScript / TypeScript

javascript
import dgram from 'node:dgram';
const PORT = parseInt(process.env.SHREDSTREAM_PORT || '8080');
const sock = dgram.createSocket('udp4');
sock.on('message', (shred) => {
// Octets de shred Solana bruts — passez-les Ă  votre dĂ©shredder / dĂ©codeur.
console.log(`shred: ${shred.length} bytes`);
});
sock.bind(PORT, '0.0.0.0');

🐍 Python

python
import os, socket
PORT = int(os.environ.get("SHREDSTREAM_PORT", 8080))
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("0.0.0.0", PORT))
while True:
shred, _ = sock.recvfrom(65535)
# Octets de shred Solana bruts — passez-les Ă  votre dĂ©shredder / dĂ©codeur.
print(f"shred: {len(shred)} bytes")

🩀 Rust

rust
use std::net::UdpSocket;
fn main() -> std::io::Result<()> {
let port: u16 = std::env::var("SHREDSTREAM_PORT")
.ok().and_then(|v| v.parse().ok()).unwrap_or(8080);
let sock = UdpSocket::bind(("0.0.0.0", port))?;
let mut buf = [0u8; 65535];
loop {
let (len, _) = sock.recv_from(&mut buf)?;
// Octets de shred Solana bruts — passez-les Ă  votre dĂ©shredder / dĂ©codeur.
println!("shred: {} bytes", len);
}
}

đŸč Go

Gogo
package main
import (
"fmt"
"net"
"os"
"strconv"
)
func main() {
port, _ := strconv.Atoi(os.Getenv("SHREDSTREAM_PORT"))
if port == 0 {
port = 8080
}
conn, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4zero, Port: port})
if err != nil {
panic(err)
}
defer conn.Close()
buf := make([]byte, 65535)
for {
n, _, err := conn.ReadFromUDP(buf)
if err != nil {
panic(err)
}
// Octets de shred Solana bruts — passez-les Ă  votre dĂ©shredder / dĂ©codeur.
fmt.Printf("shred: %d bytes\n", n)
}
}

Chaque datagramme est un shred Solana brut. Pour en tirer des transactions, rĂ©assemblez les shreds par slot puis dĂ©codez — voir Construire un rĂ©cepteur.


đŸ§© Client historique : shredstream

Attention : notre client n'est plus recommandé pour les usages sensibles à la latence. Privilégiez donc un autre client, ou directement notre service Decoded Shred Stream.

S'il vous faut une solution qui tourne dĂšs aujourd'hui, le client historique shredstream binde le port, dĂ©shredde et rĂ©assemble cĂŽtĂ© client, et vous remet des transactions Solana prĂȘtes. Le dĂ©shredding cĂŽtĂ© client coĂ»te de la latence — parfait pour dĂ©marrer, pas pour rivaliser sur la latence.

LangageInstallationPaquet
JavaScript / TypeScriptnpm install shredstreamnpm
Pythonpip install shredstreamPyPI
Rustcargo add shredstreamcrates.io
Gogo get github.com/shredstream/shredstream-sdk-go/v2GitHub
rust
// cargo add shredstream
use shredstream::ShredListener;
fn main() {
let port: u16 = std::env::var("SHREDSTREAM_PORT")
.ok().and_then(|v| v.parse().ok()).unwrap_or(8001);
let mut listener = ShredListener::bind(port).expect("bind");
// Client-side deshredding → ready Solana transactions
for (slot, transactions) in listener.transactions() {
for tx in &transactions {
println!("slot {}: {}", slot, tx.signatures[0]);
}
}
}

⚙ Configuration des buffers OS

Les shreds Solana arrivent à trÚs haut débit ; le buffer de réception UDP par défaut est bien trop petit et provoquera des pertes de paquets. Autorisez au moins 25 Mo au niveau OS :

bash
# Linux
sudo sysctl -w net.core.rmem_max=33554432
# macOS
sudo sysctl -w kern.ipc.maxsockbuf=33554432

Pensez aussi à demander cette taille sur votre socket dans le code de votre récepteur (setsockopt / SO_RCVBUF). Voir Configuration réseau pour la configuration complÚte du pare-feu et des buffers.


âžĄïž Étapes suivantes

DĂ©marrage rapide (shreds bruts) — Docs | ShredStream.com