Tipos de Cuenta
Los tipos de envoltorio de cuenta de Anchor codifican reglas de validación comunes. Elige el tipo más estricto que coincida con tu modelo de amenazas, luego añade restricciones de atributos para las relaciones.
Busca en todas las páginas de la documentación
Los tipos de envoltorio de cuenta de Anchor codifican reglas de validación comunes. Elige el tipo más estricto que coincida con tu modelo de amenazas, luego añade restricciones de atributos para las relaciones.
#[derive(Accounts)]
pub struct Example<'info> {
pub payer: Signer<'info>,
pub data: Account<'info, MyState>,
pub sys: SystemAccount<'info>,
pub token_prog: Program<'info, Token>,
/// CHECK: validado en el manejador
pub oracle: UncheckedAccount<'info>,
}Cuándo usar esto: Eliges tipos para un nuevo campo de estructura de cuenta.
#[derive(Accounts)]
pub struct Deposit<'info> {
#[account(mut)]
pub user: Signer<'info>,
#[account(
mut,
associated_token::mint = mint,
associated_token::authority = user,
)]
pub user_ata: Account<'info, TokenAccount>,
pub mint: Account<'info, Mint>,
pub token_program: Program<'info, Token>,
pub associated_token_program: Program<'info, AssociatedToken>,
}Lo que esto demuestra:
Signer requiere una firma de transacciónAccount<T> comprueba el propietario y deserializa con discriminadorProgram<T> fija los IDs de programa para objetivos CPIUncheckedAccount omite las comprobaciones de seguridad automáticas| Tipo | Comprobaciones automáticas |
|---|---|
Signer<'info> | is_signer |
Account<'info, T> | Propietario, discriminador, deserializa T |
InterfaceAccount<'info, T> | Propietarios de Token-2022 / interfaz |
Program<'info, T> | ID de programa para T |
SystemAccount<'info> | Propietario del programa del sistema |
UncheckedAccount<'info> | Ninguna |
Usa AccountLoader<'info, T> para cuentas de cero copia y Interface<'info, T> para interfaces de token en 0.32.
mut en datos escribibles - La serialización falla al final de la instrucción. Solución: Añade mut al persistir cambios.Program omitido - La CPI falla con un ID de programa incorrecto. Solución: Incluye Program<Token> explícito, etc.UncheckedAccount para fondos de usuario - El atacante sustituye cuentas. Solución: Usa cuentas tipadas o restricciones estrictas.Account<T> incorrecto para token-2022 - La comprobación del propietario falla. Solución: Usa InterfaceAccount con TokenInterface.Signer para autoridad de PDA - Las PDAs no pueden firmar como Signer. Solución: Usa seeds + invoke_signed o CPI with_signer.| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
AccountLoader | Estado grande de cero copia | Estructuras Borsh pequeñas |
InterfaceAccount | Mints/ATAs de Token-2022 | Solo SPL heredado |
remaining_accounts | Conjuntos dinámicos | Diseño de instrucción fijo |
0.32.1 para anchor-lang, Anchor CLI y ejemplos en esta sección.
Sí. Solana CLI 3.0.10 maneja los pares de claves, los airdrops y la inspección de solana program.
target/idl/<program>.json en tu espacio de trabajo.
Sí, pero cada campo no comprobado necesita restricciones explícitas o comprobaciones en el manejador.
Ejecuta con logs; Anchor imprime el nombre de la restricción y el índice de la cuenta.
Sí. Esta pila se dirige a validadores Agave con Solana CLI 3.0.10.
Consulta los artículos hermanos en Relacionados para temas más profundos sobre tipos de cuenta.
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.
Revisado por Chris St. John·Última actualización: 16 jul 2026