Skip to main content

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

Pelajari cara kami menggunakan Rust Core dengan binding NAPI zero-copy untuk memaksimalkan performa JavaScript SDK
Pemberitahuan Performa: Jika Anda mengalami kelambatan atau masalah performa pada koneksi LaserStream, lihat bagian Pemecahan Masalah untuk mengetahui penyebab umum dan solusinya.

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

Pemilihan Jaringan & Wilayah:
  • 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

Mulai gunakan LaserStream melalui Dasbor Helius. Mainnet memerlukan paket Business atau Professional; Devnet tersedia pada paket Developer dan yang lebih tinggi. Lihat Paket & Harga untuk detailnya.
1

Create a New Project

2

Install Dependencies

Kami menggunakan 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.
3

Obtain Your API Key

Buat kunci dari Dasbor Helius.Kunci ini akan berfungsi sebagai token autentikasi Anda untuk LaserStream.
Persyaratan Paket: LaserStream devnet tersedia pada semua paket. LaserStream mainnet memerlukan paket Business atau Professional.
4

Create a Subscription Script

Buat index.ts dengan isi berikut:
5

Replace Your API Key and Choose Your Region

Di index.ts, perbarui objek config dengan:
  1. Kunci API Anda yang sebenarnya dari Dasbor Helius
  2. Endpoint LaserStream yang paling dekat dengan lokasi server Anda
Contoh Pemilihan Jaringan & Wilayah:
  • Untuk Produksi (Mainnet):
    • Eropa: Gunakan fra (Frankfurt), ams (Amsterdam), atau lon (London)
    • AS Timur: Gunakan ewr (New York)
    • AS Barat: Gunakan slc (Salt Lake City) atau lax (Los Angeles)
    • Asia: Gunakan tyo (Tokyo) atau sgp (Singapura)
  • Untuk Pengembangan (Devnet):
    • Gunakan https://laserstream-devnet-ewr.helius-rpc.com
6

Run and View Results

Setiap kali transaksi token 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 SDK helius-laserstream dengan penyambungan ulang otomatis dan pemutaran ulang historis bawaan.

Account Subscriptions

Pantau perubahan saldo, data, dan kepemilikan pada akun tertentu menggunakan filter.

Transaction Monitoring

Streaming transaksi yang melibatkan akun target, lalu filter berdasarkan program, suara, atau status kegagalan.

Slot & Block Monitoring

Lacak konsensus jaringan, produksi blok, dan transisi tingkat komitmen.

Decoding Transaction Data

Uraikan payload biner transactionUpdate menjadi transaksi Solana yang dapat dibaca.

Stream Pump AMM Data

Contoh dunia nyata: pantau perdagangan Pump AMM dengan filter yang aman saat penyambungan ulang.
Klien @triton-one/yellowstone-grpc berfungsi dengan endpoint yang sama jika Anda lebih memilih protokol mentah Yellowstone. Lihat referensi Yellowstone gRPC untuk detail tingkat protokol.

Permintaan Berlangganan

Dalam permintaan berlangganan, Anda perlu menyertakan parameter umum berikut:
Pemutaran Ulang Historis: Anda dapat secara opsional menyertakan bidang 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.
enum
Menentukan tingkat komitmen, yang dapat berupa processed, confirmed, atau finalized.
array
Array objek { offset: uint64, length: uint64 } yang memungkinkan Anda hanya menerima potongan data yang diperlukan dari akun.
boolean
Beberapa penyedia cloud (seperti Cloudflare) dapat menutup stream yang tidak aktif setelah periode tertentu. Untuk mencegahnya dan menjaga koneksi tetap aktif tanpa perlu mengirim ulang filter, tetapkan nilai ini ke true. Server akan merespons dengan pesan Pong setiap 15 detik.
Selanjutnya, Anda perlu menentukan filter untuk data yang ingin Anda langgani, seperti akun, blok, slot, atau transaksi.
Tentukan filter untuk pembaruan slot. Kunci yang Anda gunakan (misalnya, 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).
boolean
Secara default, slot dikirim untuk semua tingkat komitmen. Dengan filter ini, Anda dapat memilih untuk hanya menerima tingkat komitmen yang dipilih.
boolean
Memungkinkan langganan menerima pembaruan untuk perubahan di dalam slot, tidak hanya pada awal slot baru. Hal ini berguna untuk data slot yang lebih terperinci dan berlatensi rendah.
Tentukan filter untuk pembaruan data akun. Kunci yang Anda gunakan (misalnya, tokenAccounts) adalah label yang ditentukan pengguna untuk konfigurasi filter khusus ini.
array
Mencocokkan kunci publik mana pun dari array yang disediakan.
array
Kunci publik pemilik akun. Mencocokkan kunci publik mana pun dari array yang disediakan.
array
Mirip dengan filter dalam getProgramAccounts. Ini adalah array filter datasize dan/atau memcmp. Untuk memcmp, nilai pembanding ditempatkan langsung pada salah satu dari bytes, base58, atau base64 di objek memcmp.
enum
usang
Tidak digunakan lagi — tidak melakukan apa pun sejak Agave 4.2. Menetapkan notifyOn tidak berpengaruh. Bidang ini akan dihapus di kemudian hari.
Jika semua bidang kosong, semua akun akan disiarkan. Jika tidak:
  • Bidang beroperasi sebagai AND logis.
  • Nilai dalam array beroperasi sebagai OR logis (kecuali dalam filters, yang beroperasi sebagai AND logis).
Melacak lebih dari ~10.000 akun? Alih-alih menggunakan daftar pubkey eksplisit (32 byte per akun), gunakan filter cuckoo terkompresi (~3–4 byte per akun) untuk berlangganan ratusan ribu akun dalam satu stream. Tersedia dalam Rust dan JavaScript SDK.
Tentukan filter untuk pembaruan transaksi. Kunci yang Anda gunakan (misalnya, myTxSubscription) adalah label yang ditentukan pengguna untuk konfigurasi filter khusus ini.
boolean
Aktifkan atau nonaktifkan penyiaran transaksi suara.
boolean
Aktifkan atau nonaktifkan penyiaran transaksi yang gagal.
string
Siarkan hanya transaksi yang cocok dengan tanda tangan yang ditentukan.
array
Filter transaksi yang melibatkan akun mana pun dari daftar yang disediakan.
array
Kecualikan transaksi yang melibatkan akun mana pun dari daftar yang disediakan (kebalikan dari accountInclude).
array
Filter transaksi yang melibatkan semua akun dari daftar yang disediakan (semua akun harus digunakan).
string
Ekspansi 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.
boolean
Flag 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.
Jika semua bidang dibiarkan kosong, semua transaksi akan disiarkan. Jika tidak:
  • Bidang beroperasi sebagai AND logis.
  • Nilai dalam array diperlakukan sebagai OR logis (kecuali untuk accountRequired, yang semuanya harus cocok).
Tentukan filter untuk pembaruan blok. Kunci yang Anda gunakan (misalnya, myBlockLabel) adalah label yang ditentukan pengguna untuk konfigurasi filter khusus ini.
array
Memfilter transaksi dan akun yang melibatkan akun mana pun dari daftar yang disediakan.
boolean
Menyertakan semua transaksi dalam siaran.
boolean
Menyertakan semua pembaruan akun dalam siaran.
boolean
Menyertakan semua entri dalam siaran.
Fitur ini berfungsi serupa dengan Blocks, tetapi tidak menyertakan transaksi, akun, dan entri. Kunci yang Anda gunakan (misalnya, blockmetadata) adalah label yang ditentukan pengguna untuk langganan ini. Saat ini, tidak tersedia filter untuk metadata blok—semua pesan disiarkan secara default.
Berlangganan entri ledger. Kunci yang Anda gunakan (misalnya, entrySubscribe) adalah label yang ditentukan pengguna untuk langganan ini. Saat ini, tidak tersedia filter untuk entri; semua entri disiarkan.

Contoh Kode (LaserStream SDK)

Opsi SDK

Kami menyediakan SDK resmi untuk beberapa bahasa pemrograman: Untuk bahasa lain atau implementasi khusus, Anda dapat langsung menggunakan file proto Yellowstone gRPC untuk menghasilkan klien gRPC bagi bahasa pilihan Anda.

Pemecahan Masalah / FAQ

J: Masalah performa pada koneksi LaserStream biasanya disebabkan oleh:
  • 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.
Men-debug Kelambatan Klien: Untuk membantu Anda men-debug klien, kami membuat alat untuk menguji bandwidth maksimum dari node Anda ke server Laserstream gRPC. Untuk menggunakannya, jalankan:
Output mengembalikan kapasitas jaringan maksimum antara server Anda dan server Laserstream. Minimal, Anda memerlukan 10MB/s untuk berlangganan semua data transaksi dan 80MB/s untuk berlangganan semua data akun. Kami menyarankan kapasitas setidaknya 2x dari yang diperlukan untuk performa optimal.
J: Pastikan kunci API dan endpoint Anda benar serta jaringan Anda mengizinkan koneksi gRPC keluar ke endpoint yang ditentukan. Periksa halaman status Helius untuk melihat insiden yang sedang berlangsung.
J: Periksa kembali operator logis (AND/OR) yang dijelaskan dalam bagian filter. Pastikan kunci publik sudah benar. Tinjau tingkat komitmen yang ditentukan dalam permintaan Anda.
J: Ya, Anda dapat menentukan konfigurasi filter di bawah beberapa kunci (misalnya, accounts, transactions) dalam objek SubscribeRequest yang sama.
J: Kami tidak mengimplementasikan grup konsumen. Sebagai gantinya, LaserStream memberikan hasil yang sama seperti yang dibutuhkan tim: melanjutkan, memutar ulang, dan keandalan multi-node tanpa lapisan koordinasi (beserta latensi/beban tambahan yang menyertainya). Kami berpendapat bahwa grup konsumen tidak diperlukan untuk sebagian besar beban kerja dan justru menambah latensi serta beban operasional. Sebagai contoh, satu koneksi LaserStream gRPC dapat menghasilkan hingga 10× data transaksi + akun Solana, sementara sebagian besar klien hanya berlangganan bagian kecil yang telah difilter. Penggunaan grup konsumen dalam kasus ini menghabiskan cadangan performa dan menambah titik kegagalan lainnya.
J: Secara default, LaserStream memotong pesan log transaksi menjadi 10 KB untuk meningkatkan kecepatan dan performa. Jika Anda memerlukan log lengkap, hubungkan ke endpoint khusus tanpa pemotongan — lihat Pemotongan Log untuk daftarnya.
J: Menyertakan bidang 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.