Resumen
Las cuentas tienen 5 campos: lamports, data, owner, executable y rent_epoch. Cada cuenta se identifica mediante una dirección única de 32 bytes. Las cuentas deben mantener un saldo mínimo de lamports proporcional al tamaño de sus datos para permanecer en la cadena.
Dirección de cuenta
Cada dirección de cuenta es un valor de 32 bytes, mostrado como una cadena codificada en base58. Una dirección puede ser de dos tipos:
- Clave pública: corresponde a un Ed25519 keypair (tiene una clave privada)
- Program Derived Address (PDA): derivada determinísticamente de un ID de programa y semillas (sin clave privada)
Una cuenta con su dirección de clave pública codificada en base58
Clave pública
Un Keypair consiste en una clave pública (usada como dirección de cuenta)
y una clave privada (usada para firmar transacciones). El siguiente ejemplo
genera un keypair usando el SDK de Solana.
import { generateKeyPairSigner } from "@solana/kit";// Kit does not enable extractable private keysconst keypairSigner = await generateKeyPairSigner();console.log(keypairSigner);
Program Derived Address
Un Program Derived Address (PDA) se deriva determinísticamente de un ID de programa y una o más semillas opcionales. Los PDAs no tienen una clave privada correspondiente. El siguiente ejemplo deriva un PDA usando el SDK de 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}`);
Campos de cuenta
Cada
Account
tiene un tamaño máximo de
MAX_ACCOUNT_DATA_LEN
(10 MiB, equivalente a MAX_PERMITTED_DATA_LENGTH) y contiene cinco campos:
| Campo | Tipo | Descripción |
|---|---|---|
lamports | u64 | Saldo en lamports. El propietario puede debitar; cualquier programa puede acreditar. |
data | Vec<u8> | Estado de cuenta o bytecode del programa. Máx. 10 MiB. Solo escribible por el propietario. |
owner | Pubkey | Programa con acceso de escritura. Reasignable solo cuando los datos están en cero. |
executable | bool | True = program account. |
rent_epoch | Epoch | Obsoleto. Establecido en u64::MAX para cuentas exentas de renta. |
pub struct Account {/// lamports in the accountpub 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,/// deprecatedpub rent_epoch: Epoch,}
Lamports
El campo lamports contiene el saldo de la cuenta en
lamports (1 SOL = 1.000.000.000
lamports).
Cada cuenta debe mantener un saldo mínimo de lamports, conocido como el saldo exento de renta, para mantener sus datos almacenados en cadena. Este saldo es proporcional al tamaño de los datos de la cuenta.
Aunque a menudo se llama "rent", el saldo exento de renta funciona como un depósito reembolsable, el saldo completo se recupera cuando se cierra la cuenta.
Ver
minimum_balance()
y las
constantes
de rent.
Data
El campo data almacena un array de bytes arbitrario. Su contenido depende del
tipo de cuenta:
- Program accounts: Contiene bytecode ejecutable o la dirección de una cuenta de datos de programa que almacena el bytecode.
- Cuentas de datos: Contiene datos de estado definidos por el programa. El programa propietario define el formato de serialización.
Leer datos de cuenta requiere dos pasos:
- Obtener la cuenta por su dirección.
- Deserializar el campo
datade bytes sin procesar a la estructura de datos definida por el programa.
Propietario
El campo owner contiene el ID del programa (clave pública) del programa que
posee esta cuenta.
El programa propietario es el único programa que puede:
- Modificar el campo
datade la cuenta - Deducir lamports del campo
lamportsde la cuenta
Cualquier programa puede agregar lamports a otra cuenta, pero solo el propietario puede deducir lamports de ella.
Para las program accounts, el propietario es el programa cargador de la cuenta.
Ejecutable
El campo executable es un booleano que determina si la cuenta es una
program account o una
data account:
true= program account (contiene código ejecutable)false= data account (almacena estado)
Epoch de rent
El campo rent_epoch está obsoleto.
Anteriormente rastreaba cuándo se deducirían automáticamente lamports de una
cuenta para pagar el mantenimiento de sus datos en la cadena. Dado que la
recolección de rent está obsoleta, rent_epoch se establece en u64::MAX para
todas las nuevas cuentas exentas de rent.
Is this page helpful?