Résumé
Les comptes ont 5 champs : lamports, data, owner, executable et rent_epoch. Chaque compte est identifié par une adresse unique de 32 octets. Les comptes doivent détenir un solde minimum de lamports proportionnel à la taille de leurs données pour rester on-chain.
Adresse de compte
Chaque adresse de compte est une valeur de 32 octets, affichée sous forme de chaîne encodée en base58. Une adresse peut être de deux types :
- Clé publique : correspond à une paire de clés Ed25519 (possède une clé privée)
- Program Derived Address (PDA) : dérivée de manière déterministe à partir d'un ID de programme et de seeds (pas de clé privée)
Un compte avec son adresse de clé publique encodée en base58
Clé publique
Un Keypair se compose d'une clé publique (utilisée comme adresse de
compte) et d'une clé privée (utilisée pour signer les transactions). L'exemple
suivant génère une keypair à l'aide du 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) est dérivé de manière déterministe à partir d'un ID de programme et d'un ou plusieurs seeds optionnels. Les PDA n'ont pas de clé privée correspondante. L'exemple suivant dérive un PDA à l'aide du 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}`);
Champs de compte
Chaque
Account
a une taille maximale de
MAX_ACCOUNT_DATA_LEN
(10 Mio, équivalent à MAX_PERMITTED_DATA_LENGTH) et contient cinq champs :
| Champ | Type | Description |
|---|---|---|
lamports | u64 | Solde en lamports. Le propriétaire peut débiter ; tout programme peut créditer. |
data | Vec<u8> | État du compte ou bytecode du programme. Max 10 Mio. Modifiable uniquement par le propriétaire. |
owner | Pubkey | Programme avec accès en écriture. Réassignable uniquement lorsque les données sont remises à zéro. |
executable | bool | True = program account. |
rent_epoch | Epoch | Obsolète. Défini sur u64::MAX pour les comptes exempts de 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,}
Lamports
Le champ lamports contient le solde du compte en
lamports (1 SOL = 1 000 000 000
lamports).
Chaque compte doit maintenir un solde minimum en lamports, appelé solde exempt de rent, pour conserver ses données stockées on-chain. Ce solde est proportionnel à la taille des données du compte.
Bien que souvent appelé « rent », le solde exempt de rent fonctionne comme un dépôt remboursable, le solde complet est récupéré lorsque le compte est fermé.
Voir
minimum_balance()
et les
constantes
de rent.
Data
Le champ data stocke un tableau d'octets arbitraire. Son contenu dépend du
type de compte :
- Program accounts : contient le bytecode exécutable ou l'adresse d'un program data account qui stocke le bytecode.
- Comptes de données : contient les données d'état définies par le programme. Le programme propriétaire définit le format de sérialisation.
La lecture des données de compte nécessite deux étapes :
- Récupérer le compte par son adresse.
- Désérialiser le champ
datades octets bruts vers la structure de données définie par le programme.
Propriétaire
Le champ owner contient l'ID du programme (clé publique) du programme qui
possède ce compte.
Le programme propriétaire est le seul programme qui peut :
- Modifier le champ
datadu compte - Déduire des lamports du champ
lamportsdu compte
N'importe quel programme peut ajouter des lamports à un autre compte, mais seul le propriétaire peut déduire des lamports de celui-ci.
Pour les program accounts, le propriétaire est le programme de chargement du compte.
Exécutable
Le champ executable est un booléen qui détermine si le compte est un
program account ou un
data account :
true= program account (contient du code exécutable)false= data account (stocke l'état)
Rent epoch
Le champ rent_epoch est obsolète.
Auparavant, il suivait le moment où des lamports seraient automatiquement
déduits d'un compte pour payer le maintien de ses données on-chain. Depuis que
la collecte de rent est obsolète, rent_epoch est défini sur u64::MAX pour
tous les nouveaux comptes exempts de rent.
Is this page helpful?