⥠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
- Créez un compte sur ShredStream.com
- Lancez un Raw Shred Stream et choisissez votre région
- Entrez l'adresse IP de votre serveur et le port UDP oĂč vous souhaitez recevoir les shreds
- 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
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
import os, socketPORT = 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
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
package mainimport ("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.
| Langage | Installation | Paquet |
|---|---|---|
| JavaScript / TypeScript | npm install shredstream | npm |
| Python | pip install shredstream | PyPI |
| Rust | cargo add shredstream | crates.io |
| Go | go get github.com/shredstream/shredstream-sdk-go/v2 | GitHub |
// cargo add shredstreamuse 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 transactionsfor (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 :
# Linuxsudo sysctl -w net.core.rmem_max=33554432# macOSsudo 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
- Construire un rĂ©cepteur â ce que votre rĂ©cepteur de shreds bruts doit gĂ©rer
- Configuration rĂ©seau â pare-feu et configuration OS
- Bonnes pratiques â monitoring, redondance et performances
- DĂ©pannage â problĂšmes courants et solutions