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:
- Chiave pubblica: corrisponde a una Ed25519 keypair (ha una chiave privata)
- 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
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 keysconst keypairSigner = await generateKeyPairSigner();console.log(keypairSigner);
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}`);
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:
| Campo | Tipo | Descrizione |
|---|---|---|
lamports | u64 | Saldo in lamport. Il proprietario può addebitare; qualsiasi programma può accreditare. |
data | Vec<u8> | Stato dell'account o bytecode del programma. Max 10 MiB. Scrivibile solo dal proprietario. |
owner | Pubkey | Programma con accesso in scrittura. Riassegnabile solo quando i dati sono azzerati. |
executable | bool | True = program account. |
rent_epoch | Epoch | Deprecato. Impostato su u64::MAX per gli account esenti da 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
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:
- Recuperare l'account tramite il suo indirizzo.
- Deserializzare il campo
datada 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
datadell'account - Dedurre lamport dal campo
lamportsdell'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.
Is this page helpful?