Langsung ke konten utama
Status akun historis masih dalam versi Beta. Parameter, harga, format respons, dan cakupan data dapat berubah.

Apa itu status akun historis?

Metode RPC Solana standar seperti getAccountInfo dan getTokenAccountsByOwner hanya mengembalikan status akun saat ini. Validator hanya menyimpan versi terbaru dari setiap akun, sehingga setiap penulisan menggantikan penulisan sebelumnya. Riwayat transaksi tidak mengisi kekosongan tersebut: getTransaction dan getBlock mengembalikan instruksi, log, dan perubahan saldo, bukan data akun yang ditulis oleh program. Metode akun historis Helius mengembalikan akun sebagaimana adanya pada slot sebelumnya, atau tepat setelah transaksi tertentu dalam slot tersebut. Karena Anda dapat membaca status di antara dua transaksi dalam slot yang sama, Anda dapat melihat secara tepat perubahan yang dibuat oleh satu transaksi, bahkan ketika akun ditulis berkali-kali dalam satu slot. Gunakan metode ini untuk:
  • Memeriksa saldo token dompet pada suatu titik waktu untuk audit, akuntansi, atau pelaporan pajak
  • Men-debug transaksi dengan membaca akun yang disentuhnya tepat sebelum dan sesudah transaksi dijalankan
  • Membaca akun protokol, seperti pool, vault, atau oracle, pada slot sebelumnya tanpa memutar ulang ledger sendiri
Metode RPC ini eksklusif untuk Helius. Metode tersebut bukan bagian dari RPC Solana standar.

Metode mana yang harus saya gunakan?

Keduanya menerima tiga parameter yang sama: alamat, objek kueri yang memilih posisi dalam riwayat, dan objek konfigurasi.

Ketersediaan dan harga

  • Paket: Paket Business dan yang lebih tinggi.
  • Biaya: 0 kredit per panggilan selama beta (harga dapat berubah).
  • Batas laju: getHistoricalAccountInfo mengizinkan 100 permintaan per detik, dengan burst maksimum 100. getHistoricalTokenAccountsByOwner mengizinkan 10 permintaan per detik, dengan burst maksimum 10. Batas ini terpisah dari batas laju RPC paket Anda, dan permintaan yang melampauinya akan menghasilkan HTTP 429. Lihat batas laju.
  • Jaringan: Hanya Mainnet. Panggil metode tersebut pada endpoint mainnet standar, https://mainnet.helius-rpc.com, atau endpoint Gatekeeper, https://beta.helius-rpc.com. Devnet menghasilkan galat -32601.

Cakupan data

Riwayat tersedia mulai dari slot 444,959,999 (7 September 2026). Itu adalah slot terakhir epoch 1029, sehingga slot tersebut menyimpan status pada awal epoch 1030. Permintaan untuk slot sebelumnya menghasilkan galat -32018 (“Riwayat akun tidak tersedia”).

Memilih posisi dalam riwayat

Parameter kedua adalah objek kueri dengan dua kolom opsional, slot dan transactionIndex: transactionIndex memerlukan slot. Penulisan nontransaksi, seperti reward epoch, diterapkan pada akhir slot. Kueri dengan transactionIndex tidak pernah menyertakannya, bahkan untuk transaksi terakhir dalam slot. Untuk menyertakannya, kueri slot tanpa transactionIndex.

Membaca status sebelum dan sesudah transaksi

Untuk memeriksa perubahan yang dibuat transaksi, baca akun dua kali:
  • Setelah transaksi: kueri slot dan transactionIndex milik transaksi tersebut.
  • Sebelum transaksi: kueri slot yang sama dengan transactionIndex dikurangi 1. Jika transaksi tersebut merupakan transaksi pertama dalam slotnya (indeks 0), kueri slot sebelumnya tanpa transactionIndex.
getTransactionsForAddress mengembalikan slot dan transactionIndex untuk setiap transaksi, sehingga Anda dapat menemukan posisi transaksi di sana dan meneruskannya langsung ke metode ini.

Memahami lastUpdatedAt

Setiap akun yang dikembalikan menyertakan lastUpdatedAt, yaitu posisi penulisan yang menghasilkan status yang Anda terima:
  • slot dan transactionIndex menunjuk ke penulisan terakhir pada atau sebelum posisi yang Anda kueri. Dalam contoh di atas, kueri untuk slot 445,000,000 mengembalikan status yang terakhir ditulis oleh transaksi pada indeks 700 di slot 444,999,837.
  • transactionIndex: null berarti penulisan terjadi di luar transaksi, seperti reward epoch.
  • slot: 444959999 dengan transactionIndex: null berarti akun belum berubah sejak awal cakupan riwayat. Ini tidak berarti akun ditulis dalam slot tersebut.

Arti nilai null

value bernilai null ketika akun tidak ada pada posisi yang Anda kueri. Akun tersebut mungkin belum dibuat atau sudah ditutup.
  • Respons null tidak memiliki lastUpdatedAt, sehingga respons tersebut tidak memberi tahu kapan akun dibuat atau ditutup. Untuk menemukan transaksi tersebut, gunakan getTransactionsForAddress.
  • Alamat yang tidak pernah ada juga mengembalikan null, bukan galat.
  • Slot sebelum cakupan riwayat menghasilkan galat -32018 untuk setiap alamat, baik akun tersebut pernah ada maupun tidak.

Menelusuri mundur riwayat akun

Gunakan lastUpdatedAt sebagai kursor untuk mencantumkan setiap status yang pernah dimiliki akun, dimulai dari yang terbaru. Setelah setiap pembacaan, kueri posisi tepat sebelum penulisan yang Anda terima: Berhenti ketika value bernilai null, yang berarti penulisan yang baru saja Anda lewati telah membuat akun tersebut. Berhenti juga ketika lastUpdatedAt.slot mencapai 444,959,999, yaitu awal cakupan riwayat.
  • Akun yang sekarang sudah ditutup mengembalikan null pada slot terbaru. Berikan posisi start dari saat akun masih ada.
  • Penulisan nontransaksi mundur ke slot sebelumnya. Jika akun yang sama juga ditulis oleh transaksi pada awal slot tersebut, penelusuran akan melewati status itu.
  • Untuk menelusuri maju dalam waktu, cantumkan transaksi akun dari yang paling lama terlebih dahulu dengan getTransactionsForAddress dan sortOrder: "asc". Kemudian baca status pada slot dan transactionIndex setiap transaksi.

Konteks respons

context.slot dalam setiap respons adalah slot terbaru yang telah diindeks Helius saat melayani permintaan. Itu bukan slot yang Anda kueri. Gunakan slot dalam permintaan Anda, atau lastUpdatedAt, untuk memahami data yang Anda terima.

Melakukan paginasi secara konsisten

getHistoricalTokenAccountsByOwner mengembalikan hasil satu halaman pada satu waktu. Setiap respons menyertakan value.accounts dan value.paginationKey.
  • Kirim kembali paginationKey dalam objek konfigurasi untuk mengambil halaman berikutnya.
  • Berhenti hanya ketika paginationKey bernilai null. Sebuah halaman dapat memiliki sedikit hasil, atau kosong, tetapi masih memiliki hasil lainnya setelah halaman tersebut.
  • Tetapkan slot yang sama di setiap halaman. Jika Anda menghilangkan slot, setiap halaman akan membaca slot terbaru yang telah diindeks, dan halaman Anda dapat berasal dari titik waktu yang berbeda.
  • Atur limit antara 1 dan 5.000. Nilai default-nya adalah 5.000.

Enkode dan data yang diurai

  • Enkode yang didukung adalah base64 (default), base64+zstd, dan jsonParsed. base58 dan binary tidak didukung.
  • Akun token jsonParsed menggunakan jumlah desimal mint pada posisi yang dikueri, sehingga jumlahnya tetap benar meskipun mint telah berubah sejak saat itu. Jika mint tidak dapat dibaca pada posisi tersebut, akun akan kembali menggunakan base64.
  • dataSlice berfungsi dengan cara yang sama seperti dalam getAccountInfo.

Komitmen

commitment menerima finalized (default) dan confirmed. processed tidak didukung. slot yang lebih baru daripada yang diizinkan oleh komitmen yang diminta menghasilkan galat -32004.

Galat

Pertanyaan umum

Bagaimana cara mendapatkan status akun Solana pada slot tertentu?

Panggil getHistoricalAccountInfo dengan alamat dan { "slot": S }. Metode ini mengembalikan akun sebagaimana adanya pada akhir slot S, dalam format yang sama seperti getAccountInfo.

Dapatkah saya membaca akun di antara dua transaksi dalam slot yang sama?

Ya. Tambahkan transactionIndex ke kueri untuk mendapatkan status akun tepat setelah transaksi tersebut dijalankan. Lihat Membaca status sebelum dan sesudah transaksi.

Seberapa jauh ke belakang saya dapat melakukan kueri?

Riwayat dimulai pada slot 444,959,999, tanggal 7 September 2026. Slot sebelumnya menghasilkan galat -32018.

Paket mana yang menyertakan metode akun historis?

Paket Business dan yang lebih tinggi. Panggilan dikenai biaya 0 kredit selama periode beta; harga dapat berubah. Metode ini hanya tersedia di mainnet.

Berapa batas lajunya?

getHistoricalAccountInfo mengizinkan 100 permintaan per detik, dan getHistoricalTokenAccountsByOwner mengizinkan 10 permintaan per detik. Kedua batas tersebut terpisah dari batas laju RPC paket Anda. Lihat Ketersediaan dan harga.

Bagaimana cara mendapatkan setiap status akun sebelumnya?

Mundur dari satu penulisan ke penulisan sebelumnya menggunakan lastUpdatedAt. Lihat Menelusuri mundur riwayat akun.

Apakah saya memerlukan SDK baru?

Tidak. Ini adalah metode JSON-RPC, sehingga klien HTTP apa pun dapat digunakan. Pustaka klien Solana standar tidak menyertakannya, jadi kirim permintaan secara langsung, seperti dalam contoh di atas.

Langkah berikutnya

getHistoricalAccountInfo

Baca satu akun pada slot atau transaksi sebelumnya

getHistoricalTokenAccountsByOwner

Cantumkan akun token dompet pada slot sebelumnya

getTransactionsForAddress

Temukan slot dan transactionIndex dari transaksi yang ingin Anda periksa

Historical data overview

Riwayat transaksi, transfer, dan metode arsip lainnya