Mejores prácticas para Cuentas y Restricciones
Estructuras de cuenta de cierre ante fallos y de mínima confianza para programas Anchor de producción.
Cómo usar esta lista
- Revisa cada nuevo
#[derive(Accounts)]contra esta lista. - Trata
UncheckedAccountcomo una excepción de seguridad que requiere un comentario. - Vuelve a ejecutar la revisión al añadir
init_if_neededo CPIs de tokens.
A - Higiene de tipos
- Usa
Signerpara las autoridades, noUncheckedAccountconis_signermanual. - Prefiere
Account<T>sobreUncheckedAccountpara el estado propiedad del programa. - Incluye explícitamente
Program<Token/System>para cada destino de CPI. - Usa tipos de interfaz para Token-2022 al soportar extensiones.
B - Restricciones
- Valida los PDAs con semillas + bump almacenado en cada instrucción.
- Añade
has_onepara las relaciones de autoridad en lugar de solo comprobaciones en el manejador. - Mapea los fallos de restricciones a
#[error_code]con sintaxis@. - Evita
init_if_neededsin comprobaciones de autoridad en cuentas existentes.
C - Dimensionamiento y ciclo de vida
- Usa
InitSpace+max_lenpara campos de longitud variable. - Cierra las cuentas a un destinatario definido para reclamar el alquiler.
- Documenta las migraciones cuando el espacio crece con
realloco nuevas cuentas. - Nunca confíes en el orden de cuentas proporcionado por el cliente sin restricciones de tipo.
Preguntas frecuentes
¿Qué versión de Anchor usa este sitio?
0.32.1 para anchor-lang, Anchor CLI y ejemplos en esta sección.
¿Necesito Solana CLI junto con Anchor?
Sí. Solana CLI 3.0.10 maneja keypairs, airdrops e inspección de solana program.
¿Dónde vive el IDL después de la compilación?
target/idl/<program>.json en tu espacio de trabajo.
¿Puedo mezclar `UncheckedAccount` con `Signer`?
Sí, pero cada campo no verificado necesita restricciones explícitas o comprobaciones en el manejador.
¿Cómo pruebo sin devnet?
Usa anchor test con Surfpool 0.12.0 o LiteSVM 0.6.x en CI.
¿Qué es el prefijo de 8 bytes en los datos de la cuenta?
El discriminador de cuenta de Anchor; no lo elimines al dimensionar space.
¿Debo confirmar el IDL generado?
Sí, o publica el IDL en la cadena para que los clientes tengan una fuente canónica.
¿Cómo depuro fallos de restricciones?
Ejecuta con logs; Anchor imprime el nombre de la restricción y el índice de la cuenta.
¿Funciona Anchor en Agave 4.1.1?
Sí. Esta pila se dirige a validadores Agave con Solana CLI 3.0.10.
¿Qué debo leer a continuación en esta sección?
Consulta los artículos hermanos en "Relacionados" para temas más profundos sobre las mejores prácticas de cuentas.
Relacionados
- Tipos de Cuenta - wrappers
- Restricciones Personalizadas - invariantes
- Mejores Prácticas Básicas de Anchor - hábitos de espacio de trabajo
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.