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 base58Un 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, noto come saldo esente da rent, per mantenere i propri dati memorizzati on-chain. Questo saldo è proporzionale alla dimensione dei dati dell'account.

Sebbene spesso chiamato "rent", il saldo esente da rent funziona come un deposito rimborsabile, il saldo completo viene 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 tracciava quando un account avrebbe automaticamente avuto lamport dedotti per pagare il mantenimento dei suoi dati on-chain. Poiché la raccolta del rent è deprecata, rent_epoch è impostato su u64::MAX per tutti i nuovi account esenti da rent.

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, noto come saldo esente da rent, per mantenere i propri dati memorizzati on-chain. Questo saldo è proporzionale alla dimensione dei dati dell'account.

Sebbene spesso chiamato "rent", il saldo esente da rent funziona come un deposito rimborsabile, il saldo completo viene 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 tracciava quando un account avrebbe automaticamente avuto lamport dedotti per pagare il mantenimento dei suoi dati on-chain. Poiché la raccolta del rent è deprecata, rent_epoch è impostato su u64::MAX per tutti i nuovi account esenti da rent.

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

Gestito da

© 2026 Solana Foundation.
Tutti i diritti riservati.
Resta connesso