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, máquina de estados de rent, con recorrido de código interactivo.
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 por 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 escribible.
- Rent: Cada cuenta debe mantener un saldo mínimo de lamports 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) | -- |
| Mínimo exento de rent (fórmula) | (account_size + 128) * 3,480 lamports/byte-año * 2 años | minimum_balance() |
Is this page helpful?