Membaca dari Jaringan
Bagian ini membahas cara membaca data dari jaringan Solana dengan mengambil berbagai akun untuk memahami struktur akun Solana.
Di Solana, semua data ada dalam "accounts". Anda dapat menganggap data di Solana sebagai database publik dengan satu tabel "Accounts", di mana setiap entri adalah akun dengan dasar yang sama tipe Account.
Akun
Akun di Solana dapat menyimpan "state" atau program "executable". Setiap akun memiliki "address" (kunci publik) yang berfungsi sebagai ID uniknya yang digunakan untuk menemukan data on-chain yang sesuai.
Akun Solana berisi salah satu dari:
- State: Data yang dimaksudkan untuk dibaca dan disimpan. Misalnya, informasi tentang token, data pengguna, atau data lain yang didefinisikan dalam program.
- Executable Programs: Akun yang berisi kode aktual program Solana. Akun ini menyimpan instruksi yang dapat dipanggil oleh pengguna.
Pemisahan antara kode program dan state program ini adalah fitur utama dari Model Akun Solana. Untuk detail lebih lanjut, lihat halaman Model Akun Solana.
Mengambil Akun Dompet
Contoh ini menunjukkan cara:
- Menghasilkan keypair baru (pasangan kunci publik/privat).
- Meminta airdrop SOL untuk mendanai alamat baru.
- Mengambil data akun untuk alamat yang telah didanai.
Di Solana, mendanai alamat baru dengan SOL secara otomatis membuat akun yang dimiliki oleh System Program. Semua akun "dompet" hanyalah akun yang dimiliki System Program yang menyimpan SOL dan dapat menandatangani transaksi.
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 accountconst 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));
Mengambil Token Program
Contoh ini mengambil Token Program untuk menunjukkan perbedaan antara akun dompet dan akun program.
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);
Mengambil Mint Account
Contoh ini mengambil USD Coin (USDC) Mint account untuk menunjukkan bagaimana program di Solana menyimpan state dalam account terpisah.
Sebuah Mint account adalah account yang dimiliki oleh Token Program. Ini menyimpan metadata global untuk token tertentu, termasuk total supply, jumlah desimal, dan account yang diotorisasi untuk mencetak atau membekukan token. Alamat Mint account secara unik mengidentifikasi token di jaringan Solana.
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);
Mendeserialkan Mint Account
Field data
dari account Solana berisi byte mentah. Untuk menginterpretasikan
data ini secara bermakna, Anda harus mendeserialkannya ke tipe data yang sesuai
yang didefinisikan oleh program yang memiliki account tersebut.
Sebagian besar program Solana menyediakan library klien dengan fungsi pembantu yang mengabstraksi proses deserialisasi. Fungsi-fungsi ini mengkonversi byte account mentah menjadi tipe data terstruktur, memudahkan untuk bekerja dengan data account.
Sebagai contoh, @solana/spl-token
menyertakan fungsi
getMint()
untuk membantu mendeserialkan bidang data
dari
akun Mint menjadi tipe data
Mint.
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");
Is this page helpful?