Langsung ke konten utama
Gunakan Sender Max (tip minimum: 0,001 SOL) untuk menindaklanjuti Preconfirmations. Preconfirmation hanya memberikan manfaat jika transaksi Anda masuk lebih dahulu — Sender Max adalah cara tercepat untuk melakukannya. Bangun dengan Sender Max sejak awal untuk mendapatkan manfaat penuh dari Preconfirmations.

Apa itu preconfSubscribe?

preconfSubscribe adalah metode WebSocket Helius yang melakukan streaming Preconfirmations — transaksi yang dikirim sebelum dikumpulkan ke dalam entri dan dipecah menjadi shred. Ini adalah sinyal transaksi dengan latensi terendah yang ditawarkan Helius. Satu langganan mengirimkan preconfirmation Helius, yang dipancarkan tepat saat leader mengeksekusi transaksi dan menyertakan status eksekusinya, serta preconfirmation BAM dari validator yang menjalankan klien Block Assembly Marketplace milik Jito, yang dipancarkan saat validator berkomitmen untuk mengeksekusi transaksi. Akses tersedia pada semua paket berbayar — lihat Harga.
Streaming ini tidak berlangsung terus-menerus. Cakupan meningkat sesuai proporsi stake yang diteruskan ke Helius atau menjalankan BAM, jadi mungkin ada slot tanpa pesan — tangani jeda ini dengan baik. Lihat Cakupan.
preconfSubscribe dilayani dari wss://beta.helius-rpc.com — endpoint Gatekeeper Helius — bukan mainnet.helius-rpc.com. Lakukan autentikasi dengan API key Anda sebagai parameter kueri.
Nama host beta merujuk pada peluncuran Gatekeeper, bukan tingkat kematangan Preconfirmations. Preconfirmations pertama kali diluncurkan pada endpoint Gatekeeper; endpoint ini akan menjadi endpoint standar saat Helius memigrasikan lalu lintas ke Gatekeeper.

Berlangganan

Kirim permintaan JSON-RPC dengan metode preconfSubscribe. Server merespons dengan ID langganan, lalu melakukan streaming notifikasi untuk setiap transaksi. Teruskan filter opsional sebagai elemen params pertama agar hanya menerima transaksi yang cocok; hilangkan params untuk menerima seluruh streaming dari Helius dan BAM.

Respons Langganan

Simpan result — ini adalah ID langganan yang Anda gunakan untuk berhenti berlangganan. Setelah konfirmasi ini, notifikasi dialirkan sebagai frame biner (lihat di bawah).

Pemfilteran

Secara default, preconfSubscribe melakukan streaming setiap transaksi dari kedua sumber. Untuk mempersempit streaming, teruskan objek filter sebagai elemen pertama params. Pemfilteran dilakukan di sisi server, sehingga Anda hanya membayar dan menerima transaksi yang Anda perlukan.
Setiap bidang bersifat opsional — bidang yang tidak disertakan berarti “tanpa batasan” untuk predikat tersebut, sehingga filter kosong (atau tanpa params) cocok dengan setiap transaksi dari kedua sumber. Aturan filter:
  • Semua predikat digabungkan dengan AND dan dievaluasi dalam urutan includeSource → failed → regionInclude → signatures → accountExclude → accountRequired → accountInclude → signerExclude → signerInclude → instructions.
  • Prekonfirmasi BAM dengan status yang tidak diketahui mengabaikan filter failed. Prekonfirmasi Helius dengan status yang tidak diketahui tidak cocok dengan filter failed yang ditentukan secara eksplisit.
  • includeSource harus berupa array yang hanya berisi helius dan bam. Nilai yang tidak valid mengembalikan kesalahan JSON-RPC -32602 (parameter tidak valid).
  • Akun merupakan kunci publik yang dikodekan dengan base58. Nilai yang tidak valid mengembalikan kesalahan JSON-RPC -32602 (parameter tidak valid).
  • Setiap daftar akun atau penanda tangan dibatasi hingga 10.000 entri. signatures dibatasi hingga 1.000 entri.
Filter includeBam yang sudah tidak digunakan tetap tersedia untuk kompatibilitas mundur. includeBam: false sama dengan includeSource: ["helius"]. includeBam: true atau bidang yang dihilangkan akan memilih kedua sumber. Jangan kirim includeBam dan includeSource secara bersamaan.
Untuk hanya menerima prekonfirmasi Helius:

Pemfilteran penanda tangan dan tanda tangan

Gunakan signerInclude untuk mencocokkan transaksi yang ditandatangani oleh akun tertentu. Gunakan signerExclude untuk menghapus transaksi yang ditandatangani oleh salah satu akun dalam daftar. Akun yang dirujuk tidak dianggap sebagai penanda tangan. Gunakan signatures jika Anda sudah mengetahui transaksi yang ingin dilacak. Filter ini mencocokkan tanda tangan transaksi pertama, yaitu tanda tangan yang digunakan oleh metode RPC Solana. Filter tidak dapat diubah setelah Anda berlangganan, jadi buat langganan baru untuk melacak tanda tangan baru.

Pemfilteran instruksi

Gunakan instructions untuk mencocokkan instruksi tingkat atas berdasarkan program dan data instruksi. Setiap filter instruksi mendukung bidang berikut: Setiap entri memcmp menerima pengodean base58, base64, atau hex. Nilai default-nya adalah base58. Transaksi cocok jika satu instruksi tingkat atas memenuhi setiap kondisi dalam salah satu filter instruksi. Permintaan berikut mencocokkan instruksi buy pump.fun berdasarkan diskriminator Anchor-nya:
Filter ini hanya memeriksa instruksi tingkat atas. Filter tidak dapat mencocokkan instruksi yang dipanggil melalui pemanggilan lintas program (CPI) karena instruksi tersebut belum ada sebelum eksekusi. Anda dapat menyediakan hingga 16 filter instruksi dan empat entri memcmp per filter instruksi. Setiap nilai memcmp harus didekodekan menjadi 1–128 bita. Offset akhir memcmp dan dataSize tidak boleh melebihi 4.096 bita.

Resolusi tabel pencarian alamat (ALT)

Filter akun mencocokkan lebih dari sekadar kunci akun statis transaksi — Helius menyelesaikan tabel pencarian alamat v0 di sisi server, sehingga accountInclude, accountExclude, dan accountRequired juga mencocokkan akun yang dimuat transaksi melalui ALT. Artinya, Anda dapat memfilter berdasarkan akun apa pun yang disentuh transaksi, bahkan jika akun tersebut hanya muncul di balik tabel pencarian — Anda tidak perlu memelihara pemetaan ALT atau menyelesaikan tabel sendiri. Cukup teruskan kunci publik akun dan Helius akan menangani resolusinya sebelum filter diterapkan.

Pemfilteran lokasi

Gunakan regionInclude untuk hanya menerima transaksi yang berasal dari wilayah tertentu. Teruskan satu atau beberapa kode wilayah; transaksi akan lolos jika wilayah asalnya cocok dengan salah satunya.
Wilayah asal bergantung pada sumber. Untuk prekonfirmasi Helius, wilayah asal adalah wilayah Helius yang menerima transaksi. Untuk prekonfirmasi BAM, wilayah asal adalah endpoint BAM regional yang memancarkan prekonfirmasi, bukan tempat Helius menerimanya. Endpoint BAM di Singapura dan Dallas dipetakan ke sgp dan dal. Kode wilayah yang valid:
Saat regionInclude ditetapkan, transaksi yang tidak membawa informasi wilayah akan dibuang. Kode wilayah yang tidak dikenali mengembalikan kesalahan JSON-RPC -32602 (parameter tidak valid).

Payload notifikasi

Notifikasi dikirim sebagai frame WebSocket biner (bukan JSON). Prekonfirmasi Helius dan BAM menggunakan tata letak yang sama. Setiap frame adalah tata letak bita terkemas yang membawa satu transaksi: Payload tidak memiliki bidang sumber. Jangan menyimpulkan asal BAM dari tx_index = 0 karena sumber lain juga dapat melaporkan 0.

Membedakan kedua sumber

Karena tidak ada bidang sumber, Anda tidak dapat memberi label Helius atau BAM pada pesan sembarang. Bita status menyediakan pengklasifikasi satu arah:
  • status adalah 0 atau 1 — pesan tersebut merupakan prekonfirmasi Helius dan transaksi telah dieksekusi. BAM tidak pernah melaporkan nilai ini.
  • status adalah 2 — sumbernya ambigu: dapat berupa prekonfirmasi BAM atau prekonfirmasi Helius yang status eksekusinya tidak tersedia.
Tidak ada bidang lain yang dapat membedakannya. ID urutan dan posisi bundel BAM tidak dibawa pada stream ini, sehingga tidak ada metadata pengurutan BAM yang dapat digunakan sebagai acuan, dan regionInclude merupakan filter langganan, bukan bidang payload, sehingga tidak dapat dibaca per pesan. Jika Anda memerlukan setiap pesan dalam stream untuk membawa jenis bukti yang sama, tetapkan includeSource: ["helius"] atau includeSource: ["bam"]. Stream khusus Helius berisi prekonfirmasi yang dipancarkan saat eksekusi pemimpin.
Selalu baca dan periksa bita version terlebih dahulu. Nilainya saat ini adalah 1. Jika Helius perlu memperbarui format payload, versinya akan bertambah — buat percabangan berdasarkan versi tersebut agar dekoder Anda tetap berfungsi saat skema berubah.
Prekonfirmasi adalah sinyal awal, bukan jaminan. Transaksi belum masuk ke onchain dan masih dapat dibuang — dan status eksekusi prekonfirmasi Helius mencerminkan hasil lokal pemimpin, yang belum final hingga blok dikonfirmasi. Konfirmasikan bahwa transaksi sudah masuk melalui pemeriksaan commitment standar sebelum menganggapnya final.

Mendekode transaksi

Bita transaksi diteruskan persis seperti yang diserialisasi oleh validator, dalam pengodean wire standar untuk versi transaksi tersebut. Transaksi lama dan v0 menggunakan tata letak tanda tangan terlebih dahulu yang dihasilkan bincode. Transaksi v1 (SIMD-0385) menggunakan tata letak pesan terlebih dahulu dengan tanda tangan di bagian akhir, sehingga bincode gagal pada payload v1. Gunakan dekoder yang menangani setiap versi:
  • Rust: agave-transaction-view mengurai transaksi lama, v0, dan v1 secara langsung tanpa salinan perantara. Ini adalah opsi yang direkomendasikan. wincode, serializer kompatibel bincode yang digunakan oleh SDK Solana saat ini, juga mendekode v1 menjadi VersionedTransaction.
  • JavaScript / TypeScript: pastikan versi pustaka Anda mendukung transaksi v1. Implementasi VersionedTransaction.deserialize yang lebih lama hanya menangani transaksi lama dan v0. Gunakan @solana/kit 8.0+ atau @solana/web3.js v3. Lihat Dukungan transaksi v1.

Notifikasi duplikat

Prekonfirmasi Helius dan BAM dideduplikasi per sumber, bukan antar-sumber. Sebagian kecil transaksi mencapai Helius melalui keduanya, sehingga Anda dapat menerima tanda tangan yang sama dua kali, dan kedua salinan tersebut mungkin melaporkan slot yang berbeda. Lakukan deduplikasi berdasarkan tanda tangan di klien dan buat tindakan yang dipicu transaksi bersifat idempoten agar notifikasi kedua tidak menjalankan tindakan yang sama dua kali. Konfirmasikan eksekusi dan bahwa transaksi sudah masuk melalui pemeriksaan commitment standar.

Contoh

Berhenti berlangganan

Untuk berhenti menerima notifikasi, panggil preconfUnsubscribe dengan ID langganan yang dikembalikan dari preconfSubscribe.

Harga

Preconfirmations tersedia pada semua paket berbayar: Developer, Business, Professional, dan Enterprise. Paket gratis tidak memenuhi syarat. Lihat Kredit untuk detailnya. Slot tanpa pesan yang dikirimkan tidak dikenai kredit, meskipun slot tersebut memiliki cakupan preconfirmation. Jika suatu slot mengirimkan setidaknya satu pesan, setiap langganan preconfSubscribe yang terbuka akan ditagih sebesar nilai yang lebih tinggi antara 300 kredit atau 10 kredit per pesan yang dikirimkan. Slot yang tidak tercakup tidak dikenai biaya. Lihat Harga untuk kelayakan penagihan berdasarkan sumber dan wilayah. Setiap langganan serentak ditagih secara terpisah saat menerima setidaknya satu pesan. Tutup langganan yang tidak lagi Anda perlukan dengan preconfUnsubscribe. Dengan includeSource: ["helius"], slot tercakup khusus BAM dikecualikan dari penagihan. Saat regionInclude ditetapkan, slot tercakup di luar wilayah yang dipilih tidak dikenai biaya untuk langganan tersebut; slot yang cocok hanya ditagih jika langganan menerima setidaknya satu pesan. Penagihan dilakukan per pesan, bukan per tanda tangan unik. Transaksi yang dikirimkan oleh Helius dan BAM dihitung dua kali. Tetapkan includeSource: ["helius"] jika Anda hanya menginginkan prekonfirmasi Helius.
Untuk mengendalikan biaya, gabungkan filter akun ke dalam satu langganan jika memungkinkan, gunakan regionInclude untuk membatasi penagihan ke wilayah yang Anda perlukan, tetapkan includeSource: ["helius"] jika Anda tidak memerlukan BAM, dan pantau kredit di Dasbor Helius.
Preconfirmations adalah produk baru dan harganya dapat berubah.

Terkait

Preconfirmations Overview

Penjelasan tentang Preconfirmations dan posisinya dalam alur validator.

transactionSubscribe

Lakukan streaming transaksi dengan tingkat commitment confirmed menggunakan pemfilteran yang lengkap.

preconfSubscribe API reference

Parameter permintaan, bidang filter, dan tata letak notifikasi biner.