getTokenAccountsByOwner digunakan untuk mengambil semua akun token SPL yang dimiliki oleh kunci publik tertentu. Metode ini sangat penting bagi dompet dan aplikasi yang perlu menampilkan kepemilikan token pengguna atau berinteraksi dengan berbagai akun token mereka.
Anda harus memfilter kueri berdasarkan token mint tertentu atau programId (misalnya, Program Token SPL atau Program Token-2022).
Untuk dompet dengan portofolio token yang besar, pertimbangkan untuk menggunakan getTokenAccountsByOwnerV2, yang menyediakan dukungan paginasi berbasis kursor dengan ukuran halaman yang dapat dikonfigurasi hingga 10.000 akun per permintaan.
Kasus Penggunaan Umum
- Menampilkan Portofolio Pengguna: Mengambil semua akun token (dan dengan demikian saldonya) untuk alamat dompet pengguna tertentu guna menampilkan portofolio token lengkap mereka.
- Logika Aplikasi: Mengidentifikasi akun token tertentu milik pengguna untuk mint tertentu sebelum memulai transfer atau interaksi lainnya.
- Verifikasi: Memeriksa akun token yang dimiliki oleh seorang pemilik untuk jenis token tertentu.
- Mengindeks Pemilik Token: Meskipun kurang efisien untuk pengindeksan global dibandingkan metode lain, metode ini dapat digunakan untuk menemukan akun bagi sekumpulan pemilik yang diketahui.
Parameter Permintaan
-
ownerPubkey(string, wajib): Kunci publik pemilik akun yang dikodekan dengan base-58, yang akun tokennya ingin Anda ambil. -
filter(object, wajib): Object JSON yang harus menentukanmintatauprogramId:mint(string): Kunci publik mint token tertentu yang dikodekan dengan base-58. Jika diberikan, hanya akun token untuk mint ini yang dimiliki olehownerPubkeyyang akan dikembalikan.programId(string): Kunci publik Program Token yang mengatur akun, yang dikodekan dengan base-58. Nilai yang umum adalah:- Program Token SPL:
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA - Program Token-2022:
TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
- Program Token SPL:
-
options(object, opsional): Object konfigurasi opsional yang dapat mencakup:commitment(string, opsional): Menentukan tingkat komitmen.encoding(string, opsional): Pengodean untuk data akun."jsonParsed"sangat direkomendasikan. Opsi lainnya:"base64","base64+zstd". Nilai defaultnya adalah"base64".dataSlice(object, opsional): Untuk mengambil potongan tertentu dari data akun (offset: usize,length: usize). Hanya untuk pengodeanbase58,base64, ataubase64+zstd.minContextSlot(u64, opsional): Slot minimum untuk kueri.
Struktur Respons
Kolomresult.value dalam respons JSON-RPC adalah array object. Setiap object sesuai dengan akun Token SPL yang dimiliki oleh ownerPubkey dan cocok dengan filter.
Setiap object dalam array value berisi:
pubkey(string): Kunci publik akun token itu sendiri yang dikodekan dengan base-58.account(object): Informasi mendetail tentang akun token:lamports(u64): Saldo lamport untuk pembebasan biaya sewa.owner(string): Program pemilik (misalnya, kunci publik Program Token).data: Data akun. Jika pengodean"jsonParsed"digunakan, bagian ini berisi:program(string): misalnya,"spl-token".parsed: Object dengan informasi terstruktur:info: Detail seperti:mint(string): Alamat mint token.owner(string): Pemilik akun token (harus cocok denganownerPubkeydari permintaan).tokenAmount(object): Saldo token (amount,decimals,uiAmount,uiAmountString).state(string): Status akun token (misalnya,"initialized").isNative(boolean): Menunjukkan apakah akun menyimpan SOL terbungkus.delegate(string, opsional): Alamat delegasi jika ditetapkan.delegatedAmount(object, opsional): Jumlah yang didelegasikan jika delegasi ditetapkan.
type(string): misalnya,"account".
executable(boolean): Menunjukkan apakah akun dapat dieksekusi.rentEpoch(u64): Epoch berikutnya saat biaya sewa jatuh tempo.space(u64, jika bukanjsonParsed): Panjang data mentah akun dalam byte.
jsonParsed, difilter berdasarkan programId):
Contoh Kode
Tips untuk Developer
- Persyaratan Filter: Anda harus memberikan
mintatauprogramIddalam filter. Anda tidak dapat mengueri semua akun token milik seorang pemilik di seluruh jenis token tanpa salah satu filter utama ini. - Akun Token Terkait: Metode ini akan mengembalikan semua akun token yang dimiliki oleh kunci publik tersebut, termasuk Associated Token Account (ATA) standar dan akun token SPL lain yang mungkin dimilikinya (misalnya, dari implementasi dompet lama atau konfigurasi khusus).
- Pengodean: Penggunaan
"jsonParsed"untuk opsiencodingsangat direkomendasikan. Opsi ini mendekode data akun biner menjadi struktur JSON yang lebih mudah digunakan. - Performa: Jika seorang pemilik memiliki akun token dalam jumlah sangat besar (terutama saat hanya memfilter berdasarkan
programId), responsnya dapat berukuran besar. Untuk kasus seperti ini, gunakangetTokenAccountsByOwnerV2, yang menyediakan dukungan paginasi bawaan. - Token-2022 (Ekstensi Token): Jika Anda menggunakan token yang dibuat dengan program Token-2022 (yang mendukung ekstensi seperti biaya transfer, bunga, dan sebagainya), pastikan Anda menggunakan
programIdyang benar:TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb.
getTokenAccountsByOwner sehingga Anda dapat mengambil informasi akun token untuk alamat Solana apa pun secara efisien.
Paginasi untuk Portofolio Token Besar
Untuk dompet dengan kepemilikan token yang besar, gunakangetTokenAccountsByOwnerV2, yang menyediakan:
- Paginasi berbasis kursor: Atur
limit(1–10.000) dan gunakanpaginationKeyuntuk menavigasi hasil - Pembaruan inkremental: Gunakan
changedSinceSlotuntuk hanya mengambil akun token yang diubah sejak slot tertentu - Performa lebih baik: Mencegah timeout dan memungkinkan pelacakan portofolio secara real-time
- Perilaku paginasi: Akhir paginasi hanya ditunjukkan ketika tidak ada akun token yang dikembalikan. Jumlah akun yang dikembalikan mungkin lebih sedikit daripada batas karena pemfilteran—lanjutkan paginasi hingga
paginationKeybernilai null
Metode Terkait
getTokenAccountsByOwnerV2
Versi dengan paginasi dan navigasi berbasis kursor untuk portofolio besar
getTokenAccountBalance
Dapatkan saldo akun token tertentu