Skip to main content

Mengapa perlu bermigrasi?

Cara standar untuk mengambil riwayat transaksi suatu alamat di Solana memerlukan dua langkah: panggil getSignaturesForAddress untuk mencantumkan tanda tangan, lalu panggil getTransaction satu kali untuk setiap tanda tangan guna mengambil detailnya. Untuk 1.000 transaksi, diperlukan 1.001 permintaan HTTP. getTransactionsForAddress adalah metode RPC eksklusif Helius yang menggabungkan kedua langkah menjadi satu panggilan. Metode ini mengembalikan hingga 1.000 transaksi lengkap per permintaan, dengan pemfilteran, pengurutan dua arah, dan dukungan akun token yang tidak tersedia pada metode standar. Hasilnya: penggunaan kredit sekitar 10x lebih sedikit, perjalanan bolak-balik 1.000x lebih sedikit, serta tidak perlu batching sisi klien, penanganan batas laju, atau logika percobaan ulang untuk fan-out getTransaction.

Sebelum dan sesudah

Berikut adalah tugas yang sama — mengambil 1.000 transaksi terakhir untuk suatu alamat beserta detail lengkapnya — dengan kedua pola tersebut:
getTransactionsForAddress bukan bagian dari RPC Solana standar, sehingga @solana/web3.js tidak memiliki helper Connection untuk metode ini. Panggil metode tersebut dengan permintaan JSON-RPC mentah seperti yang ditunjukkan di atas — metode ini berfungsi pada endpoint Helius yang sama dengan lalu lintas RPC Anda lainnya.

Pemetaan parameter

Setiap opsi dari alur dua langkah lama memiliki padanan langsung. Sebagian besar nama tetap sama — hanya paginasi yang bekerja secara berbeda.

Dari getSignaturesForAddress

Dari getTransaction

Dua kemampuan sama sekali tidak memiliki padanan lama:
  • filters — persempit hasil berdasarkan blockTime, slot, status, tokenTransfer, atau tokenAccounts di sisi server, alih-alih mengambil semuanya dan memfilternya dalam kode Anda.
  • sortOrder: "asc" — hasil kronologis (yang terlama terlebih dahulu), yang tidak dapat dikembalikan oleh metode standar tanpa mengambil seluruh riwayat dan membalik urutannya.

Langkah migrasi

1

Confirm you're on a Helius endpoint

getTransactionsForAddress bersifat eksklusif untuk Helius. Metode ini berfungsi pada https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY (dan devnet) — endpoint yang sama dengan yang telah digunakan oleh panggilan Anda jika Anda merupakan pelanggan Helius. Tidak diperlukan perubahan API key atau paket.
2

Replace the two-step fetch with one call

Hapus panggilan getSignaturesForAddress dan perulangan getTransaction. Buat satu permintaan getTransactionsForAddress dengan transactionDetails: "full", serta gunakan kembali nilai encoding, maxSupportedTransactionVersion, dan commitment Anda seperti yang ditunjukkan dalam pemetaan parameter.Jika Anda hanya memerlukan tanda tangan (misalnya, untuk diteruskan ke pipeline yang sudah ada), gunakan transactionDetails: "signatures" sebagai gantinya — biayanya tetap 10 kredit per panggilan.
3

Update the response handling

Pembungkus respons berubah dalam tiga hal:
  • Hasil berada di result.data (sebuah array), bukan langsung di result.
  • Setiap entri mode lengkap adalah { slot, transactionIndex, blockTime, transaction, meta }. Objek transaction dan meta memiliki bentuk yang sama persis dengan hasil yang dikembalikan getTransaction, sehingga kode penguraian Anda dapat digunakan tanpa perubahan.
  • Entri mode tanda tangan cocok dengan keluaran getSignaturesForAddress (signature, slot, err, memo, blockTime, confirmationStatus), ditambah bidang transactionIndex baru.
Satu perbedaan perilaku yang perlu diperhatikan: dengan pola lama, panggilan getTransaction dapat mengembalikan null untuk suatu tanda tangan. Dengan getTransactionsForAddress, setiap entri dalam result.data merupakan transaksi lengkap — hapus penanganan null untuk detail yang tidak tersedia.
4

Replace signature-based pagination

Ganti perulangan kursor before dengan paginationToken:
Perulangan berakhir ketika paginationToken adalah null — Anda tidak perlu lagi membandingkan daftar tanda tangan atau melacak sendiri tanda tangan terakhir.Jika Anda menggunakan until untuk berhenti pada tanda tangan yang diketahui, gantilah dengan filters.signature: { gt: "KNOWN_SIGNATURE" }. Jika Anda menggunakannya untuk berhenti pada titik waktu tertentu, filters.blockTime atau filters.slot biasanya lebih sesuai.
5

Optional: enable complete token history

Pola lama sama sekali melewatkan aktivitas associated token account (ATA), kecuali Anda juga memanggil getTokenAccountsByOwner dan mengambil tanda tangan untuk setiap akun token. Untuk menyertakannya, tambahkan satu filter:
balanceChanged mengembalikan transaksi yang mereferensikan dompet atau mengubah saldo akun token apa pun yang dimilikinya, sekaligus memfilter spam. Lihat associated token account untuk opsi none/balanceChanged/all dan catatan khusus untuk periode sebelum 2022.
6

Verify against the old output

Untuk alamat contoh, ambil riwayat dengan kedua cara dan bandingkan kumpulan tanda tangannya. Ketika filters.tokenAccounts tidak ditetapkan (nilai default none), getTransactionsForAddress mengembalikan transaksi yang sama dengan getSignaturesForAddress untuk rentang yang sama. Kemudian lakukan deployment dan hapus jalur kode lama.

Perbedaan perilaku yang perlu ditinjau

Sebagian besar migrasi dapat dilakukan sebagai penggantian langsung, tetapi periksa hal-hal berikut sebelum merilisnya:
  • Commitment. processed tidak didukung; gunakan confirmed atau finalized. Jika kode lama Anda melakukan polling riwayat terbaru pada processed, beralihlah ke confirmed.
  • Pengukuran penggunaan. Respons transaksi lengkap berbiaya 10 kredit per 100 transaksi yang dikembalikan (minimum 10 kredit); respons yang hanya berisi tanda tangan berbiaya tetap 10 kredit. Pola lama berbiaya 1 kredit per panggilan — lebih murah per permintaan, tetapi jauh lebih mahal per transaksi yang diambil. Respons yang gagal tidak dikenai biaya. Lihat pengukuran penggunaan.
  • Dukungan jaringan. Mainnet memiliki retensi tanpa batas. Devnet didukung dengan retensi selama 2 minggu. Testnet tidak didukung.
  • Alamat yang dicadangkan. Sejumlah kecil alamat sistem (Vote Program, System Program, sysvar) dialihkan ke jalur arsip fallback atau mengembalikan hasil kosong. Jika Anda mengindeks alamat-alamat tersebut, tinjau batasan dan kasus khusus.
  • Beberapa alamat. Seperti alur lama, satu permintaan mencakup satu alamat. Kueri alamat secara paralel lalu gabungkan hasilnya; lihat beberapa alamat.

Pertanyaan umum

Apakah getTransactionsForAddress merupakan metode RPC Solana standar?

Tidak. Metode ini eksklusif untuk Helius dan tersedia di endpoint RPC Helius. RPC Solana standar dan penyedia lain hanya menawarkan getSignaturesForAddress dan getTransaction. Panggilan RPC Anda yang lain tidak terpengaruh — metode ini berada pada endpoint yang sama bersama seluruh cakupan RPC standar.

Apakah saya masih memerlukan getTransaction setelah bermigrasi?

Hanya untuk pencarian satu kali ketika Anda sudah memiliki tanda tangan tanpa konteks alamat, misalnya untuk memverifikasi transaksi tertentu yang ditempelkan oleh pengguna. Untuk semua riwayat berbasis alamat — backfill, pengindeksan, feed aktivitas dompet — getTransactionsForAddress menggantikan kedua metode tersebut.

Apakah metode ini berfungsi dengan @solana/web3.js?

Metode ini tidak tersedia dalam kelas Connection, tetapi dapat digunakan dengan klien HTTP apa pun melalui URL RPC Helius Anda. Gunakan fetch (atau padanannya dalam bahasa Anda) dengan isi JSON-RPC standar, seperti yang ditunjukkan dalam contoh di atas. Anda tetap dapat menggunakan Connection untuk semua hal lainnya.

Apakah metode ini akan mengembalikan transaksi yang sama dengan getSignaturesForAddress?

Ya. Dengan pengaturan default (filters.tokenAccounts: "none"), metode ini mengembalikan transaksi yang mereferensikan alamat yang dikueri — kumpulan yang sama dengan getSignaturesForAddress. Menetapkan tokenAccounts ke balanceChanged atau all akan mengembalikan lebih banyak hasil: aktivitas dari associated token account milik dompet juga ditambahkan, yang tidak dapat dilihat oleh metode standar.

Berapa biayanya dibandingkan dengan pola lama?

Mengambil 1.000 transaksi lengkap memerlukan 100 kredit dengan getTransactionsForAddress, dibandingkan dengan sekitar 1.001 kredit (dan 1.001 permintaan) menggunakan getSignaturesForAddress + getTransaction. Respons yang hanya berisi tanda tangan berbiaya tetap 10 kredit per panggilan. Lihat kredit Helius untuk harga lengkap.

Biarkan agen AI melakukan migrasi

Jika Anda menggunakan Claude Code, Cursor, atau agen pemrograman lainnya, tempelkan prompt di bawah ini ke sesi agen repositori Anda. Agen tersebut akan menemukan pola lama dalam basis kode Anda dan menulis ulang kode tersebut.
Prompt ini bersifat mandiri — agen tidak memerlukan akses ke halaman ini. Untuk dokumentasi siap pakai bagi agen, pencarian MCP, dan keterampilan, lihat Helius untuk agen AI.

Langkah berikutnya

getTransactionsForAddress guide

Tutorial lengkap yang membahas filter, pengurutan, paginasi, dan akun token.

API reference

Skema permintaan dan respons lengkap.

Indexing guide

Gunakan getTransactionsForAddress untuk melakukan backfill dan menyinkronkan indeks Solana.

Historical data overview

Bandingkan semua metode data historis Solana.