---
title: "¿Qué es el modelo de cuentas de Solana?"
description: "Conoce el modelo de cuentas de Solana, los diferentes tipos de cuentas y cómo funcionan juntas"
---

# ¿Qué es el modelo de cuentas de Solana?

Todo en Solana puede considerarse una cuenta, y las cuentas son la forma en que el protocolo "organiza" los datos en la blockchain. Este artículo ofrece una visión general del Account Model de Solana, incluyendo tipos y categorías, componentes de las cuentas, y el concepto de "rent".

## **¿Qué es una cuenta de Solana y cómo funciona?**

**Las cuentas de Solana pueden entenderse como contenedores de almacenamiento, capaces de guardar cualquier tipo de dato: desde tokens como SOL hasta variables de estado de un programa \(por ejemplo, enteros, strings, claves públicas\), e incluso programas completos.** Cada cuenta tiene un owner específico, y un mismo owner puede tener muchas cuentas distintas.

El Account Model suele compararse con un sistema de archivos de una computadora:

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Archivo de computadora", dataType: "object" },
      { key: "2", width: 200, title: "Cuenta de Solana", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>Nombre</p>", tooltip: "", icon: "" },
        "2": { title: "<p>lamports</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>Dirección</p>", tooltip: "", icon: "" },
        "2": { title: "<p>owner</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p>Email</p>", tooltip: "", icon: "" },
        "2": { title: "<p>rent_epoch</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p>Experiencia</p>", tooltip: "", icon: "" },
        "2": { title: "<p>executable</p>", tooltip: "", icon: "" },
        id: 3,
      },
      {
        "1": { title: "<p>GeorgeBrownCV.docx</p>", tooltip: "", icon: "" },
        "2": { title: "<p>0cnjSElkwFlkffjckDSJRU432RIANCLk</p>", tooltip: "", icon: "" },
        id: 4,
      },
    ],
  }}
/>

## **¿Cuáles son los tipos de cuentas de Solana?**

Los tipos de cuentas de Solana son principalmente dos: executable y non-executable. Esto se debe a que los programas de Solana no almacenan estado como lo hacen los smart contracts de Ethereum, por lo que es necesario separar ambos tipos de acciones.

### **¿Qué son los programas ejecutables (executable)?**

Los programas ejecutables están compuestos por código inmutable que posee y crea otras cuentas que almacenan el estado. Ese código se escribe en un lenguaje como **Rust** y luego se compila a eBPF, que es una forma de bytecode.

El ejemplo más común de programa ejecutable es el System Program principal de Solana, responsable de la creación de las cuentas \(wallets\) que las personas usan para acceder a sus tokens y NFTs.

### **¿Qué son los programas no ejecutables (non-executable)?**

Los programas no ejecutables son cuentas de "almacenamiento" que contienen todos los demás tipos de datos, como variables de programa, balances de tokens, NFTs, monedas fungibles, etc. A través de las cuentas no ejecutables, el protocolo refleja los cambios de estado que ocurren después de cada transacción.

### **Smart contracts de Ethereum vs. programas de Solana**

Un smart contract viene con un compartimento especial predefinido llamado "[storage](https://www.alchemy.com/docs/smart-contract-storage-layout)" donde se almacenan sus variables de estado. Los smart contracts usan luego su código ejecutable para modificar esas variables de estado. Un contrato de Ethereum puede verse como un lugar unificado donde coexisten código ejecutable y no ejecutable.

Tomemos el token USDC como ejemplo. Su contrato contiene un mapping llamado "balances" que asocia la dirección de un usuario con su cantidad de USDC. Al enviar o recibir tokens USDC, el contrato refleja los cambios por sí mismo gracias a su código ejecutable.

Solana maneja esto de una forma distinta. Existe un programa de token USDC que crea una nueva cuenta para cada holder individual de tokens. Estas cuentas almacenan la cantidad de USDC disponible del holder. Cuando un usuario propaga una transacción, la cuenta del USDC Token busca las cuentas de token asociadas de los usuarios que quieren realizar el intercambio y luego refleja el cambio en ellas.

<ImageBlock
  src="https://media.alchemy.com/1703697343-solana-associated-token-account-structure.png"
  alt="Diagrama del programa de tokens de Solana creando cuentas de tokens asociadas que contienen el saldo de USDC de cada usuario"
  width={1600}
  height={901}
  caption="Estructura de cuentas de tokens asociadas de Solana"
/>

## **¿Cuáles son las categorías de cuentas de Solana?**

Las cuentas ejecutables y no ejecutables pueden dividirse en varias categorías adicionales, como native programs, [program accounts, y data accounts](https://www.alchemy.com/overviews/solana-data-vs-program-accounts).

### **¿Qué son los native programs ejecutables?**

**Los native programs ejecutables son "nativos" del [ecosistema de Solana](https://www.alchemy.com/dapps/ecosystem/solana) y son responsables de tareas como mantener y ejecutar los nodos validadores. El ejemplo más conocido de este tipo es el System Program**, encargado de crear nuevas system accounts \(lo que comúnmente conocemos como "wallets"\), transferir SOL, etc. Otras instancias de Native Programs son el **Stake Program**, responsable del mecanismo de staking, y el BPF Loader, similar al EVM de Ethereum.

### **¿Qué son las program accounts ejecutables?**

Las program accounts ejecutables son programas de Solana preconstruidos que crean y almacenan otros programas. Un buen ejemplo de esto es la [Solana Program Library](https://www.alchemy.com/overviews/solana-program-library) \(SPL\) — una colección de programas que soportan diversas actividades on-chain, incluyendo la creación, intercambio y préstamo de tokens, la generación de stake pools, y el mantenimiento de un name service on-chain. Un representante destacado de la SPL es el **Token Program**, que crea y administra tokens.

El token USDC de Solana es simplemente una Token account, administrada por el Token Program. Sin embargo, la Token account no almacena los balances de tokens de los usuarios. Esto lo maneja un miembro del tercer tipo de cuentas: **data accounts.**

### **¿Qué son las data accounts no ejecutables?**

Mientras que los Native Programs y las Program accounts se consideran ejecutables, las data accounts son lo opuesto: son un registro que refleja los cambios de estado de programas específicos y del protocolo de Solana en su conjunto.

Las data accounts pueden dividirse en:

1. **Token accounts** - cuentas creadas por el Token Program
1. **Associated Token Accounts \(ATA\)** - cuentas que almacenan los balances de tokens de cada usuario individual
1. **System Owned Accounts** - almacenan datos y permiten la firma de transacciones

Las Token accounts representan cada moneda fungible individual \(USDC, USDT, etc.\), y contienen información básica del token como el supply, el número de decimales, el nombre, etc. Para cada Token account única se genera una [associated token account \(ATA\)](https://www.alchemy.com/overviews/associated-token-account) distinta. Por ejemplo, si tienes tanto USDC como USDT, tienes acceso a dos ATAs, creadas por las Token accounts de USDC y USDT respectivamente.

<ImageBlock
  src="https://media.alchemy.com/1703697445-solana-account-types-and-categories.png"
  alt="Diagrama de categorías de cuentas de Solana: programas nativos, cuentas de programa y cuentas de datos"
  width={1600}
  height={901}
  caption="Tipos y categorías de cuentas de Solana"
/>

## **¿Cuáles son los elementos de una cuenta de Solana?**

**Cada elemento de una cuenta es un conjunto de metadata, para que el protocolo pueda entender fácilmente el tipo de cuenta e información adicional.** La metadata consiste en:

- **lamports** - el balance de SOL de la cuenta, denominado en lamports, donde 1 lamport equivale a la mil millonésima parte de un token SOL
- **owner** - la dirección del programa que posee la cuenta
- **executable** - una variable booleana que indica si la cuenta contiene código ejecutable
- **data** - el array de bytes de datos crudos almacenado en la cuenta, ya sean variables de almacenamiento o código ejecutable
- **rent_epoch** - indica el próximo epoch en el que la cuenta deberá pagar rent

La diferencia entre un **owner** y un **holder** es que el owner es el programa que controla la cuenta, mientras que el holder es el usuario que posee la clave privada de la cuenta. Por ejemplo, la System Owned Account es propiedad del Native System Program de Solana.

### **¿Qué es el rent de una cuenta en Solana?**

Cada cuenta [**paga una tarifa de rent**](https://www.alchemy.com/overviews/how-to-calculate-rent-for-solana-programs) para usar memoria en la blockchain, y esto es una medida preventiva para evitar que atacantes saturen la red usando toda su memoria.

Para que una blockchain satisfaga a todos sus usuarios, debe incluir algún tipo de incentivo económico. Esto aplica especialmente a los validadores, quienes proporcionan su hardware y poder computacional para verificar todas las transacciones. Los validadores necesitan mantener una copia funcional de todos los cambios de estado y reciben rent como recompensa.

Una cuenta que mantiene un balance mínimo equivalente a 2 años de tarifas de rent está exenta. Si no, se le cobra cuando es referenciada por una transacción o en cada epoch, lo que actualmente equivale a dos días. Si una cuenta no contiene la cantidad mínima de SOL para estar exenta de rent, sus datos se eliminan de la chain.

## **Cómo crear una cuenta de Solana**

Crear una System Account en Solana es lo que hacen las [**wallets de Solana**](https://www.alchemy.com/overviews/solana-wallets) en segundo plano cada vez que un usuario crea una nueva "wallet". Una wallet crea una nueva cuenta generando un keypair de 64 bytes que se ubica sobre una curva elíptica ED25519. Los primeros 32 bytes son la clave privada, que se usa cuando el usuario quiere crear una transacción e interactuar con otra cuenta o programa. El segundo conjunto de 32 bytes es la clave pública de la wallet.

## **Empieza a construir en Solana**

El Account Model es el sistema que usa el protocolo de Solana para organizar datos. Las cuentas pueden entenderse como contenedores de almacenamiento, capaces de guardar de todo: desde datos crudos, código y variables de estado, hasta balances de tokens, NFTs, etc. Las cuentas son de 2 tipos principales: executable y non-executable.

Para empezar a construir con Alchemy, [¡abre hoy una cuenta gratuita de desarrollador de Solana](https://dashboard.alchemy.com/signup/?a=solana-account-model)!
