Mejores prácticas del modelo de cuentas
Diseña diseños de cuentas que escalen, se mantengan seguros y minimicen los costos de alquiler y cómputo en Agave 4.1.1.
Busca en todas las páginas de la documentación
Diseña diseños de cuentas que escalen, se mantengan seguros y minimicen los costos de alquiler y cómputo en Agave 4.1.1.
#[account]InitSpace + max_len para campos variables. Nunca adivines los tamaños de String/Vec en Anchor 0.32.1.version cuando el esquema vaya a evolucionar. Los cambios de campos anexables evitan la ruptura de la deserialización.mut tiene verificaciones de propietario y autoridad. Account<T>, has_one, seeds, o constraint explícito.UncheckedAccount sin restricciones. Trátalo como culpable hasta que se demuestre que es válido.Signer + has_one juntos, no uno solo.getMinimumBalanceForRentExemption en los clientes. No codifiques en exceso los lamports de alquiler.realloc con moderación y un plan de migración. Prefiere nuevos tipos de cuenta para cambios disruptivos.seeds en la cadena.getProgramAccounts por discriminador. Reduce la carga útil de RPC y el trabajo de decodificación del cliente.Falta de validación de propietario/autoridad en cuentas escribibles: conduce a vulnerabilidades de drenaje.
Cuentas de más de unos pocos KB leídas/escritas con frecuencia. Mide la CU antes de migrar.
Una por objeto lógico (posición, orden, bóveda). Evita docenas por acción para limitar el costo de UX del alquiler.
Sí, para una incorporación sin fricciones cuando el alquiler excede la tolerancia del usuario: presupuesta el tesoro en consecuencia.
Mapea cada instrucción a cada cuenta mut; enumera las verificaciones en tiempo de ejecución aplicadas.
Solo con semillas fuertes y verificaciones de autoridad; de lo contrario, los atacantes inicializan en nombre de la víctima.
#[max_len(N)] en el campo; InitSpace incluye 4 + N en total.
Solo un programa propietario. Comparte datos a través de CPI o pasando solo lectura, no doble propiedad.
Nueva PDA + instrucción de copia + desaprobar tipo antiguo. Nunca reordenes los campos Borsh existentes.
Sí: el singleton seeds = [b"config"] es estándar para los parámetros del protocolo.
Úsala para conjuntos de datos masivos de baja mutabilidad (cNFTs). No para estado DeFi "caliente".
Pruebas locales rápidas para init/close/realloc sin la sobrecarga completa del validador.
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