4 minutos de lectura
Resumen
Solana Labs ha lanzado una ampliación del programa de tokens SPL nativo, denominada Token-2022. Token-2022 es un nuevo estándar que amplía el programa de tokens SPL y añade funcionalidades adicionales a través de las «Token Extensions». El programa Token-2022 está diseñado para ser un estándar de tokens más flexible y ampliable que permite una tokenómica más compleja y un mayor control para los desarrolladores.
¿Qué son las extensiones de tokens?
Las extensiones de tokens (también conocidas como Token-2022) son un programa avanzado de tokens en la cadena de bloques de Solana que amplía las capacidades del programa de tokens existente. Está diseñado para ofrecer a los desarrolladores una mayor flexibilidad y funcionalidades adicionales sin comprometer la seguridad de los tokens actuales.
Este programa incluye todas las características de su versión anterior (mantiene la compatibilidad con las instrucciones y los diseños de cuentas originales de Token) y, al mismo tiempo, ofrece nuevas instrucciones y funcionalidades. Estas ampliaciones introducen nuevos campos en las casas de moneda y en las cuentas.
Las extensiones de Mint incluyen actualmente:
| Característica | Descripción |
|---|---|
| Gastos de transferencia | Comisiones (o impuestos) asociadas a la transferencia de tokens. |
| Cierre de la Casa de la Moneda | Permite la cancelación de cuentas vacías de Mint. |
| Tokens que devengan intereses | Tokens que acumulan intereses con el paso del tiempo. |
| Tokens no transferibles | Los tokens no se pueden transferir una vez emitidos (también conocidos como «tokens vinculados al alma»). |
| Delegados permanentes | Esta autoridad tiene privilegios de delegación ilimitados sobre cualquier cuenta de esa casa de emisión, lo que significa que puede quemar o transferir cualquier cantidad de tokens. |
| Gancho de transferencia | Un programa que debe interactuar con una instrucción de token (por ejemplo, la ejecución de regalías) |
| Puntero de metadatos | Un puntero a una cuenta de metadatos que contiene información sobre la casa de la moneda. |
| Metadatos | Almacena información sobre la casa de la moneda, como el nombre, el símbolo y el logotipo (u otros campos personalizados). |
| (aún no disponible) Transferencias confidenciales | Permite la transferencia de tokens con importes cifrados. |
Actualmente, las extensiones de cuenta incluyen:
| Característica | Descripción |
|---|---|
| Se requiere una nota explicativa en las transferencias entrantes | Todas las transferencias entrantes deben ir acompañadas de una nota (al igual que en una cuenta bancaria). |
| Propiedad inmutable | Una vez establecido, el titular de una cuenta no se puede cambiar. |
| Estado predeterminado de la cuenta | Condiciones preestablecidas que se aplican a la cuenta. |
| CPI Guard | Prohíbe determinadas acciones en las invocaciones entre programas |
Es importante señalar que el Programa de Tokens Asociados no ha sufrido cambios, lo que significa que puede utilizarse tanto con el Programa de Tokens original como con el Programa de Tokens-2022. Sin embargo, para utilizar los métodos, programas e instrucciones existentes, tendrás que pasar el Token-2022 ID del programa como el programId parámetro. Por ejemplo, veamos el getAssociatedTokenAddressSync del @solana/spl-token biblioteca:
/**
* Get the address of the associated token account for a given mint and owner
*
* @param mint Token mint account
* @param owner Owner of the new account
* @param allowOwnerOffCurve Allow the owner account to be a PDA (Program Derived Address)
* @param programId SPL Token program account
* @param associatedTokenProgramId SPL Associated Token program account
*
* @return Address of the associated token account
*/
export function getAssociatedTokenAddressSync(
mint: PublicKey,
owner: PublicKey,
allowOwnerOffCurve = false,
programId = TOKEN_PROGRAM_ID,
associatedTokenProgramId = ASSOCIATED_TOKEN_PROGRAM_ID
): PublicKey {
if (!allowOwnerOffCurve && !PublicKey.isOnCurve(owner.toBuffer())) throw new TokenOwnerOffCurveError();
const [address] = PublicKey.findProgramAddressSync(
[owner.toBuffer(), programId.toBuffer(), mint.toBuffer()],
associatedTokenProgramId
);
return address;
}
Como puedes ver más arriba, el getAssociatedTokenAddressSync La función toma como argumento un programId parámetro cuyo valor por defecto es el ID original del programa Token (algo habitual en muchos métodos de tokens SPL). Para utilizar el programa Token-2022, debes introducir el ID del programa Token-2022 como el programId parámetro. El ejemplo siguiente muestra la derivación de las direcciones ATA tanto para el programa Token original como para el programa Token-2022:
import { TOKEN_2022_PROGRAM_ID, getAssociatedTokenAddressSync } from "@solana/spl-token";
// ...
const mint: PublicKey = new PublicKey(SOME_TOKEN_MINT); // a mint of a token created with the original standard
const mint2022: PublicKey = new PublicKey(SOME_TOKEN_MINT_2022); // a mint of a token created with the Token-2022 standard
const ataOld = getAssociatedTokenAddressSync(mint, owner, false);
const ata2022 = getAssociatedTokenAddressSync(mint2022, owner, false, TOKEN_2022_PROGRAM_ID); // 👈 pass in the Token-2022 program ID
Ten en cuenta que para mint2022, tuvimos que pasar por el TOKEN_2022_PROGRAM_ID (TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb) como el programId parámetro.
El programa de 2022 aún se encuentra en fase de auditoría, pero está disponible para pruebas y desarrollo.
Cómo empezar a utilizar las extensiones de tokens
Echa un vistazo a nuestras guías sobre cómo dar los primeros pasos con el programa Token-2022:
¡Nos encanta recibir comentarios!
Si tienes algún comentario o sugerencia sobre nuevos temas, no dudes en hacérnoslo saber. Nos encantaría saber tu opinión.
