Programas sin estado
Los programas contienen solo lógica. Todo el estado duradero reside en cuentas propiedad del programa. Esta separación permite las actualizaciones sin migrar el almacenamiento incrustado y desbloquea el paralelismo de Sealevel.
Receta
#[account]
pub struct Config { pub admin: Pubkey }
// El binario del programa nunca almacena Config en líneaCuándo usar esto:
- Al crear o depurar en Agave 4.1.1
- Al integrar con programas de Anchor 0.32.1
- Trabajo del cliente con @solana/kit 7.0.0
Ejemplo funcional
#[program]
pub mod app {
pub fn set_admin(ctx: Context<SetAdmin>) -> Result<()> {
ctx.accounts.config.admin = ctx.accounts.admin.key();
Ok(())
}
}Lo que esto demuestra:
- Patrones idiomáticos para la era Agave 4.1
- Manejo correcto de cuentas y firmantes
- Comportamiento observable a través de logs o RPC
Análisis en profundidad
Cómo funciona
- Los programas de Solana se ejecutan en el entorno de ejecución paralelo de Sealevel
- Las transacciones declaran todas las cuentas; el trabajo no superpuesto se ejecuta en paralelo
- La computación se mide en CUs; las cuentas exentas de alquiler conservan el estado
Errores comunes
- Ejemplos obsoletos de web3.js v1 - usa @solana/kit 7.0.0. Solución: migra el código del cliente.
- Marcas de firmante faltantes - las transacciones fallan en tiempo de ejecución. Solución: marca los firmantes explícitamente.
- Blockhash caducado al reintentar - caídas silenciosas. Solución: actualiza y vuelve a firmar.
- RPC del clúster incorrecto - no se encuentran cuentas. Solución: haz coincidir el clúster de extremo a extremo.
- Espacio de cuenta insuficiente - la inicialización falla. Solución: usa
InitSpaceen Anchor 0.32.1.
Alternativas
| Alternativa | Usar cuándo | No usar cuándo |
|---|---|---|
| Anchor 0.32.1 | Desarrollo rápido | Mínimo BPF nativo |
| Rust nativo | Control máximo | Se necesita iteración rápida |
| LiteSVM 0.6.x | Pruebas unitarias | Pruebas de integración de red |
| Surfpool 0.12.0 | Pruebas de integración de Anchor | Tareas CLI únicas |
Preguntas frecuentes
¿Cómo se relaciona esto con Sealevel?
Ver las secciones anteriores para más detalles.
¿Qué versión de CLI debo usar?
Ver las secciones anteriores para más detalles.
¿Se aplica esto a mainnet-beta?
Ver las secciones anteriores para más detalles.
¿Qué nivel de compromiso deben usar los clientes?
Ver las secciones anteriores para más detalles.
¿Cómo depuro fallos?
Ver las secciones anteriores para más detalles.
¿Están involucradas las PDAs?
Ver las secciones anteriores para más detalles.
¿Qué pasa con las unidades de cómputo?
Ver las secciones anteriores para más detalles.
¿Puedo usar devnet?
Ver las secciones anteriores para más detalles.
¿Cómo funcionan las actualizaciones?
Ver las secciones anteriores para más detalles.
¿Qué reemplaza a web3.js?
Ver las secciones anteriores para más detalles.
¿Cómo pruebo localmente?
Ver las secciones anteriores para más detalles.
¿Qué es Agave 4.1.1?
Ver las secciones anteriores para más detalles.
Relacionado
Versiones de la pila: Esta página se escribió 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.