Ikhtisar
LaserStream adalah layanan streaming gRPC Solana terkelola. Layanan ini kompatibel pada tingkat protokol dengan protokol terbuka Yellowstone gRPC — sehingga semua klien Yellowstone dapat langsung digunakan — serta menambahkan fitur produksi seperti pemutaran ulang historis, failover multi-node, dan lingkungan yang dikelola sepenuhnya. LaserStream menggunakan protokol gRPC sumber terbuka, sehingga memastikan tidak ada ketergantungan pada vendor dan memberikan kompatibilitas maksimal dengan implementasi gRPC yang sudah ada. Anda dapat terhubung menggunakan klien@triton-one/yellowstone-grpc standar atau menggunakan Helius LaserStream SDK yang dioptimalkan untuk performa guna memperoleh manfaat tambahan, termasuk throughput yang lebih tinggi, penyambungan ulang otomatis, pengelolaan langganan, penanganan kesalahan, dan lainnya.
LaserStream SDK is 40x Faster vs. JavaScript Yellowstone Clients
Endpoint & Wilayah
LaserStream tersedia di berbagai wilayah di seluruh dunia. Pilih endpoint yang paling dekat dengan aplikasi Anda untuk mendapatkan performa optimal:Endpoint Mainnet
Endpoint Devnet
- Untuk aplikasi produksi, pilih endpoint mainnet yang paling dekat dengan server Anda agar mendapatkan performa terbaik (misalnya, jika melakukan deployment di Eropa, gunakan Amsterdam (
ams) atau Frankfurt (fra)) - Untuk pengujian, gunakan:
https://laserstream-devnet-ewr.helius-rpc.com.
Kompresi zstd
Semua endpoint LaserStream gRPC mendukung kompresi zstd. Kompresi bersifat opsional: respons tetap tidak dikompresi kecuali klien Anda menyatakan dukungan zstd.
Aktifkan zstd di Helius LaserStream TypeScript SDK:
zstd mengurangi penggunaan bandwidth jaringan, tetapi menambah beban kerja kompresi. Lakukan benchmark dengan beban kerja langganan Anda sebelum mengaktifkannya untuk stream yang sensitif terhadap latensi.
Pemotongan Log
Secara default, LaserStream memotong pesan log transaksi menjadi 10 KB untuk meningkatkan kecepatan dan performa. Jika Anda memerlukan log lengkap, tersedia endpoint khusus tanpa pemotongan — lihat Pemotongan Log.Panduan Memulai Cepat
Create a New Project
Install Dependencies
tsx karena npx tsc --init default pada TypeScript 5.x menetapkan verbatimModuleSyntax, module: "nodenext", dan types: [], yang semuanya menyebabkan eksekusi cepat ts-node index.ts gagal. tsx menjalankan file .ts tanpa tsconfig.Obtain Your API Key
Create a Subscription Script
index.ts dengan isi berikut:Replace Your API Key and Choose Your Region
index.ts, perbarui objek config dengan:- Kunci API Anda yang sebenarnya dari Dasbor Helius
- Endpoint LaserStream yang paling dekat dengan lokasi server Anda
- Untuk Produksi (Mainnet):
- Eropa: Gunakan
fra(Frankfurt),ams(Amsterdam), ataulon(London) - AS Timur: Gunakan
ewr(New York) - AS Barat: Gunakan
slc(Salt Lake City) ataulax(Los Angeles) - Asia: Gunakan
tyo(Tokyo) atausgp(Singapura)
- Eropa: Gunakan
- Untuk Pengembangan (Devnet):
- Gunakan
https://laserstream-devnet-ewr.helius-rpc.com
- Gunakan
Run and View Results
confirmed melibatkan TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA, Anda akan melihat datanya di konsol.Alur Kerja Umum
Panduan langkah demi langkah untuk alur kerja yang paling sering kami temui. Setiap panduan menggunakan SDKhelius-laserstream dengan penyambungan ulang otomatis dan pemutaran ulang historis bawaan.
Account Subscriptions
Transaction Monitoring
Slot & Block Monitoring
Decoding Transaction Data
transactionUpdate menjadi transaksi Solana yang dapat dibaca.Stream Pump AMM Data
Permintaan Berlangganan
Dalam permintaan berlangganan, Anda perlu menyertakan parameter umum berikut:fromSlot (nomor u64) dalam objek utama SubscribeRequest untuk memutar ulang data mulai dari slot tertentu. Pemutaran ulang saat ini dibatasi hingga sekitar 48 jam terakhir (~691.200 slot pada kecepatan jaringan saat ini); perhatikan bahwa pemutaran ulang yang lebih lama dari sekitar 20 menit hanya mengembalikan data yang sudah final.{ offset: uint64, length: uint64 } yang memungkinkan Anda hanya menerima potongan data yang diperlukan dari akun.Slots
Slots
mySlotLabel) adalah label yang ditentukan pengguna untuk konfigurasi filter khusus ini, sehingga Anda dapat menentukan beberapa konfigurasi bernama jika diperlukan (meskipun biasanya satu sudah cukup).Accounts
Accounts
tokenAccounts) adalah label yang ditentukan pengguna untuk konfigurasi filter khusus ini.datasize dan/atau memcmp. Untuk memcmp, nilai pembanding ditempatkan langsung pada salah satu dari bytes, base58, atau base64 di objek memcmp.notifyOn tidak berpengaruh. Bidang ini akan dihapus di kemudian hari.- Bidang beroperasi sebagai AND logis.
- Nilai dalam array beroperasi sebagai OR logis (kecuali dalam
filters, yang beroperasi sebagai AND logis).
Transaction
Transaction
myTxSubscription) adalah label yang ditentukan pengguna untuk konfigurasi filter khusus ini.accountInclude).tokenAccounts (akun token terkait) opsional. Jika ditetapkan, dompet accountInclude juga cocok dengan transaksi saat dompet tersebut memiliki saldo token SPL — misalnya transfer token masuk yang menyentuh akun token dompet, bukan pubkey-nya. Menerima "balanceChanged" (kecocokan delta saldo), "all" (referensi apa pun, volume lebih tinggi), atau "none" (tanpa ekspansi, default). SDK mengonversi string menjadi enum TokenAccountExpansionControlFlag tingkat protokol (bagian dari yellowstone-grpc-proto 12.5.0+). Lihat Pemfilteran Akun Token (ATA) untuk mengetahui fungsi dan cara kerjanya.matchMints opsional (default false). Saat true, daftar accountInclude, accountExclude, dan accountRequired juga dicocokkan dengan mint dalam saldo token sebelum/sesudah transaksi, bukan hanya dengan kunci akunnya. Masukkan mint ke accountInclude untuk menerima setiap transaksi yang menyentuh token tersebut, termasuk transfer SPL biasa yang tidak pernah mereferensikan mint dalam kunci akunnya. Fitur ini bersifat opsional dan tidak memengaruhi filter yang ada. Memerlukan helius-laserstream 0.8.5+ (JS), 0.6.4+ (Rust), atau go/v0.3.0+ (Go). Lihat Pemfilteran Mint Token untuk semantik dan contoh.- Bidang beroperasi sebagai AND logis.
- Nilai dalam array diperlakukan sebagai OR logis (kecuali untuk
accountRequired, yang semuanya harus cocok).
Block
Block
myBlockLabel) adalah label yang ditentukan pengguna untuk konfigurasi filter khusus ini.Blocks Meta
Blocks Meta
blockmetadata) adalah label yang ditentukan pengguna untuk langganan ini. Saat ini, tidak tersedia filter untuk metadata blok—semua pesan disiarkan secara default.Entries
Entries
entrySubscribe) adalah label yang ditentukan pengguna untuk langganan ini. Saat ini, tidak tersedia filter untuk entri; semua entri disiarkan.Contoh Kode (LaserStream SDK)
- Slot Updates
- Account Updates
- Transaction Updates
- Blocks
- Block Metadata
- Entries
- Unary Methods
Opsi SDK
Kami menyediakan SDK resmi untuk beberapa bahasa pemrograman:- TypeScript: LaserStream TypeScript SDK
- Rust: LaserStream Rust SDK
- Go: LaserStream Go SDK
Pemecahan Masalah / FAQ
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?
- Kelambatan Klien JavaScript: Klien JavaScript dapat tertinggal saat memproses terlalu banyak pesan atau menggunakan terlalu banyak bandwidth. Pertimbangkan untuk mempersempit filter langganan guna mengurangi volume pesan, beralih ke LaserStream JavaScript SDK, atau mencoba bahasa lain.
- Bandwidth lokal terbatas: Langganan berat dapat membebani klien yang memiliki bandwidth jaringan terbatas. Pantau penggunaan jaringan Anda dan pertimbangkan untuk meningkatkan koneksi atau mengurangi cakupan langganan.
-
Jarak geografis: Rute jaringan yang panjang meningkatkan latensi dan kehilangan paket. Gunakan endpoint yang paling dekat dengan server Anda. Untuk koneksi berlatensi tinggi, tingkatkan ukuran buffer baca jaringan Anda (dapat meningkatkan bandwidth hingga 5x+):
Agar tetap berlaku setelah boot ulang, tambahkan ke
/etc/sysctl.conf:Tingkatkan ukuran jendela stream dan koneksi HTTP/2 menjadi 64MB untuk mencegah hambatan kontrol aliran. Keduanya diperlukan — hanya meningkatkan jendela stream akan membuat jendela tingkat koneksi tetap menjadi batas yang mengikat: - Hambatan pemrosesan di sisi klien: Pastikan logika pemrosesan pesan Anda dioptimalkan dan tidak memblokir thread utama dalam waktu lama.
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, transactions) dalam objek SubscribeRequest yang sama.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 dalam SubscribeRequest awal menyebabkan LaserStream mengabaikan semua filter langganan secara diam-diam — hanya Pong yang dikembalikan tanpa data akun, transaksi, atau slot. Untuk memperbaikinya, hapus ping dari permintaan berlangganan awal, lalu kirim ping secara terpisah melalui sink stream setelah langganan dibuat. Cara ini menjaga koneksi tetap aktif tanpa mengganggu filter Anda.