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 sepertigetAccountInfo 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 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:
getHistoricalAccountInfomengizinkan 100 permintaan per detik, dengan burst maksimum 100.getHistoricalTokenAccountsByOwnermengizinkan 10 permintaan per detik, dengan burst maksimum 10. Batas ini terpisah dari batas laju RPC paket Anda, dan permintaan yang melampauinya akan menghasilkan HTTP429. 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
slotdantransactionIndexmilik transaksi tersebut. - Sebelum transaksi: kueri
slotyang sama dengantransactionIndexdikurangi 1. Jika transaksi tersebut merupakan transaksi pertama dalam slotnya (indeks 0), kueri slot sebelumnya tanpatransactionIndex.
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 menyertakanlastUpdatedAt, yaitu posisi penulisan yang menghasilkan status yang Anda terima:
slotdantransactionIndexmenunjuk 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: nullberarti penulisan terjadi di luar transaksi, seperti reward epoch.slot: 444959999dengantransactionIndex: nullberarti 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
nulltidak memilikilastUpdatedAt, sehingga respons tersebut tidak memberi tahu kapan akun dibuat atau ditutup. Untuk menemukan transaksi tersebut, gunakangetTransactionsForAddress. - Alamat yang tidak pernah ada juga mengembalikan
null, bukan galat. - Slot sebelum cakupan riwayat menghasilkan galat
-32018untuk setiap alamat, baik akun tersebut pernah ada maupun tidak.
Menelusuri mundur riwayat akun
GunakanlastUpdatedAt 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
nullpada slot terbaru. Berikan posisistartdari 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
getTransactionsForAddressdansortOrder: "asc". Kemudian baca status padaslotdantransactionIndexsetiap 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
paginationKeydalam objek konfigurasi untuk mengambil halaman berikutnya. - Berhenti hanya ketika
paginationKeybernilainull. Sebuah halaman dapat memiliki sedikit hasil, atau kosong, tetapi masih memiliki hasil lainnya setelah halaman tersebut. - Tetapkan
slotyang sama di setiap halaman. Jika Anda menghilangkanslot, setiap halaman akan membaca slot terbaru yang telah diindeks, dan halaman Anda dapat berasal dari titik waktu yang berbeda. - Atur
limitantara 1 dan 5.000. Nilai default-nya adalah 5.000.
Enkode dan data yang diurai
- Enkode yang didukung adalah
base64(default),base64+zstd, danjsonParsed.base58danbinarytidak didukung. - Akun token
jsonParsedmenggunakan 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. dataSliceberfungsi dengan cara yang sama seperti dalamgetAccountInfo.
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?
PanggilgetHistoricalAccountInfo 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. TambahkantransactionIndex 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 menggunakanlastUpdatedAt. 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