Una cuenta es la unidad de datos fundamental de Solana para almacenar estado. La red almacena todo el estado en un almacén clave-valor (key-value) donde cada clave es una dirección de 32 bytes y cada valor es una cuenta.
Diagrama de 3 cuentas y sus direcciones. Incluye la definición de estructura de cuenta.
Estructura de cuenta
Direcciones de cuenta (clave pública, PDA), los cinco campos que contiene cada cuenta, balance de almacenamiento y el campo rent obsoleto, con un recorrido interactivo por el código.
Tipos de cuenta
Cuentas de programa (código ejecutable), cuentas de datos (estado del programa), cuentas del sistema y sysvars (estado a nivel de clúster).
Reglas de modificación
Reglas aplicadas por el runtime para lamports, datos, propietario, flag ejecutable y préstamos.
Runtime de cuenta
Validación de carga de cuenta, formato de serialización BPF y deserialización.
Datos clave
- Estructura: Cada cuenta tiene los mismos cinco campos: lamports, data, owner, executable, rent_epoch.
- Dirección: Cada cuenta se identifica mediante una dirección única de 32 bytes (ya sea una clave pública Ed25519 o un PDA).
- Propiedad: Solo el programa propietario de la cuenta puede modificar sus datos o debitar lamports. Cualquier programa puede acreditar lamports a cualquier cuenta que se pueda escribir.
- Almacenamiento de cuenta: cada cuenta debe mantener un saldo mínimo de lamport reembolsable proporcional a su tamaño de datos para permanecer en la cadena.
Límites
| Límite | Valor | Fuente |
|---|---|---|
| Tamaño máximo de datos de cuenta | 10 MiB (10,485,760 bytes) | MAX_ACCOUNT_DATA_LEN |
| Crecimiento máximo de datos por instrucción | 10 KiB (10,240 bytes) | MAX_PERMITTED_DATA_INCREASE |
| Crecimiento máximo de datos por transacción | 20 MiB (20,971,520 bytes) | MAX_ACCOUNT_DATA_GROWTH_PER_TRANSACTION |
| Sobrecarga base de almacenamiento de cuenta | 64 bytes por cuenta | TRANSACTION_ACCOUNT_BASE_SIZE |
| Tamaño de dirección | 32 bytes (clave pública Ed25519) | -- |
| Saldo mínimo de almacenamiento (fórmula) | (account_size + 128) * 3,480 lamports/byte-año * 2 años | minimum_balance() |
Is this page helpful?