Autoridades
Las acuñaciones de SPL (SPL mints) tienen dos autoridades opcionales: la autoridad de acuñación (para inflar la oferta) y la autoridad de congelación (para congelar cuentas de tokens). Revocar las autoridades es una señal común de inmutabilidad y confianza para los tokens lanzados.
Receta
spl-token display <MINT>
spl-token authorize <MINT> mint --disable
spl-token authorize <MINT> freeze --disableuse anchor_spl::token::{self, SetAuthority};
token::set_authority(
cpi_ctx,
spl_token::instruction::AuthorityType::MintTokens,
None,
)?;Cuándo usar esto:
- Bloquear la oferta fija después de la acuñación inicial
- Eliminar el poder de congelación antes del lanzamiento a la comunidad
- Transferir la autoridad a una PDA de multisig o DAO
- Auditar las suposiciones de confianza de tokens de terceros
Ejemplo Funcional
MINT=<TU_MINT>
# Inspeccionar autoridades actuales
spl-token display "$MINT"
# Revocar la autoridad de acuñación permanentemente
spl-token authorize "$MINT" mint --disable
# Revocar la autoridad de congelación (los usuarios no pueden ser congelados)
spl-token authorize "$MINT" freeze --disable
spl-token display "$MINT"use anchor_lang::prelude::*;
use anchor_spl::token::{self, Mint, Token, SetAuthority};
#[derive(Accounts)]
pub struct RevokeMintAuthority<'info> {
#[account(mut)]
pub mint: Account<'info, Mint>,
pub current_authority: Signer<'info>,
pub token_program: Program<'info, Token>,
}
pub fn revoke_mint_authority(ctx: Context<RevokeMintAuthority>) -> Result<()> {
require!(
ctx.accounts.mint.mint_authority == Some(ctx.accounts.current_authority.key()),
ErrorCode::NotMintAuthority
);
let cpi = CpiContext::new(
ctx.accounts.token_program.to_account_info(),
SetAuthority {
current_authority: ctx.accounts.current_authority.to_account_info(),
account_or_mint: ctx.accounts.mint.to_account_info(),
},
);
token::set_authority(
cpi,
spl_token::instruction::AuthorityType::MintTokens,
None,
)?;
Ok(())
}
#[error_code]
pub enum ErrorCode {
NotMintAuthority,
}Lo que esto demuestra:
authorize --disableestablece el campo de autoridad aNone- La revocación es irreversible para ese tipo de autoridad
- Los programas en cadena usan la CPI
set_authoritycon el firmante de la autoridad actual
Análisis Profundo
Cómo Funciona
- La cuenta de acuñación (Mint account) almacena
mint_authority: COption<Pubkey>yfreeze_authority: COption<Pubkey> - Se requiere la autoridad de acuñación para
MintTo; la autoridad de congelación paraFreezeAccount/ThawAccount - La autoridad de cierre en las cuentas de token (separada de la acuñación) controla quién puede cerrar cuentas vacías
- El propietario de la cuenta de token es distinto de las autoridades de acuñación
Tipos de Autoridad
| Autoridad | Alcance | Revocado significa |
|---|---|---|
| Acuñar tokens | Cuenta de acuñación | Nunca habrá inflación |
| Congelar cuenta | Cuenta de acuñación | No se pueden congelar cuentas de titulares |
| Propietario de cuenta | Cuenta de token | No se puede transferir (N/A - la transferencia de propiedad es diferente) |
| Cerrar cuenta | Cuenta de token | No se puede cerrar para recuperar el alquiler (rent) |
Notas de Rust
// Siempre registra los cambios de estado de la autoridad para los indexadores
emit!(AuthorityRevoked { mint: mint.key(), kind: "mint" });Trampas Comunes
- Revocar la acuñación antes de terminar la distribución - no se puede acuñar la asignación restante. Solución: completar las acuñaciones primero, luego revocar.
- Dejar la autoridad de congelación en manos de un equipo anónimo - los titulares pueden ser congelados. Solución: revocar la congelación o transferir a un multisig transparente.
- Asumir que revocar la acuñación revoca la congelación - campos independientes. Solución: revocar ambos explícitamente.
- Transferir la autoridad a la pubkey incorrecta - pérdida irreversible de control. Solución: verificar la pubkey en una simulación en devnet.
- La UI oculta el estado de la autoridad - los usuarios confían en tokens fraudulentos. Solución: mostrar los campos de
spl-token displayen los exploradores.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Autoridad de acuñación multisig | Inflación controlada por DAO | Lanzamiento simple de oferta fija |
| Autoridad de acuñación PDA | Emisiones programáticas | Solo tesorería operada por humanos |
| Delegado permanente Token-2022 | Aplicación forzada de políticas | Token fungible estándar |
Preguntas Frecuentes
¿Qué es la autoridad de acuñación?
Pubkey permitida para inflar la oferta a través de MintTo hasta que se establezca en None.
¿Qué es la autoridad de congelación?
Pubkey permitida para congelar/descongelar cuentas de token para esa acuñación, bloqueando transferencias mientras están congeladas.
¿Se puede restaurar la autoridad revocada?
No. Establecer a None es permanente para esa ranura de autoridad.
¿Debo revocar la autoridad de congelación?
Sí, para la mayoría de los tokens comunitarios, a menos que la congelación sea una característica de cumplimiento documentada.
¿Puede la autoridad de acuñación ser una PDA?
Sí. El programa firma las emisiones con las semillas de la PDA.
¿Quién puede cambiar las autoridades?
Solo el firmante de la autoridad actual para ese tipo de autoridad.
¿El cierre de la acuñación recupera el alquiler (rent)?
Ruta de instrucción separada - las cuentas de acuñación persisten hasta que se cierran explícitamente donde se admite.
¿Cómo verifican los auditores las autoridades?
Leer la cuenta de acuñación en la cadena o spl-token display - nunca confíes solo en las etiquetas de la UI.
¿Puede la autoridad de congelación congelar a todos los titulares?
Sí, llamadas de congelación por cuenta - razón por la cual muchos proyectos revocar la autoridad de congelación.
¿Qué pasa con las autoridades de Token-2022?
Mismo modelo de acuñación/congelación más autoridades específicas de extensiones (por ejemplo, configuración de tarifa de transferencia).
¿Se requiere autoridad de acuñación en la creación?
Puede establecerse en None al inicializar para una oferta fija acuñada en el mismo lote de transacciones.
¿Cómo transfiero la autoridad a un multisig?
set_authority a la pubkey del multisig mientras la autoridad actual firma.
Relacionado
- Acuñación y Quema - usa la autoridad de acuñación
- Mejores Prácticas de SPL Token - lista de verificación de lanzamiento de autoridad
- Transferencias y Delegados - impacto de la congelación
Versiones de la pila: Esta página fue escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, y LiteSVM 0.6.x.