Accountstructuur

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:

  1. Public key: komt overeen met een Ed25519 keypair (heeft een private key)
  2. Program Derived Address (PDA): deterministisch afgeleid van een program ID en seeds (geen private key)

Een account met zijn base58-gecodeerde public key-adresEen 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 keys
const keypairSigner = await generateKeyPairSigner();
console.log(keypairSigner);
Console
Click to execute the code.

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}`);
Console
Click to execute the code.

Accountvelden

Elk Account heeft een maximale grootte van MAX_ACCOUNT_DATA_LEN (10 MiB, equivalent aan MAX_PERMITTED_DATA_LENGTH) en bevat vijf velden:

VeldTypeBeschrijving
lamportsu64Saldo in lamports. Eigenaar kan debiteren; elk programma kan crediteren.
dataVec<u8>Accountstatus of programma-bytecode. Max 10 MiB. Alleen door eigenaar te schrijven.
ownerPubkeyProgramma met schrijftoegang. Alleen opnieuw toewijsbaar wanneer data op nul staat.
executableboolTrue = program account.
rent_epochEpochVerouderd. Ingesteld op u64::MAX voor rent-exempt accounts.
Account
pub struct Account {
/// lamports in the account
pub 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,
/// deprecated
pub 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:

  1. Haal het account op via zijn adres.
  2. Deserialiseer het data veld 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 data van het account kan wijzigen
  • Lamports kan aftrekken van het veld lamports van 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.

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:

  1. Haal het account op via zijn adres.
  2. Deserialiseer het data veld 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 data van het account kan wijzigen
  • Lamports kan aftrekken van het veld lamports van 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.

Account Examples
// Example Token Mint Account
Account {
lamports: 1461600,
data.len: 82,
owner: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb,
executable: false,
rent_epoch: 0,
data: 010000001e213c90625a7e643d9555bb01b6c3fe6416d7afd523ce8c7ddd9b923ceafb9d00000000000000000901010000001e213c90625a7e643d9555bb01b6,
}
// Example Token Program Account
Account {
lamports: 4513200894,
data.len: 134080,
owner: BPFLoader2111111111111111111111111111111111,
executable: true,
rent_epoch: 18446744073709551615,
data: 7f454c460201010000000000000000000300f70001000000d8f90000000000004000000000000000800902000000000000000000400038000400400009000800,
}

Is this page helpful?

Inhoudsopgave

Pagina Bewerken

Beheerd door

© 2026 Solana Foundation.
Alle rechten voorbehouden.
Blijf Verbonden