Membaca dari Jaringan

Baca data dari jaringan Solana dengan mengambil berbagai akun. Bagian ini akan membantu Anda memahami struktur akun Solana. Setiap akun Solana memiliki alamat unik yang digunakan untuk menemukan data on-chain yang sesuai. Akun berisi data status atau program yang dapat dieksekusi.

Mengambil akun dompet

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

Contoh di bawah ini menghasilkan keypair baru, meminta SOL untuk mendanai alamat kunci publik baru, dan mengambil data akun untuk dompet yang baru didanai.

Fetch account
import { Keypair, Connection, LAMPORTS_PER_SOL } from "@solana/web3.js";
const keypair = Keypair.generate();
console.log(`Public Key: ${keypair.publicKey}`);
const connection = new Connection("http://localhost:8899", "confirmed");
// Funding an address with SOL automatically creates an account
const signature = await connection.requestAirdrop(
keypair.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");
const accountInfo = await connection.getAccountInfo(keypair.publicKey);
console.log(JSON.stringify(accountInfo, null, 2));
Console
Click to execute the code.

Ketika Anda mengambil akun dompet, respons tersebut mencakup bidang-bidang yang ditunjukkan dalam contoh output di sebelah kanan.

Example output
{
"data": {
"type": "Buffer",
"data": []
},
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0,
"space": 0
}

Bidang data berisi data akun yang disimpan sebagai byte. Untuk akun dompet, bidang ini kosong (0 byte).

Example output
{
"data": {
"type": "Buffer",
"data": []
},
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0,
"space": 0
}

Bidang executable menunjukkan apakah bidang data akun berisi kode program yang dapat dieksekusi. Untuk akun dompet, bidang ini adalah false.

Example output
{
"data": {
"type": "Buffer",
"data": []
},
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0,
"space": 0
}

Bidang lamports berisi saldo SOL akun, dalam lamports.

Example output
{
"data": {
"type": "Buffer",
"data": []
},
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0,
"space": 0
}

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

Example output
{
"data": {
"type": "Buffer",
"data": []
},
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0,
"space": 0
}

Kolom rentEpoch adalah kolom lama dari mekanisme rent yang sudah tidak digunakan lagi. (Kolom ini disertakan untuk kompatibilitas mundur.)

Example output
{
"data": {
"type": "Buffer",
"data": []
},
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0,
"space": 0
}

Kolom space menunjukkan jumlah byte yang terdapat dalam kolom data. Ini bukan merupakan kolom dalam tipe Akun itu sendiri, tetapi disertakan dalam respons.

Dalam contoh ini, kolom space adalah 0 karena kolom data berisi 0 byte data.

Example output
{
"data": {
"type": "Buffer",
"data": []
},
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0,
"space": 0
}

Ketika Anda mengambil akun dompet, respons tersebut mencakup bidang-bidang yang ditunjukkan dalam contoh output di sebelah kanan.

Bidang data berisi data akun yang disimpan sebagai byte. Untuk akun dompet, bidang ini kosong (0 byte).

Bidang executable menunjukkan apakah bidang data akun berisi kode program yang dapat dieksekusi. Untuk akun dompet, bidang ini adalah false.

Bidang lamports berisi saldo SOL akun, dalam lamports.

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

Kolom rentEpoch adalah kolom lama dari mekanisme rent yang sudah tidak digunakan lagi. (Kolom ini disertakan untuk kompatibilitas mundur.)

Kolom space menunjukkan jumlah byte yang terdapat dalam kolom data. Ini bukan merupakan kolom dalam tipe Akun itu sendiri, tetapi disertakan dalam respons.

Dalam contoh ini, kolom space adalah 0 karena kolom data berisi 0 byte data.

Example output
{
"data": {
"type": "Buffer",
"data": []
},
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0,
"space": 0
}

Mengambil Token Program

Contoh di bawah ini mengambil Token Program untuk menunjukkan perbedaan antara akun dompet dan program account. Program account menyimpan bytecode yang dikompilasi untuk kode sumber Token Program. Anda dapat melihat program account ini di Solana Explorer.

Fetch program account
import { Connection, PublicKey } from "@solana/web3.js";
const connection = new Connection(
"https://api.mainnet-beta.solana.com",
"confirmed"
);
const address = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
const accountInfo = await connection.getAccountInfo(address);
Console
Click to execute the code.

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

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

Kolom executable diatur ke true, yang menunjukkan bahwa kolom data akun berisi kode yang dapat dieksekusi.

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

Kolom data menyimpan kode program yang dapat dieksekusi.

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

Setiap program account dimiliki oleh program loader nya. Dalam contoh ini, owner adalah program BPFLoader2.

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

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

Kolom executable diatur ke true, yang menunjukkan bahwa kolom data akun berisi kode yang dapat dieksekusi.

Kolom data menyimpan kode program yang dapat dieksekusi.

Setiap program account dimiliki oleh program loader nya. Dalam contoh ini, owner adalah program BPFLoader2.

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

Mengambil mint account

Mint account adalah akun yang dimiliki oleh Token Program yang menyimpan metadata global untuk token tertentu. Ini termasuk total pasokan, jumlah desimal, dan akun yang diotorisasi untuk mencetak atau membekukan token. Alamat mint account secara unik mengidentifikasi token di jaringan Solana.

Contoh di bawah ini mengambil akun USD Coin Mint untuk menunjukkan bagaimana status program disimpan dalam akun terpisah.

Fetch program account
import { Connection, PublicKey } from "@solana/web3.js";
const connection = new Connection(
"https://api.mainnet-beta.solana.com",
"confirmed"
);
const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const accountInfo = await connection.getAccountInfo(address);
Console
Click to execute the code.

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

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Bidang data pada mint account menyimpan state, bukan kode yang dapat dieksekusi, sehingga bidang executable adalah false.

Token Program mendefinisikan tipe data Mint, yang disimpan dalam bidang data.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Bidang data berisi state akun Mint yang telah diserialisasi, seperti mint authority, total supply, jumlah desimal.

Untuk membaca dari Mint account, Anda harus mendeserialkan bidang data menjadi tipe data Mint, yang ditunjukkan dalam contoh berikutnya.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Mint account dimiliki oleh Token Program. Ini berarti bahwa bidang data hanya dapat dimodifikasi oleh instruksi Token Program.

Mint Account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

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

Bidang data pada mint account menyimpan state, bukan kode yang dapat dieksekusi, sehingga bidang executable adalah false.

Token Program mendefinisikan tipe data Mint, yang disimpan dalam bidang data.

Bidang data berisi state akun Mint yang telah diserialisasi, seperti mint authority, total supply, jumlah desimal.

Untuk membaca dari Mint account, Anda harus mendeserialkan bidang data menjadi tipe data Mint, yang ditunjukkan dalam contoh berikutnya.

Mint account dimiliki oleh Token Program. Ini berarti bahwa bidang data hanya dapat dimodifikasi oleh instruksi Token Program.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Deserialize mint account

Sebelum byte mentah dalam bidang data akun dapat diinterpretasikan secara bermakna, byte tersebut harus dideserialkan. Tipe data yang sesuai didefinisikan oleh program yang memiliki akun tersebut. Sebagian besar program Solana menyediakan library klien dengan fungsi pembantu yang mengabstraksi proses deserialisasi. Fungsi-fungsi ini mengkonversi byte akun mentah menjadi tipe data terstruktur, sehingga lebih mudah untuk bekerja dengan data akun.

Sebagai contoh, library @solana/spl-token menyertakan fungsi getMint() untuk membantu mendeserialkan bidang data mint account menjadi tipe data Mint yang didefinisikan oleh Token Program.

Deserialize mint account data
import { PublicKey, Connection } from "@solana/web3.js";
import { getMint } from "@solana/spl-token";
const connection = new Connection(
"https://api.mainnet-beta.solana.com",
"confirmed"
);
const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const mintData = await getMint(connection, address, "confirmed");
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 getMint() mendeserialkan bidang data dari akun mint menjadi tipe akun Mint.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Anda dapat melihat data akun mint yang telah dideserialkan sepenuhnya di Solana Explorer.

Bidang address berisi alamat akun mint.

Bidang mintAuthority menunjukkan satu-satunya akun yang dapat membuat unit baru dari token.

Bidang supply menunjukkan jumlah total token yang telah di-mint. Nilai ini diukur dalam unit terkecil dari token. Untuk mendapatkan total pasokan dalam unit standar, sesuaikan nilai bidang supply dengan decimals.

Bidang decimals menunjukkan jumlah tempat desimal untuk token.

Bidang isInitialized menunjukkan apakah akun mint telah diinisialisasi. Bidang ini adalah pemeriksaan keamanan yang digunakan dalam Token Program.

Kolom freezeAuthority menunjukkan akun dengan otoritas untuk membekukan token account. Token account yang dibekukan tidak dapat mentransfer atau membakar token yang dikandungnya.

Kolom tlvData berisi data tambahan untuk Token Extensions dan memerlukan deserialisasi lebih lanjut. Kolom ini hanya relevan untuk akun yang dibuat oleh Token Extension Program (Token2022).

Fungsi getMint() mendeserialkan bidang data dari akun mint menjadi tipe akun Mint.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Anda dapat melihat data akun mint yang telah dideserialkan sepenuhnya di Solana Explorer.

Bidang address berisi alamat akun mint.

Bidang mintAuthority menunjukkan satu-satunya akun yang dapat membuat unit baru dari token.

Bidang supply menunjukkan jumlah total token yang telah di-mint. Nilai ini diukur dalam unit terkecil dari token. Untuk mendapatkan total pasokan dalam unit standar, sesuaikan nilai bidang supply dengan decimals.

Bidang decimals menunjukkan jumlah tempat desimal untuk token.

Bidang isInitialized menunjukkan apakah akun mint telah diinisialisasi. Bidang ini adalah pemeriksaan keamanan yang digunakan dalam Token Program.

Kolom freezeAuthority menunjukkan akun dengan otoritas untuk membekukan token account. Token account yang dibekukan tidak dapat mentransfer atau membakar token yang dikandungnya.

Kolom tlvData berisi data tambahan untuk Token Extensions dan memerlukan deserialisasi lebih lanjut. Kolom ini hanya relevan untuk akun yang dibuat oleh Token Extension Program (Token2022).

Deserialized mint data
{
"address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"mintAuthority": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"supply": "8985397351591790",
"decimals": 6,
"isInitialized": true,
"freezeAuthority": "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar",
"tlvData": {
"type": "Buffer",
"data": []
}
}

Is this page helpful?

Daftar Isi

Edit Halaman

Dikelola oleh

© 2025 Yayasan Solana.
Semua hak dilindungi.