Skip to main content
Flag matchMints milik LaserStream memungkinkan langganan transaksi gRPC mencocokkan mint token dalam saldo token sebelum/sesudah transaksi selain kunci akunnya. Masukkan mint ke accountInclude, tetapkan matchMints: true, dan Anda akan menerima setiap transaksi yang menyentuh token tersebut: transfer, swap, mint-to, pembakaran, dan penutupan akun.
matchMints hanya tersedia di LaserStream gRPC. Fitur ini belum tersedia di LaserStream WebSocket.

Masalahnya: filter akun biasa melewatkan sebagian besar transfer token

Saat memantau token dengan accountInclude: [mint], Anda hanya mencocokkan transaksi jika pubkey mint muncul dalam kunci akun transaksi. Instruksi SPL Transfer klasik tidak pernah mereferensikan mint. Instruksi tersebut hanya menyebut akun token sumber, akun token tujuan, dan pemilik, sehingga filter akun biasa melewatkan operasi yang paling umum pada token apa pun. Hanya instruksi yang meneruskan mint secara langsung yang akan cocok, seperti MintTo, Burn, TransferChecked, dan swap yang akun programnya menyertakan mint. Satu-satunya solusi alternatif sebelumnya adalah melakukan streaming semua transaksi dan memeriksa sendiri saldo token setiap transaksi.

Cara kerja matchMints

Tetapkan matchMints: true pada filter transaksi, lalu LaserStream akan membuat kumpulan mint dari preTokenBalances dan postTokenBalances milik transaksi. Daftar accountInclude, accountExclude, dan accountRequired Anda kemudian dicocokkan dengan keduanya, yaitu kunci akun dan kumpulan mint tersebut. Mint memenuhi syarat jika akun token apa pun untuk mint tersebut muncul di salah satu daftar saldo, terlepas dari apakah saldonya berubah. Flag ini bersifat opsional, dan filter yang tidak menyertakannya akan berperilaku persis seperti sebelumnya. Karena itu, Anda dapat menambahkannya ke langganan yang sudah ada tanpa mengubah data yang telah diterima langganan tersebut. Mint SPL dan Token-2022 dapat digunakan karena kedua program mengisi saldo token sebelum/sesudah.

Semantik

Logika filter lainnya tidak berubah:
  • Predikat dalam satu filter bernama tetap digabungkan dengan AND (vote, failed, signature, dan daftar akun).
  • Beberapa filter bernama tetap digabungkan dengan OR.
  • Nilai dalam satu daftar menggunakan OR (kecuali accountRequired, yang mengharuskan semuanya cocok).
  • Transaksi tanpa saldo token kembali menggunakan pencocokan berdasarkan kunci saja. matchMints tidak pernah menambahkan transaksi yang tidak memiliki aktivitas token.
  • matchMints saja tidak membatasi stream. Anda tetap memerlukan setidaknya satu kunci atau mint dalam daftar akun (atau predikat pembatas lainnya) agar filter diterima.
LaserStream mencocokkan mint berdasarkan pubkey yang persis sama. Tidak ada mode “hanya saldo yang berubah” untuk mint, tidak seperti tokenAccounts: "balanceChanged".

Menggunakannya di LaserStream gRPC

Tambahkan matchMints: true ke filter transaksi dalam SubscribeRequest Anda dan masukkan mint ke accountInclude. Contoh ini melakukan streaming setiap transaksi USDC di mainnet:
Memerlukan helius-laserstream versi 0.8.5 atau yang lebih baru. Kolom ini juga diterima sebagai match_mints.
Jika Anda menggunakan klien gRPC mentah atau Yellowstone sebagai pengganti SDK, buat ulang dari proto Helius (laserstream-core-proto 11.3.0 atau yang lebih baru, atau .proto yang disertakan dalam repositori SDK). match_mints adalah kolom 32 dari SubscribeRequestFilterTransactions. Klien yang dihasilkan dari proto Triton upstream secara diam-diam menghapus kolom yang tidak dikenal, sehingga flag tidak berpengaruh sampai Anda membuat ulang klien tersebut. Lihat referensi Permintaan Berlangganan untuk setiap kolom filter transaksi.

Gabungkan dengan tokenAccounts untuk memantau satu token bagi satu dompet

matchMints dapat digabungkan dengan ekspansi tokenAccounts, sehingga satu filter dapat mencocokkan pemilik dompet dan mint secara bersamaan. Contoh ini melakukan streaming setiap perubahan pada saldo USDC milik satu dompet:
accountInclude ditambah tokenAccounts menemukan transaksi saat saldo token dompet berubah. accountRequired ditambah matchMints mempersempit hasil tersebut menjadi transaksi yang melibatkan USDC.

Membaca hasil yang cocok

Setelah transaksi cocok melalui mint, cari mint tersebut di meta.preTokenBalances[].mint dan meta.postTokenBalances[].mint. Untuk transfer biasa, mint umumnya tidak ada dalam kunci akun, jadi jangan mencarinya di sana. Bandingkan perbedaan preTokenBalances dengan postTokenBalances pada accountIndex yang sama untuk melihat jumlah token yang berpindah dan pemilik asal serta tujuannya. Panduan Pemantauan Transaksi membahas struktur transaksi secara mendetail.

Batasan dan catatan

  • Mint dimasukkan ke daftar accountInclude, accountExclude, dan accountRequired yang sama dengan kunci akun, sehingga mint diperhitungkan dalam batas paket per daftar yang sama. Tidak ada batas mint terpisah.
  • Biaya pencocokan tidak meningkat seiring jumlah mint yang Anda cantumkan. Performa untuk 100 mint dan 100.000 mint sama, dan pelanggan yang tidak menetapkan flag tidak dikenai biaya tambahan.
  • Pemutaran ulang historis mengikuti matchMints, sehingga langganan pemutaran ulang mengembalikan transaksi yang sama seperti yang akan dikembalikan stream langsung.
  • Jika Anda memasang filter terkompresi (cuckoo) ke langganan transaksi, matchMints juga akan menguji kumpulan mint terhadap filter tersebut, selain kunci akun.
  • matchMints aktif di semua wilayah LaserStream gRPC, baik mainnet maupun devnet. Saat ini, fitur tersebut belum tersedia di LaserStream WebSocket.
  • Versi minimum SDK: JavaScript/TypeScript helius-laserstream 0.8.5, Rust helius-laserstream 0.6.4, Go go/v0.3.0.

Terkait

Token Account (ATA) Filtering

Cocokkan transaksi yang menyentuh akun token milik suatu dompet

Transaction Monitoring

Strategi pemfilteran lengkap dan contoh yang dapat dijalankan melalui gRPC

Subscribe Request Reference

Setiap kolom filter transaksi, termasuk matchMints

Historical Replay

Isi ulang aktivitas token hingga 48 jam dengan filter yang sama