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 tipe dasar Account type yang sama.
Accounts
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 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 Mint account USD Coin (USDC) untuk menunjukkan bagaimana program di Solana menyimpan state dalam akun terpisah.
Akun Mint adalah akun yang dimiliki oleh Token Program. Akun ini menyimpan metadata global untuk token tertentu, termasuk total pasokan, jumlah desimal, dan akun yang berwenang 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 akun Solana berisi byte mentah. Untuk menginterpretasikan data
ini secara bermakna, Anda harus mendeserialkannya ke tipe data yang sesuai yang
ditentukan oleh program yang memiliki akun tersebut.
Sebagian besar program Solana menyediakan library klien dengan fungsi pembantu yang mengabstraksi proses deserialisasi. Fungsi-fungsi ini mengonversi byte akun mentah menjadi tipe data terstruktur, sehingga memudahkan untuk bekerja dengan data akun.
Sebagai contoh, @solana/spl-token
mencakup 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?