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).
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 Program (Original)
- Capacidad básica de tokens (acuñar, transferir, etc.)
- Inmutable y ampliamente utilizado
Token Extension Program (Token 2022)
- Incluye todas las características del Token Program original
- Añade características a través de "extensiones"
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 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 Mint
Los detalles completos almacenados en cada cuenta mint incluyen lo siguiente:
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 initializedpub 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 Account
Los detalles completos almacenados en cada Token Account incluyen lo siguiente:
pub struct Account {/// The mint associated with this accountpub 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 delegatepub delegate: COption<Pubkey>,/// The account's statepub 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 delegatedpub 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 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 Account
Ten en cuenta que cada billetera necesita su propia token account para mantener tokens del mismo mint.
Relación de Cuentas Expandida
Is this page helpful?