Dans les systèmes blockchain traditionnels, les utilisateurs pensent généralement en termes de « portefeuilles » et de « contrats intelligents ». Sur Solana, cependant, presque tout tourne autour des comptes . Les programmes, les jetons, les NFTs, les soldes des utilisateurs et même le code exécutable sont tous stockés dans différents types de comptes.
Comprendre l'architecture des comptes Solana est essentiel pour les développeurs construisant sur le réseau. Comparé au modèle de stockage de contrats d'Ethereum, le système de comptes de Solana est plus explicite, modulaire et optimisé pour une exécution parallèle haute performance.
Cet article explique les principaux types de comptes Solana, comment ils fonctionnent en interne et pourquoi ils sont critiques pour l'évolutivité de Solana.
Qu'est-ce qu'un compte dans Solana ?
Un compte Solana est essentiellement un conteneur qui stocke :
- Des soldes de SOL
- Données d'état du programme
- Code exécutable
- Informations sur la propriété des tokens
- Métadonnées
Chaque morceau de données on-chain existe à l'intérieur d'un compte.
Contrairement à Ethereum, où les contrats intelligents détiennent directement un stockage interne, Solana sépare le stockage de données des programmes exécutables. Cette séparation est l'une des raisons pour lesquelles Solana peut traiter les transactions en parallèle.
Chaque compte contient :
ChampDescriptionLamportsSolde de SOLPropriétaireProgramme qui contrôle le compteDonnéesDonnées binaires arbitrairesExécutableQue le compte contienne du code exécutable. codeRent EpochRent suivi des collections
Pourquoi Solana utilise des comptesLe runtime de Solana est optimisé pour la vitesse et la concurrence.
Avant qu'une transaction ne s'exécute, Solana exige que la transaction déclare explicitement quels comptes elle lira ou modifiera. Cela permet au runtime de déterminer si les transactions peuvent s'exécuter en parallèle sans conflits.
Les avantages incluent :
- Exécution parallèle massive
- Accès à un état prévisible
- Ambiguïté réduite du runtime
- Débit plus élevé
- Meilleure évolutivité
Ce design est fondamentalement différent du modèle d'état partagé global d'Ethereum.
Il existe plusieurs
des catégories de comptes importants que les développeurs devraient comprendre.
Les comptes système sont le type de compte le plus basique sur Solana.
Ils sont généralement des comptes de portefeuille contrôlés par une paire de clés et appartenant au Programme Système.
Les comptes système peuvent :
- Détenir des SOL
- Envoyer des transactions
- Payer des frais
- Créer de nouveaux comptes
Une adresse de portefeuille nouvellement générée est généralement un compte système.
Exemple :
const accountInfo = await connection.getAccountInfo(publicKey);
Si le propriétaire est le Programme Système, il s'agit probablement d'un compte portefeuille standard.
Les comptes de programme contiennent
code de contrat intelligent exécutable.
Ces comptes sont marqués comme :
executable = true
Contrairement aux contrats Ethereum, les programmes Solana sont généralement sans état. Ils ne stockent pas directement les données utilisateur en interne. Au lieu de cela, ils opèrent sur des comptes de données séparés passés dans les instructions.
Caractéristiques :
PropriétéValeurStocke du code exécutableOuiStocke un état mutableGénéralement nonUpgradeableFacultatifExécutablevrai
Les programmes sont déployés en tant que comptes sur la chaîne.
Des exemples courants incluent :
- Programme de Token
- Programme de Token Associé
- Programmes Metaplex
- Programmes Jupiter
Les comptes de données stockent l'état du programme.
Les programmes lisent et modifient ces comptes pendant leur exécution.
Exemples :
- État de la piscine de liquidité AMM
- Métadonnées NFT
- Informations sur le staking des utilisateurs
- Livres de commandes
- État de gouvernance DAO
Un compte de données est généralement possédé par un programme :
owner = ProgramID
Le programme propriétaire a la permission de modifier les données du compte.
Cette architecture crée une séparation claire entre :
- Logique → Comptes de programme
- État → Comptes de données
Les comptes de jetons sont des comptes spécialisés utilisés par le programme SPL Token.
Contrairement aux soldes ERC-20 d'Ethereum, les soldes des jetons ne sont pas stockés directement. à l'intérieur des portefeuilles. Au lieu de cela, chaque solde de jeton existe dans un compte de jeton séparé.
Un compte de jeton stocke :
ChampDescriptionMintageÀ quel jeton il appartientPropriétairePropriétaire du portefeuilleMontantSolde du jeton
Par exemple :
- Solde USDC
- Solde BONK
- Solde Wrapped SOL
Tout existe dans des comptes de jetons indépendants.
Un compte de jeton associé est un compte de jeton standardisé dérivé de :
Adresse de portefeuille + Mint de jeton
Cela garantit que les utilisateurs disposent d'une adresse de compte de jeton prévisible pour chaque jeton SPL.
Avantages :
- Intégrations de portefeuille plus simples
- Jetons standardisés
- Gestion
- UX simplifiée
La plupart des portefeuilles créent automatiquement des ATAs lors de la réception de jetons.
Les comptes de mint définissent un jeton lui-même.
Ils stockent la configuration au niveau du jeton telle que :
FieldDescriptionSupplyTotal supplyDecimalsPrécisionMint AuthorityQui peut mintFreeze AuthorityQui peut geler
Par exemple, le compte de mint USDC définit :
- Offre totale d'USDC sur Solana
- Précision décimale
- Permissions de mint
Tous les comptes de jetons référencés par ce mint partagent la même définition de jeton.
Les PDAs sont des comptes déterministes générés par des programmes.
Ils n'ont pas de
clés privées.
Au lieu de cela, elles sont entièrement contrôlées par la logique du programme.
Les PDA sont extrêmement importants dans le développement de Solana car ils permettent aux programmes de gérer l'état en toute sécurité.
Exemples de cas d'utilisation :
- Vaults d'utilisateur
- Comptes d'entiercement
- Piscines de liquidité
- Métadonnées NFT
- Registres de staking
Les PDA sont générés à l'aide de :
PublicKey.findProgramAddressSync()
Avantages :
- Adresses déterministes
- Pas de gestion de clé privée
- Propriété sécurisée du programme
- Structure d'état prévisible
Les comptes Sysvar stockent des informations d'exécution au niveau du réseau.
Ce sont des fonctionnalités intégrées
comptes en lecture seule fournis par l'exécution de Solana.
Les exemples incluent :
SysvarPurposeClockHorodatage actuel et slotRentParamètres de loyerEpochScheduleInformations sur l'époqueRecentBlockhashesHachages de bloc récents
Les programmes utilisent des sysvars pour accéder au contexte de la blockchain.
Exemple :
- Vérification du slot actuel
- Calcul des récompenses de staking
- Validation de verrouillage temporel
Sur Solana, le stockage de données consomme des ressources de blockchain.
Les comptes doivent maintenir un solde minimum de SOL appelé :
Solde exempt de loyer
Si le solde est trop bas, le compte peut éventuellement être supprimé.
Des comptes plus volumineux nécessitent plus de SOL pour reste exempt de loyer.
Exemple :
Type de compteTaille typiqueCompte portefeuillePetitCompte token~165 octetsMétadonnées NFTPlus grandÉtat du pool AMMBeaucoup plus grand
Le loyer encourage une utilisation efficace du stockage sur le réseau.
Solana distingue les comptes en utilisant le drapeau d'exécution.
TypeExécutableCompte portefeuilleNonCompte tokenNonPDANonCompte programmeOui
Seuls les comptes exécutables peuvent traiter des instructions.
Chaque compte a un propriétaire.
Le propriétaire détermine quel programme peut modifier les données du compte.
Exemple :
ComptePropriétaireCompte portefeuilleProgramme systèmeCompte tokenProgramme de token SPLNFT
MetadataMetaplex Program
Les programmes ne peuvent pas modifier arbitrairement des comptes qu'ils ne possèdent pas.
Cela crée de fortes limites de sécurité.
Les différences architecturales sont importantes.
CaractéristiqueSolanaEthereumStockage d'ÉtatComptes séparésStockage interne de contratExécution parallèleOuiLimitéeAccès explicite au compteObligatoireNon requisSoldes de jetonsComptes de jetons séparésStockés dans les contratsProgrammes sans étatCommunRare
Le modèle de Solana est plus complexe au départ, mais permet un débit bien plus élevé.
Un simple transfert de USDC peut impliquer :
- Portefeuille de l'expéditeur
- compte d'expéditeur USDC
- compte de portefeuille du destinataire
- compte de jetons USDC du destinataire
- compte de mint USDC
- Programme de jetons SPL
Cette structure explicite permet à Solana de traiter les transactions de manière efficace et sécurisée.
L'architecture des comptes est l'une des innovations les plus importantes de Solana.
Elle permet :
- Exécution parallèle des transactions
- TPS élevé
- Comportement d'exécution prévisible
- Conception de programmes modulaires
- Gestion efficace de l'état
Pour les développeurs, comprendre les comptes est fondamental pour :
- Écrire des programmes
- Déboguer
- transactions
- Gestion de l'état
- Optimisation de la performance
- Création d'applications décentralisées évolutives