Samenvatting
Accounts hebben 5 velden: lamports, data, owner, executable en rent_epoch. Elk account wordt geïdentificeerd door een uniek 32-byte adres. Accounts moeten een minimum lamport-saldo aanhouden evenredig aan hun datagrootte om on-chain te blijven.
Accountadres
Elk accountadres is een 32-byte waarde, weergegeven als een base58-gecodeerde string. Een adres kan een van twee typen zijn:
- Public key: komt overeen met een Ed25519 keypair (heeft een private key)
- Program Derived Address (PDA): deterministisch afgeleid van een program ID en seeds (geen private key)
Een account met zijn base58-gecodeerde public key-adres
Public key
Een Keypair bestaat uit een public key (gebruikt als accountadres) en een
private key (gebruikt om transacties te ondertekenen). Het volgende voorbeeld
genereert een keypair met behulp van de Solana SDK.
import { generateKeyPairSigner } from "@solana/kit";// Kit does not enable extractable private keysconst keypairSigner = await generateKeyPairSigner();console.log(keypairSigner);
Program Derived Address
Een Program Derived Address (PDA) wordt deterministisch afgeleid van een program ID en een of meer optionele seeds. PDA's hebben geen corresponderende private key. Het volgende voorbeeld leidt een PDA af met behulp van de 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}`);
Accountvelden
Elk
Account
heeft een maximale grootte van
MAX_ACCOUNT_DATA_LEN
(10 MiB, equivalent aan MAX_PERMITTED_DATA_LENGTH) en bevat vijf velden:
| Veld | Type | Beschrijving |
|---|---|---|
lamports | u64 | Saldo in lamports. Eigenaar kan debiteren; elk programma kan crediteren. |
data | Vec<u8> | Accountstatus of programma-bytecode. Max 10 MiB. Alleen door eigenaar te schrijven. |
owner | Pubkey | Programma met schrijftoegang. Alleen opnieuw toewijsbaar wanneer data op nul staat. |
executable | bool | True = program account. |
rent_epoch | Epoch | Verouderd. Ingesteld op u64::MAX voor rent-exempt accounts. |
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,}
Lamports
Het lamports veld bevat het saldo van het account in
lamports (1 SOL = 1.000.000.000
lamports).
Elk account moet een minimum lamport-saldo aanhouden, bekend als het rent-exempt saldo, om zijn data on-chain opgeslagen te houden. Dit saldo is evenredig aan de data-grootte van het account.
Hoewel vaak "rent" genoemd, functioneert het rent-exempt saldo als een restitueerbare borg, het volledige saldo wordt teruggekregen wanneer het account wordt gesloten.
Zie
minimum_balance()
en de rent
constanten.
Data
Het data veld slaat een willekeurige byte-array op. De inhoud hangt af van het
accounttype:
- Program accounts: Bevat uitvoerbare bytecode of het adres van een program data account dat de bytecode opslaat.
- Data accounts: Bevat door het programma gedefinieerde statusdata. Het eigenaar-programma definieert het serialisatieformaat.
Het lezen van accountdata vereist twee stappen:
- Haal het account op via zijn adres.
- Deserialiseer het
dataveld van ruwe bytes naar de door het programma gedefinieerde data structuur.
Eigenaar
Het veld owner bevat de program-ID (publieke sleutel) van het programma dat
dit account bezit.
Het eigenaar-programma is het enige programma dat:
- Het veld
datavan het account kan wijzigen - Lamports kan aftrekken van het veld
lamportsvan het account
Elk programma kan lamports toevoegen aan een ander account, maar alleen de eigenaar kan lamports ervan aftrekken.
Voor program accounts is de eigenaar het loader-programma van het account.
Uitvoerbaar
Het veld executable is een boolean die bepaalt of het account een
program account of een
data account is:
true= program account (bevat uitvoerbare code)false= data account (slaat status op)
Rent epoch
Het veld rent_epoch is verouderd.
Hield voorheen bij wanneer lamports automatisch van een account zouden worden
afgetrokken om het onderhoud van de gegevens on-chain te betalen. Omdat
rent-inning verouderd is, wordt rent_epoch ingesteld op u64::MAX voor alle
nieuwe rent-exempt accounts.
Is this page helpful?