Ringkasan
Akun memiliki 5 field: lamports, data, owner, executable, dan rent_epoch. Setiap akun diidentifikasi dengan alamat unik 32-byte. Akun harus menyimpan saldo lamport minimum yang proporsional dengan ukuran datanya agar tetap berada di on-chain.
Alamat akun
Setiap alamat akun adalah nilai 32-byte, ditampilkan sebagai string yang di-encode dengan base58. Alamat dapat berupa salah satu dari dua jenis:
- Public key: sesuai dengan keypair Ed25519 (memiliki private key)
- Program Derived Address (PDA): diturunkan secara deterministik dari program ID dan seeds (tanpa private key)
An account with its base58 encoded public key address
Public key
Sebuah Keypair terdiri dari public key (digunakan sebagai alamat akun) dan
private key (digunakan untuk menandatangani transaksi). Contoh berikut
menghasilkan keypair menggunakan Solana SDK.
import { generateKeyPairSigner } from "@solana/kit";// Kit does not enable extractable private keysconst keypairSigner = await generateKeyPairSigner();console.log(keypairSigner);
Program Derived Address
Sebuah Program Derived Address (PDA) diturunkan secara deterministik dari program ID dan satu atau lebih seeds opsional. PDA tidak memiliki private key yang sesuai. Contoh berikut menurunkan PDA menggunakan Solana SDK.
import { Address, getProgramDerivedAddress } from "@solana/kit";const programAddress = "11111111111111111111111111111111" as Address;const seeds = ["helloWorld"];const [pda, bump] = await getProgramDerivedAddress({programAddress,seeds});console.log(`PDA: ${pda}`);console.log(`Bump: ${bump}`);
Bidang akun
Setiap
Account
memiliki ukuran maksimum
MAX_ACCOUNT_DATA_LEN
(10 MiB, setara dengan MAX_PERMITTED_DATA_LENGTH) dan berisi lima bidang:
| Bidang | Tipe | Deskripsi |
|---|---|---|
lamports | u64 | Saldo dalam lamport. Pemilik dapat mendebit; program apa pun dapat mengkredit. |
data | Vec<u8> | State akun atau bytecode program. Maks 10 MiB. Hanya dapat ditulis pemilik. |
owner | Pubkey | Program dengan akses tulis. Hanya dapat dipindahkan saat data dikosongkan. |
executable | bool | True = program account. |
rent_epoch | Epoch | Tidak digunakan lagi. Diatur ke u64::MAX untuk akun yang bebas rent. |
pub struct Account {/// lamports in the accountpub lamports: u64,/// data held in this account#[cfg_attr(feature = "serde", serde(with = "serde_bytes"))]pub data: Vec<u8>,/// the program that owns this account. If executable, the program that loads this account.pub owner: Pubkey,/// if true, this account's data contains a program (and is now read-only)pub executable: bool,/// deprecatedpub rent_epoch: Epoch,}
Lamport
Bidang lamports menyimpan saldo akun dalam
lamport (1 SOL = 1.000.000.000 lamport).
Setiap akun harus mempertahankan saldo lamport minimum, yang dikenal sebagai saldo bebas rent, untuk menjaga datanya tetap tersimpan on-chain. Saldo ini proporsional dengan ukuran data akun.
Meskipun sering disebut "rent", saldo bebas rent berfungsi sebagai deposit yang dapat dikembalikan, saldo penuh dikembalikan saat akun ditutup.
Lihat
minimum_balance()
dan rent
constants.
Data
Bidang data menyimpan array byte arbitrer. Isinya bergantung pada jenis akun:
- Program account: Berisi bytecode yang dapat dieksekusi atau alamat program data account yang menyimpan bytecode.
- Data account: Berisi data state yang didefinisikan program. Program pemilik menentukan format serialisasi.
Membaca data akun memerlukan dua langkah:
- Ambil akun berdasarkan alamat.
- Deserialisasi bidang
datadari byte mentah ke struktur data yang didefinisikan program.
Owner
Field owner berisi program ID (public key) dari program yang memiliki akun
ini.
Owner program adalah satu-satunya program yang dapat:
- Memodifikasi field
dataakun - Mengurangi lamport dari field
lamportsakun
Program apa pun dapat menambahkan lamport ke akun lain, tetapi hanya owner yang dapat mengurangi lamport darinya.
Untuk program account, owner adalah program loader akun tersebut.
Executable
Field executable adalah boolean yang menentukan apakah akun tersebut adalah
program account atau
data account:
true= program account (berisi kode yang dapat dieksekusi)false= data account (menyimpan state)
Rent epoch
Field rent_epoch sudah tidak digunakan lagi.
Sebelumnya melacak kapan suatu akun akan secara otomatis dikurangi lamportnya
untuk membayar pemeliharaan datanya di on-chain. Karena pengumpulan rent sudah
tidak digunakan lagi, rent_epoch diatur ke u64::MAX untuk semua akun
rent-exempt yang baru.
Is this page helpful?