Vue d’ensemble
LaserStream est un service de streaming gRPC Solana géré. Il est compatible avec le protocole ouvert Yellowstone gRPC — donc tout client Yellowstone fonctionne immédiatement — et ajoute des fonctionnalités de production comme la relecture historique, le basculement multi-nœuds, et un environnement entièrement géré. LaserStream utilise le protocole open source gRPC, garantissant aucune dépendance vis-à-vis d’un fournisseur et une compatibilité maximale avec les implémentations gRPC existantes. Vous pouvez vous connecter soit avec le client standard@triton-one/yellowstone-grpc soit utiliser le Helius LaserStream SDK optimisé pour des performances accrues, y compris un débit plus élevé, des reconnexions automatiques, une gestion des abonnements, la gestion des erreurs, et plus encore.
Le SDK LaserStream est 40x plus rapide que les clients JavaScript Yellowstone
Endpoints et Régions
LaserStream est disponible dans plusieurs régions dans le monde. Choisissez le endpoint le plus proche de votre application pour des performances optimales :Endpoints Mainnet
Endpoint Devnet
- Pour les applications de production, choisissez le endpoint mainnet le plus proche de votre serveur pour de meilleures performances (par exemple, si déployé en Europe, utilisez Amsterdam (
ams) ou Francfort (fra)) - Pour tester, utilisez :
https://laserstream-devnet-ewr.helius-rpc.com.
zstd Compression
Tous les endpoints gRPC LaserStream prennent en charge la compression zstd. La compression est facultative : les réponses restent non compressées à moins que votre client ne prenne en charge zstd.
Activez zstd dans le Helius LaserStream TypeScript SDK :
zstd réduit la bande passante réseau, mais ajoute du travail de compression. Évaluez cela avec votre charge de souscription avant de l’activer pour les flux sensibles à la latence.
Troncature des journaux
Par défaut, LaserStream tronque les messages des journaux de transactions à 10 KB pour améliorer la vitesse et la performance. Si vous avez besoin de journaux complets, des endpoints dédiés sans troncature sont disponibles — voir Troncature des journaux.Démarrage rapide
Créer un nouveau projet
Installer les dépendances
tsx car le défaut npx tsc --init sur TypeScript 5.x définit verbatimModuleSyntax, module: "nodenext", et types: [], ce qui casse un rapide ts-node index.ts run. tsx exécute les fichiers .ts sans tsconfig.Obtenir votre clé API
Créer un script de souscription
index.ts avec ce qui suit :Remplacer votre clé API et choisir votre région
index.ts, mettez à jour l’objet config avec :- Votre clé API réelle du Tableau de bord Helius
- Le endpoint LaserStream le plus proche de l’emplacement de votre serveur
- Pour la production (Mainnet) :
- Europe : Utilisez
fra(Francfort),ams(Amsterdam), oulon(Londres) - US Est : Utilisez
ewr(New York) - US Ouest : Utilisez
slc(Salt Lake City) oulax(Los Angeles) - Asie : Utilisez
tyo(Tokyo) ousgp(Singapour)
- Europe : Utilisez
- Pour le développement (Devnet) :
- Utilisez
https://laserstream-devnet-ewr.helius-rpc.com
- Utilisez
Exécuter et voir les résultats
confirmed implique TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA, vous verrez les données dans votre console.Flux de travail courants
Guides étape par étape pour les flux de travail que nous voyons le plus souvent. Chaque guide utilise le SDKhelius-laserstream avec reconnexion automatique et relecture historique intégrées.
Abonnements aux comptes
Surveillance des transactions
Surveillance des slots et des blocs
Décodage des données de transaction
transactionUpdate en transactions Solana lisibles.Flux des données AMM Pump
Demande de souscription
Dans la demande de souscription, vous devez inclure les paramètres généraux suivants :fromSlot (un nombre u64) dans l’objet principal SubscribeRequest pour relire les données à partir d’un slot spécifique. La relecture est actuellement limitée aux 216,000 derniers slots (≈24 heures) ; notez que les relectures plus anciennes que ~20 minutes retournent uniquement des données finalisées.Slots
Slots
mySlotLabel) est un label défini par l’utilisateur pour cette configuration de filtre spécifique, vous permettant de définir potentiellement plusieurs configurations nommées si nécessaire (bien que généralement une seule soit suffisante).Comptes
Comptes
tokenAccounts) est un label défini par l’utilisateur pour cette configuration de filtre spécifique.datasize et/ou memcmp. Pour memcmp, le comparant se trouve sur l’un de bytes, base58, ou base64 directement sur l’objet memcmp.notifyOn n’a aucun effet. Le champ sera supprimé à une date ultérieure.- Les champs fonctionnent comme un ET logique.
- Les valeurs dans les tableaux agissent comme un OU logique (sauf dans
filters, qui fonctionnent comme un ET logique).
Transaction
Transaction
myTxSubscription) est un label défini par l’utilisateur pour cette configuration de filtre spécifique.Si tous les champs sont laissés vides, toutes les transactions sont diffusées. Sinon :- Les champs fonctionnent comme un ET logique.
- Les valeurs dans les tableaux sont traitées comme un OU logique (sauf pour
accountRequired, où tous doivent correspondre).
Bloc
Bloc
myBlockLabel) est un label défini par l’utilisateur pour cette configuration de filtre spécifique.Méta des Blocs
Méta des Blocs
blockmetadata) est un label défini par l’utilisateur pour cette souscription. Actuellement, aucun filtre n’est disponible pour les métadonnées de bloc — tous les messages sont diffusés par défaut.Entrées
Entrées
entrySubscribe) est un label défini par l’utilisateur pour cette souscription. Actuellement, il n’existe pas de filtres disponibles pour les entrées ; toutes les entrées sont diffusées.Exemples de code (SDK LaserStream)
- Mises à jour de slots
- Mises à jour de comptes
- Mises à jour de transactions
- Blocs
- Métadonnées de blocs
- Entrées
Options de SDK
Nous fournissons des SDK officiels pour plusieurs langages de programmation :- TypeScript: LaserStream TypeScript SDK
- Rust: LaserStream Rust SDK
- Go: LaserStream Go SDK
Dépannage / FAQ
Q: Je ressens un décalage ou une lenteur de performance avec ma connexion LaserStream. Qu'est-ce qui pourrait causer cela ?
Q: Je ressens un décalage ou une lenteur de performance avec ma connexion LaserStream. Qu'est-ce qui pourrait causer cela ?
- Lenteur du client JavaScript: Le client JavaScript peut prendre du retard lors du traitement de trop nombreux messages ou de la consommation d’une bande passante excessive. Envisagez de filtrer vos souscriptions plus étroitement pour réduire le volume de messages, passez au SDK JavaScript LaserStream, ou essayez d’utiliser un autre langage.
- Bande passante locale limitée: Les souscriptions lourdes peuvent submerger les clients avec une bande passante réseau limitée. Surveillez votre utilisation du réseau et envisagez de mettre à niveau votre connexion ou de réduire la portée de la souscription.
-
Distance géographique: Les longs trajets réseau augmentent la latence et la perte de paquets. Utilisez le endpoint le plus proche de votre serveur. Pour les connexions à haute latence, augmentez vos tailles de tampon de lecture réseau (peut améliorer la bande passante de 5x+) :
Pour persister après les redémarrages, ajoutez à
/etc/sysctl.conf:Augmentez les tailles de fenêtre de flux et de connexion HTTP/2 à 64 Mo pour éviter les goulots d’étranglement du contrôle de flux. Les deux sont nécessaires — élever seulement la fenêtre de flux laisse la fenêtre de niveau de connexion comme contrainte de liaison : - Goulots d’étranglement côté client: Assurez-vous que votre logique de traitement des messages est optimisée et ne bloque pas le thread principal pendant de longues périodes.
Q: Je reçois des erreurs de connexion. Que dois-je vérifier ?
Q: Je reçois des erreurs de connexion. Que dois-je vérifier ?
Q: Pourquoi mes filtres ne fonctionnent-ils pas comme prévu ?
Q: Pourquoi mes filtres ne fonctionnent-ils pas comme prévu ?
Q: Puis-je m'abonner à plusieurs types de données (par exemple, comptes et transactions) en une seule demande ?
Q: Puis-je m'abonner à plusieurs types de données (par exemple, comptes et transactions) en une seule demande ?
accounts, transactions) dans le même objet SubscribeRequest.Q: Est-ce que LaserStream supporte les groupes de consommateurs ?
Q: Est-ce que LaserStream supporte les groupes de consommateurs ?
Q: Pourquoi mes messages de journal de transaction sont-ils tronqués ?
Q: Pourquoi mes messages de journal de transaction sont-ils tronqués ?
Q: Pourquoi ne reçois-je que des réponses Pong sans données de compte ou de slot ?
Q: Pourquoi ne reçois-je que des réponses Pong sans données de compte ou de slot ?
ping dans votre initiale SubscribeRequest amène LaserStream à ignorer silencieusement tous les filtres d’abonnement — seul un Pong est retourné sans données de compte, de transaction, ou de slot. Pour corriger cela, retirez ping de la demande de souscription initiale et envoyez plutôt des pings séparément via le récepteur du flux après l’établissement de la souscription. Cela maintient la connexion active sans interférer avec vos filtres.