Descripción general
LaserStream es un servicio administrado de streaming gRPC de Solana. Es compatible a nivel de protocolo con el protocolo abierto Yellowstone gRPC, por lo que cualquier cliente de Yellowstone funciona sin configuración adicional. Además, incorpora funciones para producción, como reproducción histórica, conmutación por error entre varios nodos y un entorno completamente administrado. LaserStream usa el protocolo gRPC de código abierto, lo que evita la dependencia de un proveedor y garantiza la máxima compatibilidad con las implementaciones de gRPC existentes. Puedes conectarte con el cliente@triton-one/yellowstone-grpc estándar o usar el SDK de Helius LaserStream optimizado para el rendimiento. Este ofrece ventajas adicionales, como mayor rendimiento, reconexiones automáticas, administración de suscripciones, gestión de errores y más.
LaserStream SDK is 40x Faster vs. JavaScript Yellowstone Clients
Endpoints y regiones
LaserStream está disponible en varias regiones de todo el mundo. Elige el endpoint más cercano a tu aplicación para obtener un rendimiento óptimo:Endpoints de Mainnet
Endpoint de Devnet
- Para aplicaciones de producción, elige el endpoint de Mainnet más cercano a tu servidor para obtener el mejor rendimiento (por ejemplo, si implementas en Europa, usa Ámsterdam (
ams) o Fráncfort (fra)) - Para pruebas, usa:
https://laserstream-devnet-ewr.helius-rpc.com.
Compresión zstd
Todos los endpoints de LaserStream gRPC admiten la compresión zstd. La compresión es opcional: las respuestas permanecen sin comprimir a menos que tu cliente anuncie compatibilidad con zstd.
Habilita zstd en el SDK de TypeScript de Helius LaserStream:
zstd reduce el ancho de banda de red, pero agrega trabajo de compresión. Evalúa su rendimiento con la carga de trabajo de tu suscripción antes de habilitarlo en streams sensibles a la latencia.
Truncamiento de registros
De forma predeterminada, LaserStream trunca los mensajes de registro de transacciones a 10 KB para mejorar la velocidad y el rendimiento. Si necesitas los registros completos, hay endpoints dedicados sin truncamiento. Consulta Truncamiento de registros.Inicio rápido
Create a New Project
Install Dependencies
tsx porque el npx tsc --init predeterminado de TypeScript 5.x establece verbatimModuleSyntax, module: "nodenext" y types: [], que impiden una ejecución rápida de ts-node index.ts. tsx ejecuta archivos .ts sin un tsconfig.Obtain Your API Key
Create a Subscription Script
index.ts con lo siguiente:Replace Your API Key and Choose Your Region
index.ts, actualiza el objeto config con:- Tu clave de API real del panel de Helius
- El endpoint de LaserStream más cercano a la ubicación de tu servidor
- Para producción (Mainnet):
- Europa: usa
fra(Fráncfort),ams(Ámsterdam) olon(Londres) - Este de EE. UU.: usa
ewr(Nueva York) - Oeste de EE. UU.: usa
slc(Salt Lake City) olax(Los Ángeles) - Asia: usa
tyo(Tokio) osgp(Singapur)
- Europa: usa
- Para desarrollo (Devnet):
- Usa
https://laserstream-devnet-ewr.helius-rpc.com
- Usa
Run and View Results
confirmed involucre a TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA, verás los datos en tu consola.Flujos de trabajo comunes
Guías paso a paso para los flujos de trabajo que vemos con mayor frecuencia. Cada guía usa el SDKhelius-laserstream, con reconexión automática y reproducción histórica integradas.
Account Subscriptions
Transaction Monitoring
Slot & Block Monitoring
Decoding Transaction Data
transactionUpdate y conviértelas en transacciones de Solana legibles.Stream Pump AMM Data
Solicitud de suscripción
En la solicitud de suscripción, debes incluir los siguientes parámetros generales:fromSlot (un número u64) en el objeto SubscribeRequest principal para reproducir datos a partir de un slot específico. Actualmente, la reproducción se limita a los últimos 216 000 slots (≈24 horas). Ten en cuenta que las reproducciones con más de ~20 minutos de antigüedad solo devuelven datos finalizados.{ offset: uint64, length: uint64 } que te permite recibir únicamente las secciones de datos necesarias de las cuentas.Slots
Slots
mySlotLabel) es una etiqueta definida por ti para esta configuración de filtro específica. Esto te permite definir varias configuraciones con nombre si es necesario, aunque normalmente basta con una.Accounts
Accounts
tokenAccounts) es una etiqueta definida por ti para esta configuración de filtro específica.datasize o memcmp, o de ambos. Para memcmp, el valor de comparación se coloca en bytes, base58 o base64 directamente en el objeto memcmp.notifyOn no produce ningún efecto. El campo se eliminará más adelante.- Los campos operan como un AND lógico.
- Los valores dentro de los arreglos operan como un OR lógico (excepto dentro de
filters, donde operan como un AND lógico).
Transaction
Transaction
myTxSubscription) es una etiqueta definida por ti para esta configuración de filtro específica.accountInclude).tokenAccounts (cuenta de token asociada). Cuando se establece, una cartera accountInclude también coincide con las transacciones donde posee un saldo de tokens SPL; por ejemplo, transferencias de tokens entrantes que interactúan con la cuenta de tokens de la cartera en lugar de su clave pública. Acepta "balanceChanged" (coincidencias por diferencia de saldo), "all" (cualquier referencia, mayor volumen) o "none" (sin expansión, el valor predeterminado). El SDK convierte la cadena al enum TokenAccountExpansionControlFlag del nivel de protocolo (parte de yellowstone-grpc-proto 12.5.0+). Consulta Filtrado de cuentas de tokens (ATA) para saber qué hace y cómo funciona.matchMints opcional (valor predeterminado: false). Cuando es true, las listas accountInclude, accountExclude e accountRequired también se comparan con los mints de los saldos de tokens anteriores y posteriores a la transacción, no solo con sus claves de cuenta. Coloca un mint en accountInclude para recibir todas las transacciones que interactúen con ese token, incluidas las transferencias SPL simples que nunca hagan referencia al mint en sus claves de cuenta. Es opcional y no afecta a los filtros existentes. Requiere helius-laserstream 0.8.5+ (JS), 0.6.4+ (Rust) o go/v0.3.0+ (Go). Consulta Filtrado por mint de token para conocer la semántica y ver ejemplos.- Los campos operan como un AND lógico.
- Los valores dentro de los arreglos se tratan como un OR lógico (excepto en
accountRequired, donde todos deben coincidir).
Block
Block
myBlockLabel) es una etiqueta definida por ti para esta configuración de filtro específica.Blocks Meta
Blocks Meta
blockmetadata) es una etiqueta definida por ti para esta suscripción. Actualmente, no hay filtros disponibles para los metadatos de bloques; todos los mensajes se transmiten de forma predeterminada.Entries
Entries
entrySubscribe) es una etiqueta definida por ti para esta suscripción. Actualmente, no hay filtros disponibles para las entradas; se transmiten todas.Ejemplos de código (SDK de LaserStream)
- Slot Updates
- Account Updates
- Transaction Updates
- Blocks
- Block Metadata
- Entries
Opciones de SDK
Ofrecemos SDK oficiales para varios lenguajes de programación:- TypeScript: SDK de TypeScript de LaserStream
- Rust: SDK de Rust de LaserStream
- Go: SDK de Go de LaserStream
Solución de problemas / Preguntas frecuentes
Q: I'm experiencing lag or slow performance with my LaserStream connection. What could be causing this?
Q: I'm experiencing lag or slow performance with my LaserStream connection. What could be causing this?
- Lentitud del cliente de JavaScript: El cliente de JavaScript puede quedarse atrás cuando procesa demasiados mensajes o consume demasiado ancho de banda. Considera aplicar filtros más específicos a tus suscripciones para reducir el volumen de mensajes, cambiar al SDK de JavaScript de LaserStream o usar otro lenguaje.
- Ancho de banda local limitado: Las suscripciones de gran volumen pueden saturar a los clientes con un ancho de banda de red limitado. Supervisa el uso de tu red y considera mejorar tu conexión o reducir el alcance de la suscripción.
-
Distancia geográfica: Las rutas de red largas aumentan la latencia y la pérdida de paquetes. Usa el endpoint más cercano a tu servidor. Para conexiones de alta latencia, aumenta el tamaño de los búferes de lectura de red (puede mejorar el ancho de banda 5 veces o más):
Para conservar la configuración después de reiniciar, agrégala a
/etc/sysctl.conf:Aumenta a 64 MB el tamaño de las ventanas de stream y conexión de HTTP/2 para evitar cuellos de botella en el control de flujo. Ambas son necesarias: aumentar solo la ventana del stream deja la ventana a nivel de conexión como la restricción determinante: - Cuellos de botella en el procesamiento del cliente: Asegúrate de que tu lógica de procesamiento de mensajes esté optimizada y no bloquee el hilo principal durante periodos prolongados.
Q: I'm getting connection errors. What should I check?
Q: I'm getting connection errors. What should I check?
Q: Why aren't my filters working as expected?
Q: Why aren't my filters working as expected?
Q: Can I subscribe to multiple types of data (e.g., accounts and transactions) in one request?
Q: Can I subscribe to multiple types of data (e.g., accounts and transactions) in one request?
accounts e transactions) dentro del mismo objeto SubscribeRequest.Q: Does LaserStream support consumer groups?
Q: Does LaserStream support consumer groups?
Q: Why are my transaction log messages cut off?
Q: Why are my transaction log messages cut off?
Q: Why am I only receiving Pong responses with no account or slot data?
Q: Why am I only receiving Pong responses with no account or slot data?
ping en tu objeto SubscribeRequest inicial hace que LaserStream ignore silenciosamente todos los filtros de suscripción. Solo se devuelve un Pong, sin datos de cuentas, transacciones ni slots. Para corregirlo, elimina ping de la solicitud de suscripción inicial y, una vez establecida la suscripción, envía los pings por separado mediante el receptor del stream. Esto mantiene activa la conexión sin interferir con tus filtros.