Ringkasan
Akun memiliki 5 bidang: lamport, data, pemilik, dapat dieksekusi, dan rent_epoch. Setiap akun diidentifikasi oleh alamat unik 32-byte. Akun harus menyimpan saldo lamport minimum yang proporsional dengan ukuran datanya agar tetap onchain.
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)
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 agar datanya tetap tersimpan di onchain. Saldo penyimpanan yang dapat dikembalikan ini sebanding dengan ukuran data akun.
Runtime dan nama metode RPC menyebut ini sebagai "rent-exempt minimum," namun pengumpulan rent yang berkelanjutan telah dinonaktifkan. Perlakukan saldo ini sebagai deposit penyimpanan akun yang dapat dikembalikan: saldo penuh dapat dipulihkan 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 dilacak ketika sebuah akun secara otomatis akan dikurangi lamport-nya untuk
membayar pemeliharaan data di onchain. Karena pengumpulan rent yang berkelanjutan telah dinonaktifkan,
rent_epoch diatur ke u64::MAX untuk semua akun baru yang memenuhi saldo
penyimpanan minimum.
Is this page helpful?