Activos en Solana

Los tokens son activos digitales que representan la propiedad sobre diversas categorías de activos. La tokenización permite la digitalización de los derechos de propiedad. Los tokens en Solana se denominan tokens SPL (Solana Program Library).

The Token Program updates a mint and its token accounts while owners authorize balance changes

Esta sección cubre los conceptos básicos de cómo se representan los tokens en Solana. Consulta la sección SPL Token Basics para ejemplos de código.

Puntos clave

  • Token Programs contiene toda la lógica de instrucciones para interactuar con tokens en la red (tanto fungibles como no fungibles).

  • Una mint account representa un token específico y almacena metadatos globales sobre el token, como el suministro total y la autoridad de acuñación (dirección autorizada para crear nuevas unidades de un token).

  • Una token account rastrea la propiedad individual de tokens para una mint account específica y un propietario específico.

  • Una associated token account es una token account creada con una dirección derivada de las direcciones del propietario y la mint account.

Token Programs

El ecosistema de Solana tiene dos Token Programs principales. Código fuente para ambos programas a continuación.

Token Programs contiene toda la lógica de instrucciones para interactuar con tokens en la red (tanto fungibles como no fungibles). Todos los tokens en Solana son efectivamente cuentas de datos propiedad de un Token Program.

Token ProgramToken Program

Mint account

Los tokens en Solana se identifican de forma única por la dirección de una mint account propiedad del Token Program. Esta cuenta actúa como un contador global para un token específico y almacena datos como:

  • Supply: Suministro total del token
  • Decimals: Precisión decimal del token
  • Mint authority: La cuenta autorizada para crear nuevas unidades del token, aumentando el suministro
  • Freeze authority: La cuenta autorizada para congelar tokens en una Token Account, impidiendo que sean transferidos o quemados

La autoridad de acuñación se configura cuando se inicializa el mint. Autoriza la acuñación futura, pero no tiene que ser la cuenta que creó o pagó por el mint account.

Cuenta MintCuenta Mint

Los detalles completos almacenados en cada cuenta mint incluyen lo siguiente:

Mint Account State
pub struct Mint {
/// Optional authority used to mint new tokens. The mint authority may only
/// be provided during mint creation. If no mint authority is present
/// then the mint has a fixed supply and no further tokens may be
/// minted.
pub mint_authority: COption<Pubkey>,
/// Total supply of tokens.
pub supply: u64,
/// Number of base 10 digits to the right of the decimal place.
pub decimals: u8,
/// Is `true` if this structure has been initialized
pub is_initialized: bool,
/// Optional authority to freeze token accounts.
pub freeze_authority: COption<Pubkey>,
}

Como referencia, aquí hay un enlace de Solana Explorer a la cuenta mint de USDC.

Token Account

El Token Program crea Token Accounts para rastrear la propiedad individual de cada unidad de token. Una Token Account almacena datos como:

  • Mint: El token del cual la Token Account mantiene unidades
  • Owner: La cuenta autorizada para transferir tokens desde la Token Account
  • Amount: Número de tokens que la Token Account mantiene actualmente

Token AccountToken Account

Los detalles completos almacenados en cada Token Account incluyen lo siguiente:

Token Account State
pub struct Account {
/// The mint associated with this account
pub mint: Pubkey,
/// The owner of this account.
pub owner: Pubkey,
/// The amount of tokens this account holds.
pub amount: u64,
/// If `delegate` is `Some` then `delegated_amount` represents
/// the amount authorized by the delegate
pub delegate: COption<Pubkey>,
/// The account's state
pub state: AccountState,
/// If is_native.is_some, this is a native token, and the value logs the
/// rent-exempt reserve. An Account is required to be rent-exempt, so
/// the value is used by the Processor to ensure that wrapped SOL
/// accounts do not drop below this threshold.
pub is_native: COption<u64>,
/// The amount delegated
pub delegated_amount: u64,
/// Optional authority to close the account.
pub close_authority: COption<Pubkey>,
}

Una wallet necesita una token account para cada token (mint) que desee mantener, con la dirección de la wallet establecida como propietaria de la token account. Cada wallet puede poseer múltiples token accounts para el mismo token (mint), pero una token account solo puede tener un propietario y mantener unidades de un token (mint).

Relación de CuentasRelación de Cuentas

Ten en cuenta que los datos de cada token account incluyen un campo owner que identifica quién tiene autoridad sobre el token account. Esto difiere del propietario del programa especificado en el tipo base Account, que es el Token Program para todos los token accounts.

Associated Token Account

Las associated token accounts simplifican el proceso de encontrar la dirección de una token account para un mint y propietario específicos. Piensa en la associated token account como la token account "predeterminada" para un mint y propietario específicos.

Una associated token account se crea con una dirección derivada de la dirección del propietario y la dirección de la mint account. Es importante entender que una associated token account es simplemente una token account con una dirección específica.

Esto introduce un concepto clave en el desarrollo de Solana: Program Derived Address (PDA). Un PDA deriva una dirección de forma determinista usando entradas predefinidas, lo que facilita encontrar la dirección de una cuenta.

Associated Token AccountAssociated Token Account

Ten en cuenta que cada billetera necesita su propia token account para mantener tokens del mismo mint.

Relación de Cuentas ExpandidaRelación de Cuentas Expandida

Is this page helpful?

Tabla de Contenidos

Editar Página