Un compte est l'unité de données fondamentale de Solana pour stocker l'état. Le réseau stocke tout l'état dans un magasin clé-valeur (key-value) où chaque clé est une adresse de 32 octets et chaque valeur est un compte.
Diagramme de 3 comptes et leurs adresses. Inclut la définition de la structure de compte.
Structure de compte
Les adresses de compte (clé publique, PDA), les cinq champs que contient chaque compte, le solde de stockage, et le champ rent obsolète, avec un parcours de code interactif.
Types de comptes
Comptes de programme (code exécutable), comptes de données (état du programme), comptes système et sysvars (état à l'échelle du cluster).
Règles de modification
Règles appliquées par le runtime pour les lamports, les données, le propriétaire, le flag exécutable et les emprunts.
Runtime de compte
Validation du chargement de compte, format de sérialisation BPF et désérialisation.
Faits clés
- Structure : Chaque compte possède les mêmes cinq champs : lamports, données, propriétaire, exécutable, rent_epoch.
- Adresse : Chaque compte est identifié par une adresse unique de 32 octets (soit une clé publique Ed25519, soit un PDA).
- Propriété : Seul le programme propriétaire du compte peut modifier ses données ou débiter des lamports. N'importe quel programme peut créditer des lamports sur un compte inscriptible.
- Stockage de compte : Chaque compte doit détenir un solde minimum remboursable en lamport proportionnel à la taille de ses données pour rester onchain.
Limites
| Limite | Valeur | Source |
|---|---|---|
| Taille maximale des données de compte | 10 Mio (10 485 760 octets) | MAX_ACCOUNT_DATA_LEN |
| Croissance maximale des données par instruction | 10 Kio (10 240 octets) | MAX_PERMITTED_DATA_INCREASE |
| Croissance maximale des données par transaction | 20 Mio (20 971 520 octets) | MAX_ACCOUNT_DATA_GROWTH_PER_TRANSACTION |
| Surcharge de stockage de base du compte | 64 octets par compte | TRANSACTION_ACCOUNT_BASE_SIZE |
| Taille d'adresse | 32 octets (clé publique Ed25519) | -- |
| Solde de stockage minimum (formule) | (account_size + 128) * 3 480 lamports/octet-an * 2 ans | minimum_balance() |
Is this page helpful?