Structure de compte

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 :

  1. Clé publique : correspond à une paire de clés Ed25519 (possède une clé privée)
  2. 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 base58Un 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 keys
const keypairSigner = await generateKeyPairSigner();
console.log(keypairSigner);
Console
Click to execute the code.

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

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 :

ChampTypeDescription
lamportsu64Solde en lamports. Le propriétaire peut débiter ; tout programme peut créditer.
dataVec<u8>État du compte ou bytecode du programme. Max 10 Mio. Modifiable uniquement par le propriétaire.
ownerPubkeyProgramme avec accès en écriture. Réassignable uniquement lorsque les données sont remises à zéro.
executableboolTrue = program account.
rent_epochEpochObsolète. Défini sur u64::MAX pour les comptes exempts de 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,
}

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 :

  1. Récupérer le compte par son adresse.
  2. Désérialiser le champ data des 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 data du compte
  • Déduire des lamports du champ lamports du 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.

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 :

  1. Récupérer le compte par son adresse.
  2. Désérialiser le champ data des 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 data du compte
  • Déduire des lamports du champ lamports du 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.

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?

Table des matières

Modifier la page

Géré par

© 2026 Fondation Solana.
Tous droits réservés.
Restez connecté