Membaca dari jaringan

Baca data dari jaringan Solana dengan mengambil berbagai akun. Panduan ini menjelaskan struktur akun Solana. Setiap akun Solana memiliki alamat unik yang digunakan untuk menemukan data onchain akun tersebut. Akun Solana berisi data status atau program yang dapat dieksekusi.

Mengambil akun wallet

Akun dompet adalah akun yang dimiliki oleh System Program. Akun dompet terutama digunakan untuk menyimpan SOL dan menandatangani transaksi. Ketika SOL dikirim ke alamat baru untuk pertama kalinya, akun sistem akan dibuat secara otomatis.

Contoh di bawah ini membuat klien Kit, menghasilkan penanda tangan baru, meminta SOL untuk mendanai alamat baru, dan mengambil data akun dari API RPC klien.

Fetch account
import { createClient, generateKeyPairSigner, lamports } from "@solana/kit";
import { solanaRpc, rpcAirdrop } from "@solana/kit-plugin-rpc";
import { generatedPayer } from "@solana/kit-plugin-signer";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "http://localhost:8899",
rpcSubscriptionsUrl: "ws://localhost:8900"
})
)
.use(rpcAirdrop());
const signer = await generateKeyPairSigner();
console.log(`Address: ${signer.address}`);
// Funding an address with SOL automatically creates an account
await client.airdrop(signer.address, lamports(1_000_000_000n));
const accountInfo = await client.rpc.getAccountInfo(signer.address).send();
console.log(accountInfo);
Console
Click to execute the code.

Saat Anda mengambil akun dompet dengan getAccountInfo(), Kit mengembalikan respons RPC seperti yang ditampilkan pada contoh output di sebelah kanan.

Respons memiliki dua field tingkat atas: context mendeskripsikan kapan pembacaan terjadi, dan value berisi field akun yang dikembalikan oleh metode RPC.

Field context menampilkan slot yang digunakan untuk membaca akun dan versi API RPC yang melayani respons tersebut. Pembacaan berikutnya dapat mengembalikan slot atau versi API yang berbeda.

Field value berisi status akun yang dikembalikan oleh metode RPC. Langkah-langkah berikut memandu Anda melalui field di dalam value sesuai urutan field tersebut muncul.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Kolom lamports berisi saldo SOL akun, diukur dalam lamport, satuan terkecil dari SOL.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Kolom data berisi data akun yang disimpan dalam bentuk byte. RPC mengembalikan data akun sebagai tuple: string data yang telah dienkode, diikuti dengan encoding-nya. Untuk akun dompet, string data yang dienkode kosong karena akun menyimpan 0 byte data.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Kolom owner menampilkan program yang memiliki akun tersebut. Untuk dompet, pemiliknya selalu System Program, dengan alamat 11111111111111111111111111111111.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Kolom executable memberi tahu apakah alamat akun dapat dipanggil. true berarti alamat tersebut merepresentasikan program yang dapat memproses instruksi. false berarti akun menyimpan state, seperti saldo dompet atau data akun, dan tidak dipanggil sebagai program. Akun dompet menggunakan false.

Kolom rentEpoch adalah kolom lama dari mekanisme rent yang sudah tidak digunakan. Kolom ini masih dikembalikan untuk kompatibilitas mundur.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Kolom space menampilkan jumlah byte yang terdapat dalam kolom data. Kolom space dikembalikan bersama respons pengambilan akun, tetapi bukan merupakan bagian dari tipe data akun.

Untuk contoh akun dompet, kolom space bernilai 0 karena kolom data berisi 0 byte data.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Saat Anda mengambil akun dompet dengan getAccountInfo(), Kit mengembalikan respons RPC seperti yang ditampilkan pada contoh output di sebelah kanan.

Respons memiliki dua field tingkat atas: context mendeskripsikan kapan pembacaan terjadi, dan value berisi field akun yang dikembalikan oleh metode RPC.

Field context menampilkan slot yang digunakan untuk membaca akun dan versi API RPC yang melayani respons tersebut. Pembacaan berikutnya dapat mengembalikan slot atau versi API yang berbeda.

Field value berisi status akun yang dikembalikan oleh metode RPC. Langkah-langkah berikut memandu Anda melalui field di dalam value sesuai urutan field tersebut muncul.

Kolom lamports berisi saldo SOL akun, diukur dalam lamport, satuan terkecil dari SOL.

Kolom data berisi data akun yang disimpan dalam bentuk byte. RPC mengembalikan data akun sebagai tuple: string data yang telah dienkode, diikuti dengan encoding-nya. Untuk akun dompet, string data yang dienkode kosong karena akun menyimpan 0 byte data.

Kolom owner menampilkan program yang memiliki akun tersebut. Untuk dompet, pemiliknya selalu System Program, dengan alamat 11111111111111111111111111111111.

Kolom executable memberi tahu apakah alamat akun dapat dipanggil. true berarti alamat tersebut merepresentasikan program yang dapat memproses instruksi. false berarti akun menyimpan state, seperti saldo dompet atau data akun, dan tidak dipanggil sebagai program. Akun dompet menggunakan false.

Kolom rentEpoch adalah kolom lama dari mekanisme rent yang sudah tidak digunakan. Kolom ini masih dikembalikan untuk kompatibilitas mundur.

Kolom space menampilkan jumlah byte yang terdapat dalam kolom data. Kolom space dikembalikan bersama respons pengambilan akun, tetapi bukan merupakan bagian dari tipe data akun.

Untuk contoh akun dompet, kolom space bernilai 0 karena kolom data berisi 0 byte data.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Ambil Token Program

Contoh di bawah ini mengambil Token Program untuk menunjukkan perbedaan antara akun dompet dan akun program. Token Program mendefinisikan instruksi untuk bekerja dengan token, seperti membuat dan mentransfer token. Program dipanggil untuk memproses instruksi. Status program, seperti data token dan saldo, disimpan dalam akun terpisah yang dimiliki oleh program.

Alamat Token Program adalah program account onchain. Untuk kemudahan, Anda dapat menganggap alamat program sebagai program itu sendiri, karena itulah alamat yang digunakan untuk memanggilnya. Untuk program yang dapat diperbarui, program account menyimpan metadata dan menunjuk ke ProgramData account terpisah yang menyimpan kode eksekusi yang telah di-deploy. Anda dapat melihat kode sumber Token Program dan program account di Solana Explorer.

Fetch program account
import { address, createClient, fetchJsonParsedAccount } from "@solana/kit";
import { solanaRpc } from "@solana/kit-plugin-rpc";
import { generatedPayer } from "@solana/kit-plugin-signer";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "https://api.mainnet.solana.com"
})
);
const tokenProgramAddress = address(
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
);
const accountInfo = await client.rpc
.getAccountInfo(tokenProgramAddress, {
encoding: "base64"
})
.send();
console.log(accountInfo);
const parsedAccount = await fetchJsonParsedAccount(
client.rpc,
tokenProgramAddress
);
console.log(parsedAccount);
Console
Click to execute the code.

Token Program adalah program account yang dapat dieksekusi. Program memiliki field dasar yang sama seperti semua akun, tetapi dengan perbedaan utama.

Contoh Token Program menggunakan encoding base64 untuk mengembalikan data mentah program account.

Langkah-langkah berikut membahas field di dalam value sesuai urutan field tersebut muncul.

Field data menyimpan status program account BPF Upgradeable Loader. Item tuple pertama berisi data akun lengkap yang dikodekan sebagai base64. Item tuple kedua mengidentifikasi encoding. Di sini, 36 byte mencakup metadata dan alamat programdata account.

Untuk program yang dapat diperbarui, status program account menunjuk ke programdata account terpisah yang menyimpan kode eksekusi program.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

Bidang executable diatur ke true, yang menunjukkan bahwa alamat akun dapat dipanggil sebagai program.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

Bidang lamports berisi saldo SOL yang dimiliki oleh program account. program account memerlukan lamport yang cukup agar tetap bebas dari rent.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

Setiap program account dimiliki oleh loader program. Untuk Token Program account, owner adalah BPF Upgradeable Loader.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

Bidang rentEpoch adalah bidang lama dari mekanisme rent yang sudah tidak digunakan. Bidang ini masih dikembalikan untuk kompatibilitas mundur.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

Bidang space menunjukkan ukuran penuh data program account dalam byte. Nilai space hanya 36 byte karena program account menyimpan metadata loader dan alamat ProgramData account, bukan program yang telah dikompilasi secara penuh.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

Respons sebelumnya mengembalikan bidang data dari program account sebagai tuple base64. Respons yang telah diurai mendeserialisasi byte tersebut ke dalam bidang bernama pada objek data. Bidang programData berisi alamat ProgramData account yang menyimpan kode program yang dapat dieksekusi.

Parsed Token program account
{
executable: true,
lamports: 43712780n,
programAddress: "BPFLoaderUpgradeab1e11111111111111111111111",
space: 36n,
address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
data: {
programData: "3gvYRKWyXRR9xKWe1ZjPhLY5ZJRN7KDB4rFZFGoJfFk2",
parsedAccountMeta: { program: "bpf-upgradeable-loader", type: "program" }
},
exists: true
}

Token Program adalah program account yang dapat dieksekusi. Program memiliki field dasar yang sama seperti semua akun, tetapi dengan perbedaan utama.

Contoh Token Program menggunakan encoding base64 untuk mengembalikan data mentah program account.

Langkah-langkah berikut membahas field di dalam value sesuai urutan field tersebut muncul.

Field data menyimpan status program account BPF Upgradeable Loader. Item tuple pertama berisi data akun lengkap yang dikodekan sebagai base64. Item tuple kedua mengidentifikasi encoding. Di sini, 36 byte mencakup metadata dan alamat programdata account.

Untuk program yang dapat diperbarui, status program account menunjuk ke programdata account terpisah yang menyimpan kode eksekusi program.

Bidang executable diatur ke true, yang menunjukkan bahwa alamat akun dapat dipanggil sebagai program.

Bidang lamports berisi saldo SOL yang dimiliki oleh program account. program account memerlukan lamport yang cukup agar tetap bebas dari rent.

Setiap program account dimiliki oleh loader program. Untuk Token Program account, owner adalah BPF Upgradeable Loader.

Bidang rentEpoch adalah bidang lama dari mekanisme rent yang sudah tidak digunakan. Bidang ini masih dikembalikan untuk kompatibilitas mundur.

Bidang space menunjukkan ukuran penuh data program account dalam byte. Nilai space hanya 36 byte karena program account menyimpan metadata loader dan alamat ProgramData account, bukan program yang telah dikompilasi secara penuh.

Respons sebelumnya mengembalikan bidang data dari program account sebagai tuple base64. Respons yang telah diurai mendeserialisasi byte tersebut ke dalam bidang bernama pada objek data. Bidang programData berisi alamat ProgramData account yang menyimpan kode program yang dapat dieksekusi.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

Mengambil mint account

mint account adalah akun yang dimiliki oleh Token Program yang menyimpan metadata global untuk token tertentu. mint account menyimpan total pasokan token, jumlah desimal, otoritas mint, dan otoritas pembekuan. Alamat mint account secara unik mengidentifikasi sebuah token di jaringan Solana.

Contoh di bawah ini mengambil mint account USD Coin untuk mendemonstrasikan bagaimana status program disimpan dalam akun terpisah. Saldo dan nilai pasokan yang tepat dapat berbeda tergantung pada slot yang dibaca oleh node RPC Anda.

Fetch mint account
import { address, createClient } from "@solana/kit";
import { solanaRpc } from "@solana/kit-plugin-rpc";
import { generatedPayer } from "@solana/kit-plugin-signer";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "https://api.mainnet.solana.com"
})
);
const mintAddress = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const accountInfo = await client.rpc
.getAccountInfo(mintAddress, {
encoding: "base64"
})
.send();
console.log(accountInfo);
Console
Click to execute the code.

mint account menyimpan status, bukan kode yang dapat dieksekusi. mint account dimiliki oleh Token Program, yang mencakup instruksi yang mendefinisikan cara membuat dan memperbarui mint account.

Langkah-langkah berikut memandu melalui field di dalam value sesuai urutan field tersebut muncul.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Field data berisi status akun Mint yang telah diserialisasi. Item tuple pertama berisi data akun lengkap 82 byte yang dikodekan sebagai base64. Item tuple kedua mengidentifikasi pengkodean.

Untuk membaca dari mint account, Anda harus mendeserialisasi field data ke dalam tipe data Mint, seperti yang ditunjukkan pada contoh berikutnya.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Field executable menunjukkan apakah akun dapat dipanggil sebagai program. mint account menyimpan status, sehingga field executable bernilai false.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Field lamports berisi saldo SOL yang dimiliki oleh mint account. Nilai lamport adalah saldo bebas sewa mint account, bukan pasokan token.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

mint account dimiliki oleh Token Program. Kolom data pada mint account hanya dapat dimodifikasi oleh instruksi Token Program.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Kolom rentEpoch adalah kolom lama dari mekanisme rent yang sudah tidak digunakan lagi. Kolom ini tetap dikembalikan demi kompatibilitas mundur.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Kolom space menunjukkan bahwa mint account memuat 82 byte data.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

mint account menyimpan status, bukan kode yang dapat dieksekusi. mint account dimiliki oleh Token Program, yang mencakup instruksi yang mendefinisikan cara membuat dan memperbarui mint account.

Langkah-langkah berikut memandu melalui field di dalam value sesuai urutan field tersebut muncul.

Field data berisi status akun Mint yang telah diserialisasi. Item tuple pertama berisi data akun lengkap 82 byte yang dikodekan sebagai base64. Item tuple kedua mengidentifikasi pengkodean.

Untuk membaca dari mint account, Anda harus mendeserialisasi field data ke dalam tipe data Mint, seperti yang ditunjukkan pada contoh berikutnya.

Field executable menunjukkan apakah akun dapat dipanggil sebagai program. mint account menyimpan status, sehingga field executable bernilai false.

Field lamports berisi saldo SOL yang dimiliki oleh mint account. Nilai lamport adalah saldo bebas sewa mint account, bukan pasokan token.

mint account dimiliki oleh Token Program. Kolom data pada mint account hanya dapat dimodifikasi oleh instruksi Token Program.

Kolom rentEpoch adalah kolom lama dari mekanisme rent yang sudah tidak digunakan lagi. Kolom ini tetap dikembalikan demi kompatibilitas mundur.

Kolom space menunjukkan bahwa mint account memuat 82 byte data.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Deserialisasi mint account

Data akun disimpan dalam kolom data dalam format serial. Untuk membaca data tersebut sebagai kolom seperti supply atau decimals, deserialisasi kolom data ke dalam tipe akun yang didefinisikan oleh program pemilik. Sebagian besar program Solana menyediakan library klien dengan fungsi pembantu untuk langkah ini. Fungsi pembantu ini mengembalikan data akun terstruktur, sehingga hasilnya lebih mudah digunakan.

Misalnya, library @solana-program/token menyertakan fungsi fetchMint() untuk mengambil mint account dan mendeserialisasi kolom data pada mint account ke dalam tipe data Mint yang didefinisikan oleh Token Program.

Deserialize mint account data
import { address, createClient } from "@solana/kit";
import { solanaRpc } from "@solana/kit-plugin-rpc";
import { generatedPayer } from "@solana/kit-plugin-signer";
import { fetchMint } from "@solana-program/token";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "https://api.mainnet.solana.com"
})
);
const mintAddress = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const mint = await fetchMint(client.rpc, mintAddress);
console.log(mint);
Console
Click to execute the code.
Mint account type
pub struct Mint {
/// Optional authority used to mint new tokens. The mint authority may only
/// be provided during mint creation. If no mint authority is present
/// then the mint has a fixed supply and no further tokens may be
/// minted.
pub mint_authority: COption<Pubkey>,
/// Total supply of tokens.
pub supply: u64,
/// Number of base 10 digits to the right of the decimal place.
pub decimals: u8,
/// Is `true` if this structure has been initialized
pub is_initialized: bool,
/// Optional authority to freeze token accounts.
pub freeze_authority: COption<Pubkey>,
}

Fungsi fetchMint() mengambil mint account dan mendeserialisasi kolom data pada mint account ke dalam tipe akun Mint.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Anda dapat melihat data mint account yang telah sepenuhnya dideserialisasi di Solana Explorer.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kolom address berisi alamat mint account.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kolom data berisi status akun Mint yang telah dideserialisasi. Kolom-kolom bersarang di dalam data berasal dari tipe akun Mint milik Token Program.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kolom data.mintAuthority menunjukkan satu-satunya akun yang dapat membuat unit baru dari token tersebut.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kolom supply menunjukkan jumlah total token yang telah dicetak. Nilai suplai diukur dalam unit terkecil token. Untuk mendapatkan total suplai dalam unit standar, sesuaikan nilai kolom supply dengan decimals.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kolom decimals menunjukkan jumlah angka desimal untuk token tersebut.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kolom isInitialized menunjukkan apakah mint account telah diinisialisasi. Kolom isInitialized merupakan pemeriksaan keamanan yang digunakan dalam Token Program.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kolom data.freezeAuthority menampilkan akun yang memiliki wewenang untuk membekukan token account. Sebuah token account adalah akun terpisah yang menyimpan unit token milik pemiliknya. Saat dibekukan, sebuah token account tidak dapat mentransfer atau membakar saldo tokennya.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kolom executable bernilai false. mint account USDC menyimpan state token, sehingga mint account USDC tidak dapat dipanggil sebagai program.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kolom lamports berisi saldo SOL yang dimiliki oleh mint account. Nilai lamport adalah saldo bebas-sewa (rent-exempt) dari mint account, bukan pasokan token.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kolom programAddress menampilkan program yang memiliki mint account. Untuk USDC, program pemiliknya adalah Token Program. Hanya program yang memiliki suatu akun yang dapat mengubah kolom data melalui instruksi yang telah di-deploy oleh program tersebut.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kolom space menampilkan ukuran data mint account asli dalam byte. Akun Mint dasar dari Token Program berukuran 82 byte.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Fungsi fetchMint() mengambil mint account dan mendeserialisasi kolom data pada mint account ke dalam tipe akun Mint.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Anda dapat melihat data mint account yang telah sepenuhnya dideserialisasi di Solana Explorer.

Kolom address berisi alamat mint account.

Kolom data berisi status akun Mint yang telah dideserialisasi. Kolom-kolom bersarang di dalam data berasal dari tipe akun Mint milik Token Program.

Kolom data.mintAuthority menunjukkan satu-satunya akun yang dapat membuat unit baru dari token tersebut.

Kolom supply menunjukkan jumlah total token yang telah dicetak. Nilai suplai diukur dalam unit terkecil token. Untuk mendapatkan total suplai dalam unit standar, sesuaikan nilai kolom supply dengan decimals.

Kolom decimals menunjukkan jumlah angka desimal untuk token tersebut.

Kolom isInitialized menunjukkan apakah mint account telah diinisialisasi. Kolom isInitialized merupakan pemeriksaan keamanan yang digunakan dalam Token Program.

Kolom data.freezeAuthority menampilkan akun yang memiliki wewenang untuk membekukan token account. Sebuah token account adalah akun terpisah yang menyimpan unit token milik pemiliknya. Saat dibekukan, sebuah token account tidak dapat mentransfer atau membakar saldo tokennya.

Kolom executable bernilai false. mint account USDC menyimpan state token, sehingga mint account USDC tidak dapat dipanggil sebagai program.

Kolom lamports berisi saldo SOL yang dimiliki oleh mint account. Nilai lamport adalah saldo bebas-sewa (rent-exempt) dari mint account, bukan pasokan token.

Kolom programAddress menampilkan program yang memiliki mint account. Untuk USDC, program pemiliknya adalah Token Program. Hanya program yang memiliki suatu akun yang dapat mengubah kolom data melalui instruksi yang telah di-deploy oleh program tersebut.

Kolom space menampilkan ukuran data mint account asli dalam byte. Akun Mint dasar dari Token Program berukuran 82 byte.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Output terserialisasi vs terdeserialisasi

Kedua contoh membaca mint account USDC yang sama. Respons pertama membiarkan kolom data dalam bentuk terserialisasi. Untuk membaca isi mint account, dekode data tersebut sesuai tipe akun yang didefinisikan oleh program pemiliknya. Untuk mint account, Token Program mendefinisikan tipe Mint seperti yang ditampilkan di sebelah kanan.

Sebelum didekode, bidang data berisi data akun yang telah diserialisasi.

Serialized mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Setelah mendekode data sebagai Mint, bidang data berisi kolom akun yang telah diberi nama.

Deserialized mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Is this page helpful?

Daftar Isi

Edit Halaman
© 2026 Yayasan Solana. Semua hak dilindungi.