Struttura dell'account

Riepilogo

Gli account hanno 5 campi: lamport, data, owner, executable e rent_epoch. Ogni account è identificato da un indirizzo univoco di 32 byte. Gli account devono mantenere un saldo minimo di lamport proporzionale alla dimensione dei loro dati per rimanere on-chain.

Indirizzo dell'account

Ogni indirizzo di account è un valore di 32 byte, visualizzato come stringa codificata in base58. Un indirizzo può essere di due tipi:

  1. Chiave pubblica: corrisponde a una Ed25519 keypair (ha una chiave privata)
  2. Program derived address (PDA): derivato deterministicamente da un ID programma e seed (nessuna chiave privata)

Un account con il suo indirizzo di chiave pubblica codificato in base58
Un account con il suo indirizzo di chiave pubblica codificato in base58

Chiave pubblica

Una Keypair consiste in una chiave pubblica (usata come indirizzo dell'account) e una chiave privata (usata per firmare le transazioni). L'esempio seguente genera una keypair usando l'SDK Solana.

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

Un program derived address (PDA) è derivato deterministicamente da un ID programma e uno o più seed opzionali. I PDA non hanno una chiave privata corrispondente. L'esempio seguente deriva un PDA usando l'SDK Solana.

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.

Campi dell'account

Ogni Account ha una dimensione massima di MAX_ACCOUNT_DATA_LEN (10 MiB, equivalente a MAX_PERMITTED_DATA_LENGTH) e contiene cinque campi:

CampoTipoDescrizione
lamportsu64Saldo in lamport. Il proprietario può addebitare; qualsiasi programma può accreditare.
dataVec<u8>Stato dell'account o bytecode del programma. Max 10 MiB. Scrivibile solo dal proprietario.
ownerPubkeyProgramma con accesso in scrittura. Riassegnabile solo quando i dati sono azzerati.
executableboolTrue = program account.
rent_epochEpochDeprecato. Impostato su u64::MAX per gli account esenti da rent.
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,
}

Lamport

Il campo lamports contiene il saldo dell'account in lamport (1 SOL = 1.000.000.000 lamport).

Ogni account deve mantenere un saldo minimo in lamport per conservare i propri dati onchain. Questo saldo di archiviazione rimborsabile è proporzionale alla dimensione dei dati dell'account.

Il runtime e i nomi dei metodi RPC chiamano questo valore "rent-exempt minimum", ma la raccolta continuativa del rent è disabilitata. Considera il saldo come un deposito rimborsabile per l'archiviazione dell'account: l'intero saldo può essere recuperato quando l'account viene chiuso.

Vedi minimum_balance() e le costanti di rent.

Data

Il campo data memorizza un array di byte arbitrario. Il suo contenuto dipende dal tipo di account:

  • Program account: Contiene bytecode eseguibile o l'indirizzo di un program data account che memorizza il bytecode.
  • Data account: Contiene dati di stato definiti dal programma. Il programma proprietario definisce il formato di serializzazione.

La lettura dei dati dell'account richiede due passaggi:

  1. Recuperare l'account tramite il suo indirizzo.
  2. Deserializzare il campo data da byte grezzi nella struttura dati definita dal programma.

Proprietario

Il campo owner contiene l'ID del programma (chiave pubblica) del programma che possiede questo account.

Il programma proprietario è l'unico programma che può:

  • Modificare il campo data dell'account
  • Dedurre lamport dal campo lamports dell'account

Qualsiasi programma può aggiungere lamport a un altro account, ma solo il proprietario può dedurre lamport da esso.

Per i program account, il proprietario è il programma loader dell'account.

Eseguibile

Il campo executable è un booleano che determina se l'account è un program account o un data account:

  • true = program account (contiene codice eseguibile)
  • false = data account (memorizza lo stato)

Epoch di rent

Il campo rent_epoch è deprecato.

In precedenza veniva tracciato quando un account avrebbe avuto automaticamente dei lamport detratti per il mantenimento dei propri dati onchain. Poiché la raccolta continuativa del rent è disabilitata, rent_epoch è impostato su u64::MAX per tutti i nuovi account che soddisfano il saldo minimo di archiviazione.

Lamport

Il campo lamports contiene il saldo dell'account in lamport (1 SOL = 1.000.000.000 lamport).

Ogni account deve mantenere un saldo minimo in lamport per conservare i propri dati onchain. Questo saldo di archiviazione rimborsabile è proporzionale alla dimensione dei dati dell'account.

Il runtime e i nomi dei metodi RPC chiamano questo valore "rent-exempt minimum", ma la raccolta continuativa del rent è disabilitata. Considera il saldo come un deposito rimborsabile per l'archiviazione dell'account: l'intero saldo può essere recuperato quando l'account viene chiuso.

Vedi minimum_balance() e le costanti di rent.

Data

Il campo data memorizza un array di byte arbitrario. Il suo contenuto dipende dal tipo di account:

  • Program account: Contiene bytecode eseguibile o l'indirizzo di un program data account che memorizza il bytecode.
  • Data account: Contiene dati di stato definiti dal programma. Il programma proprietario definisce il formato di serializzazione.

La lettura dei dati dell'account richiede due passaggi:

  1. Recuperare l'account tramite il suo indirizzo.
  2. Deserializzare il campo data da byte grezzi nella struttura dati definita dal programma.

Proprietario

Il campo owner contiene l'ID del programma (chiave pubblica) del programma che possiede questo account.

Il programma proprietario è l'unico programma che può:

  • Modificare il campo data dell'account
  • Dedurre lamport dal campo lamports dell'account

Qualsiasi programma può aggiungere lamport a un altro account, ma solo il proprietario può dedurre lamport da esso.

Per i program account, il proprietario è il programma loader dell'account.

Eseguibile

Il campo executable è un booleano che determina se l'account è un program account o un data account:

  • true = program account (contiene codice eseguibile)
  • false = data account (memorizza lo stato)

Epoch di rent

Il campo rent_epoch è deprecato.

In precedenza veniva tracciato quando un account avrebbe avuto automaticamente dei lamport detratti per il mantenimento dei propri dati onchain. Poiché la raccolta continuativa del rent è disabilitata, rent_epoch è impostato su u64::MAX per tutti i nuovi account che soddisfano il saldo minimo di archiviazione.

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?

Indice dei contenuti

Modifica pagina
© 2026 Solana Foundation. Tutti i diritti riservati.