Panduan Memulai Cepat
1
Get Access
Parsed Streams tersedia pada semua paket dengan biaya 1 kredit per peristiwa yang dikirimkan. Dapatkan kunci API Anda dari Dasbor Helius, lalu hubungkan ke endpoint Gatekeeper di
wss://beta.helius-rpc.com, host yang sama dengan lalu lintas RPC dan WebSocket Helius.Lakukan autentikasi dengan kunci API proyek Anda, yang diteruskan sebagai parameter kueri api-key (atau header x-api-key).2
Connect
wscat
3
Subscribe with a Filter
Kirim
parsedTransactionSubscribe dengan filter dan opsi opsional:result dalam respons adalah bilangan bulat ID langganan:4
Read a Notification
Setiap transaksi yang cocok diterima sebagai
parsedTransactionNotification yang telah didekode, dengan matchedIndexes yang menunjuk ke instruksi yang cocok dengan filter Anda. Lihat Notifikasi untuk struktur lengkapnya.5
Unsubscribe
Panduan
Track Jupiter Swaps
Gunakan
describeProgram untuk membuat filter yang dapat Anda percayai sebelum berlangganan.Track Pump.fun Mints
Listener yang aman terhadap koneksi ulang dan mencatat setiap penerapan token Pump.fun baru.
Handling Reconnects
Tangani batas waktu saat tidak aktif dan penerapan, lalu lakukan backfill secara tepat untuk data yang terlewat.
Referensi Protokol
Parsed Streams menggunakan JSON-RPC 2.0 melalui satu koneksi WebSocket. Setiap permintaan menerima respons denganid yang sama. Langganan kemudian mengirim pesan parsedTransactionNotification hingga Anda berhenti berlangganan atau memutuskan koneksi.
Berlangganan
KirimparsedTransactionSubscribe dengan filter dan opsi opsional. result dalam respons adalah bilangan bulat ID langganan.
Request
Response
Kolom filter
Setidaknya salah satu dariprograms atau accounts.include wajib diisi. Kolom yang Anda tetapkan digabungkan dengan AND: sebuah instruksi harus memenuhi semuanya agar dianggap cocok.
string[]
ID program yang akan dicocokkan (alamat base58, bukan nama). Sebuah instruksi cocok jika programnya ada dalam daftar ini. OR berlaku di dalam daftar.
string[]
Nama instruksi yang telah didekode, seperti
route. Nama pertama-tama dicocokkan secara persis, lalu menggunakan pencocokan cadangan yang tidak peka terhadap kapitalisasi dan pemisah. Karena itu, sharedAccountsRoute juga cocok dengan nama wire shared_accounts_route. OR berlaku di dalam daftar. Hanya instruksi yang namanya dapat diidentifikasi oleh katalog yang bisa cocok. Oleh karena itu, ambil nama dari describeProgram.string[]
Alamat akun. Sebuah instruksi cocok jika salah satu alamat ini muncul dalam daftar akunnya. OR berlaku di dalam daftar. Berlaku untuk setiap instruksi, baik yang didekode maupun tidak. ID program itu sendiri tidak dihitung sebagai akun di sini.
object
Pemetaan nama peran akun yang telah didekode ke alamat, seperti
{ "user_transfer_authority": "<pubkey>" }. Setiap entri harus terpenuhi (AND di seluruh entri), dan instruksi harus didekode agar aturan ini dapat diterapkan. Nama peran dicocokkan secara persis, tanpa penyeragaman kapitalisasi. Jadi, salin nama dari describeProgram dan jangan menebaknya.boolean
default:"false"
Sertakan instruksi dari transaksi yang gagal.
boolean
default:"true"
Instruksi internal (CPI) dapat dicocokkan. Tetapkan
false untuk hanya mencocokkan instruksi tingkat teratas.-32602 dan tidak diabaikan secara diam-diam. Dengan demikian, kesalahan ketik akan langsung menghasilkan kegagalan, bukan filter yang tidak cocok dengan apa pun.
Opsi
Parameter kedua bersifat opsional.string
default:"confirmed"
Hanya
confirmed yang didukung.string
default:"full"
Data yang dibawa setiap notifikasi.
full: seluruh transaksi, setiap instruksi, serta matchedIndexes yang menunjuk ke kecocokan filter. matched: hanya instruksi yang cocok, tanpa daftar indeks. raw: hanya instruksi yang cocok, masing-masing disederhanakan menjadi posisinya, programId, dan blob data base58, tanpa kolom yang didekode dan tanpa larik accountKeys. Gunakan matched ketika bandwidth lebih penting daripada konteks (ukuran payload lengkap rata-rata sekitar tiga kali lebih besar), dan raw ketika Anda mendekode sendiri data instruksi dan hanya memerlukan byte-nya.Notifikasi
Satu notifikasi per transaksi yang cocok untuk setiap langganan. Dengandetails: "full" default:
transactionadalah konteks lengkap.feedinyatakan dalam lamport.accountKeysadalah daftar kunci lengkap, termasuk kunci yang dimuat dari tabel pencarian alamat, dalam urutan yang sama seperti yang dilaporkan oleh chain.feePayerselalu bernilaiaccountKeys[0].errormemuat kesalahan transaksi sebagai JSON terstruktur, misalnya{"InstructionError": [2, {"Custom": 6001}]}, ketikastatusbernilai"error".summarymemiliki satu struktur yang sama di setiap kemunculannya:type(sepertiswapatautransfer),descriptionyang mudah dibaca manusia, serta payloadparsedDataterstruktur ketika parser mengenali tindakan tersebut — untuk swap: protokol, jumlah, dan mint.transaction.summarymenandai tindakan utama transaksi; setiap instruksi yang dikenali memilikisummarysendiri dengan struktur yang sama. Untuk mengumpulkan setiap swap dalam transaksi, iterasikaninstructionsdan bacasummary.parsedDataketikasummary.typebernilai"swap".nativeTransfersdantokenTransfersmencantumkan perpindahan SOL dan token yang diekstrak parser dari seluruh transaksi, dengan struktur yang sama seperti yang dikembalikan API Parsed Events. Dengan demikian, konsumen stream dan API dapat menggunakan kode pemrosesan yang sama. Keduanya selalu ada, tetapi mungkin kosong.instructionsberisi setiap instruksi transaksi dalam urutan eksekusi: setiap instruksi tingkat teratas diikuti instruksi internalnya. Setiap entri memiliki posisinya sendiri:instructionIndexmenunjukkan instruksi tingkat teratas yang menaunginya (dimulai dari 0),innerInstructionIndexmenunjukkan posisinya di antara panggilan internal instruksi tersebut (nullberarti entri tersebut adalah instruksi tingkat teratas itu sendiri), danstackHeightadalah kedalaman panggilan (1 untuk tingkat teratas). Gunakan nilai-nilai ini, bukan posisi lariknya.matchedIndexesadalah indeks ke dalaminstructionsyang menunjukkan instruksi mana yang benar-benar cocok dengan filter Anda. Instruksi lainnya disertakan sebagai konteks. Dengandetails: "matched", larik hanya berisi instruksi yang cocok danmatchedIndexestidak ada.- Nama
decodedmenggunakan snake_case (in_amount,user_transfer_authority), sebagaimana dipublikasikan dalam IDL program. Argumen bilangan bulat biasanya berupa string ("1000000") karena nilai u64 tidak dapat ditampung dalam angka JavaScript. blockTimesaat ini selalu bernilainull. Jangan mengandalkannya.- Dalam satu transaksi, Anda dapat menemukan campuran instruksi yang didekode dan tidak didekode: swap yang sepenuhnya didekode dapat muncul di samping memo yang tidak dikenali. Buat percabangan berdasarkan
decoded: ketika nilainyanull, instruksi tersebut membawarawData(byte base58) danrawAccounts(daftar pubkey biasa) sebagai gantinya. Dengan demikian, Anda selalu memiliki data yang dapat diproses.
details: "raw", value menyusut menjadi metadata transaksi dan blob. accountKeys, nativeTransfers, tokenTransfers, matchedIndexes, dan semua kolom yang didekode dihapus (summary transaksi tetap disertakan); setiap instruksi yang cocok berisi posisinya, programnya, dan byte data dalam base58, persis seperti yang muncul pada chain (tetap ada bahkan untuk instruksi yang sebenarnya dapat didekode oleh katalog):
Berhenti Berlangganan
true jika langganan tersebut ada dan merupakan milik Anda. Notifikasi langsung berhenti. Menutup koneksi akan menghapus semua langganannya.
Penemuan
Kegagalan paling umum pada API semacam ini adalah filter yang valid tetapi tidak cocok dengan apa pun, biasanya karena nama instruksi atau peran ditebak.describeProgram mencegah hal tersebut dengan mengembalikan nama persis yang dibandingkan oleh pencocok. Saat ini, metode tersebut hanya tersedia pada wss://fs-beta.helius-rpc.com/?api-key=<API_KEY>. Jadi, kirim melalui koneksi terpisah dari langganan Anda:
Request
Response
jupiter, dan pencarian berdasarkan nama dapat mengarah ke entri yang lebih lama). Jika Anda melakukan pencarian berdasarkan nama, pastikan result.id adalah program yang ingin Anda langgani.
Alur yang disarankan: gunakan describeProgram untuk mendapatkan nama instruksi dan peran yang persis, buat filter dengan nama tersebut, lalu berlangganan. Panduan Melacak Swap Jupiter menjelaskan proses ini dari awal hingga akhir.
Batas
Kesalahan
Kesalahan mengikuti JSON-RPC 2.0:{ "error": { "code": <int>, "message": "<text>" }, "id": <id> }. Pesan menjelaskan secara persis apa yang salah dan lokasinya.
Koneksi juga dapat ditutup dengan kode penutupan WebSocket — lihat Menangani Koneksi Ulang untuk mengetahui arti setiap kode dan cara memulihkan koneksi.