---
title: "¿Qué es una cuenta de token asociada (associated token account) en Solana?"
description: "Aprende qué es una cuenta de token asociada, cómo funciona y cómo crear una"
---

# ¿Qué es una cuenta de token asociada (associated token account) en Solana?

El [Solana Account Model](https://www.alchemy.com/overviews/solana-account-model) organiza y almacena todos los datos on-chain, y las Associated Token Accounts \(ATAs\) son una de las piezas clave de ese modelo. Este artículo explicará qué es una ATA, cómo funciona, y cómo crear una Associated Token Account para ti mismo.

## **¿Qué es una associated token account?**

**Una Associated Token Account se crea a través del Solana Associated Token Account Program, que contiene información sobre un token específico, su balance, y su propietario.** Es una variante de una [Program Derived Address](https://www.alchemy.com/overviews/program-derived-address).

Esto es lo que significa cada término:

- **Associated Token Account** - una cuenta que está asociada a un token \(piensa en el Solana Token Program\)
- **Program Derived Address** - una dirección que ha sido "derivada" \(creada\) a partir de un Solana Program, específicamente, el Associated Token Account Program

### ¿Cómo funcionan las associated token accounts y las transferencias entre ellas?

**Las transferencias entre Associated Token Accounts ocurren directamente entre las cuentas, e indirectamente a través de sus direcciones de wallet.**

Las token accounts son el equivalente a un token ERC-20 en Ethereum, pero con una diferencia fundamental: los smart contracts de Ethereum poseen su estado y código, mientras que una token account en Solana contiene solo su código y "exporta" su estado \(por ejemplo, el balance del token\) hacia una Associated Token Account, que se crea para cada propietario de ese token.

**Examinemos rápidamente USDC para tener una visión general de lo que hemos aprendido hasta ahora:**

- USDC en Solana es una token account
- Una token account es creada por el [System Program](https://www.alchemy.com/overviews/solana-data-vs-program-accounts) pero inicializada como Token mint por el SPL Token Program
- Una vez que el token USDC ha sido inicializado, los usuarios pueden comenzar a hacer transferencias
- Los usuarios con tokens USDC tienen Associated Token Accounts que se crean a través del Associated Token Account Program \(ATP\)
- El intercambio de USDC entre dos personas ocurre entre las ATAs de los usuarios

<ImageBlock
  src="https://media.alchemy.com/1703696237-associated-token-account-on-solana.jpg"
  alt="Diagrama de una transferencia de USDC entre Associated Token Accounts en Solana"
  width={1600}
  height={901}
  caption="Associated Token Account en Solana"
/>

Las transferencias de USDC ocurren directamente entre las ATAs de los usuarios e indirectamente entre sus direcciones de wallet en [Solana nodes](https://www.alchemy.com/overviews/solana-nodes). Estas transferencias deben ser entre usuarios cuyas ATAs se hayan creado con la misma semilla de token mint.

## **¿Qué es el associated token account program?**

Al ser parte de la [**Solana Program Library**](https://www.alchemy.com/overviews/solana-program-library), el Associated Token Account Program es el programa padre de cada ATA, y mapea la wallet de un usuario a las ATAs sobre las que tiene autoridad. Adicionalmente, el ATA Program asegura que si un usuario quiere enviar un token a otro usuario, el destinatario lo recibirá, incluso si no tiene una ATA para el token correspondiente. En este caso, el programa creará automáticamente una cuenta ATA mientras el smart contract se ejecuta en un [RPC node](https://www.alchemy.com/overviews/solana-rpc).

El código fuente del Associated Token Account Program está escrito en Rust y se puede revisar en [GitHub](https://github.com/solana-labs/solana-program-library).

Así es como se crea una ATA por debajo en TypeScript:

<ImageBlock
  src="https://media.alchemy.com/1703696380-creating-associated-account-source-code.jpg"
  alt="Código fuente para crear el Associated Account Program en Solana"
  width={1600}
  height={1338}
  caption="Código fuente para crear el Associated Account Program en Solana"
/>

### **¿Cómo funciona el associated token account program?**

Esto es lo que sucede en el ATA program:

#### **1. Obtener IDs para las constantes**

Primero, obtenemos las constantes \`TOKEN_PROGRAM_ID\` y \`SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID\`. Un program ID es otro nombre para la dirección del programa.

#### **2. Obtener la función findAssociatedTokenAddress**

Luego, procedemos con la función \`findAssociatedTokenAddress\`, que devuelve publicKey, la cual será la dirección de la ATA recién creada.

#### **3. Invocar el método findProgramAddress**

En el cuerpo de la función, se invoca el método \`findProgramAddress\` y se le pasan dos argumentos:

- Un Array de Seeds
- SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID

Dado que ATA es una forma de Program Derived Address \(PDA\), la cuenta puede crearse pasando argumentos al programa. La creación de una PDA implica pasar seeds como argumentos, y en este caso son:

1. **wallet_address** - la dirección de la cuenta que será propietaria de los fondos en la ATA \(authority\)
1. **token_program_id** - el program ID del SPL Token Program
1. **token_mint_address** - la dirección de la Token account que se almacenará en la ATA

El ID del Associated Token Account Program es SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID.

## **Cómo crear una associated token account**

Crear una Associated Token Account es tan simple como llamar a create-token usando el spl-token-cli en Solana. Crear una ATA también asume que el token con el que se "asociará" ya existe.

<ImageBlock
  src="https://media.alchemy.com/1703696504-creating-associated-token-account-on-solana.jpg"
  alt="Creación de una associated token account en Solana"
  width={1600}
  height={749}
  caption="Creación de una associated token account en Solana"
/>

El código invoca el comando \`create-account\`, que acepta \`&lt;TOKEN_MINT_ADDRESS&gt;\` como argumento.

Para crear una Associated Token Account, debes seguir estos cuatro pasos:

1. Transferir SOL - el System Program inicializa la ATA y la hace rent-exempt
1. Crear espacio libre - el System Program asigna espacio libre para la ATA.
1. Transferir la propiedad - el System Program transfiere la propiedad de la cuenta al SPL Associated Token Account Program
1. Inicializar la cuenta - el proceso resume la inicialización de la cuenta y establece la dirección del token, la dirección de la ATA recién creada, y su propietario

### **¿Cuál es la diferencia entre owners y authorities?**

*Owner* es el tipo de programa de Solana que controla la ATA, mientras que *authority* es la cuenta \(wallet\) que envía una transacción al programa owner, el cual luego cambia los datos en la ATA en nombre de la authority.

### **¿Cuál es el costo de una associated token account?**

Por defecto, las Associated Token Accounts deben marcarse como [**rent-exempt**](https://www.alchemy.com/overviews/how-to-calculate-rent-for-solana-programs) al momento de su creación, por lo que el monto mínimo que una cuenta debe mantener debe ser de al menos 0.00203928 SOL. El System Program transfiere este SOL a la ATA, monto que se deduce de la cuenta que inicia la transacción.

Aparte de esa tarifa inicial, cualquier interacción posterior no costará más que una transacción ordinaria en Solana.

### **Cómo revisar una associated token account**

**Puedes revisar una Associated Token Account a través de clientes como Phantom, que derivan automáticamente todas las ATAs sobre las que la wallet de un usuario tiene autoridad.** Adicionalmente, dado que la blockchain es pública, también puedes acceder a esta información con la ayuda de un explorador como Solscan.io.

Pega la dirección de la wallet que te gustaría revisar y sus ATAs se visualizarán bajo Token Accounts:

<ImageBlock
  src="https://media.alchemy.com/1703696658-solscan-interface.png"
  alt="Interfaz de Solscan.io para revisar las ATAs de una wallet"
  width={1600}
  height={785}
  caption="Interfaz de Solscan.io para revisar las ATAs de una wallet"
/>

### **¿Se puede vincular una associated token account a una cuenta existente?**

**Vincular una Associated Token Account a una cuenta existente se hace por defecto detrás de escena. Debido a la forma en que se crea una ATA, un programa o un cliente puede ver fácilmente las seeds de cada cuenta.** Podrían considerarse como 'enlaces' a:

- la wallet que tiene autoridad sobre la ATA.
- la dirección de la Token account \(es decir, el tipo de token que contiene la ATA\).

## **Construye tu app de Solana con Alchemy**

Aprender sobre la Associated Token Account es uno de los primeros pasos para convertirse en un desarrollador de Solana completo. Puedes usar nuestra [Solana API](https://www.alchemy.com/docs/reference/solana-api-quickstart), fácil de usar, para tomar ventaja en la construcción de tu primera dApp una vez que hayas dominado los Solana nodes y hayas elegido un proveedor de RPC.

## Preguntas frecuentes

### ¿Qué es una associated token account \(ATA\) en Solana?

Una Associated Token Account se crea a través del Solana Associated Token Account Program y contiene información sobre un token específico, su balance, y su propietario. Es una variante de una Program Derived Address que mapea la wallet de un usuario a tokens específicos.

### ¿En qué se diferencia una ATA de una token account regular?

Las token accounts en Solana contienen solo código y "exportan" su estado hacia Associated Token Accounts, que se crean para cada propietario de ese token. Las ATAs son direcciones derivadas de forma determinística, vinculadas tanto a una wallet como a un token mint específico.

### ¿Qué es el associated token account program?

El Associated Token Account Program es parte de la Solana Program Library y mapea la wallet de un usuario a las ATAs sobre las que tiene autoridad. Crea automáticamente cuentas ATA cuando los usuarios envían tokens a destinatarios que no tienen una ATA para ese token.

### ¿Cuánto cuesta crear una associated token account?

Las ATAs deben ser rent-exempt al momento de su creación, lo que requiere un balance mínimo de 0.00203928 SOL. Este monto se transfiere desde la cuenta que inicia la transacción y cubre los requisitos de rent continuos.

### ¿Qué seeds se usan para derivar la dirección de una ATA?

Las direcciones de las ATAs se derivan usando tres seeds: la dirección de la wallet \(authority\), el program ID del token, y la dirección del token mint. Estas se pasan al Associated Token Account Program para crear la dirección determinística.

### ¿Cómo creo una associated token account?

Puedes crear una ATA usando el spl-token-cli, llamando al comando \`create-account\` con la dirección del token mint como argumento. El proceso implica transferir SOL, crear espacio, transferir la propiedad, e inicializar la cuenta.

### ¿Cómo puedo revisar mis associated token accounts?

Puedes ver tus ATAs a través de wallets como Phantom, que derivan automáticamente todas las ATAs sobre las que tu wallet tiene autoridad, o usar exploradores de blockchain como Solscan.io buscando tu dirección de wallet y revisando la sección Token Accounts.

### ¿Qué sucede cuando envío tokens a alguien que no tiene una ATA?

El Associated Token Account Program crea automáticamente la ATA del destinatario durante la transferencia si no existe, deduciendo el monto de SOL rent-exempt de la cuenta del remitente para financiar la nueva ATA.
