Orden de Instrucciones y Dependencias
Los clientes componen múltiples instrucciones de Anchor en una sola transacción. El orden es importante cuando las instrucciones posteriores dependen de cuentas creadas o mutadas por instrucciones anteriores.
Busca en todas las páginas de la documentación
Los clientes componen múltiples instrucciones de Anchor en una sola transacción. El orden es importante cuando las instrucciones posteriores dependen de cuentas creadas o mutadas por instrucciones anteriores.
1. create_user (inicializa PDA)
2. create_ata (inicializa cuenta de token)
3. deposit (transfiere tokens)Cuándo usar esto: Cuando diseñas flujos de cliente o documentas pasos de integración.
// El cliente envía instrucciones ordenadas en una sola transacción
const tx = await program.methods
.createUser()
.accounts({ /* ... */ })
.preInstructions([/* compute budget si es necesario */])
.rpc();
// O en lote:
// tx = new Transaction().add(ix1, ix2, ix3);// Programa: deposit asume que la PDA de usuario ya está inicializada
#[account(
seeds = [b"user", owner.key().as_ref()],
bump = user.bump,
constraint = user.initialized @ UserError::NotInitialized,
)]
pub user: Account<'info, UserState>,Lo que esto demuestra:
Usa errores explícitos cuando falten los prerrequisitos en lugar de pánicos.
NotInitialized.| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Una sola instrucción hace todo | Cliente más simple | Mayor CU por llamada |
| init_if_needed | Menos instrucciones de cliente | Menor seguridad si se usa incorrectamente |
| Transacciones versionadas con ALTs | Muchas cuentas | Transacciones heredadas simples |
0.32.1 en toda esta sección.
No. Usa restricciones de semillas y firma CPI.
En el campo de tu estructura de cuenta, establecido en la inicialización.
Usa @solana/kit 7.0.0 con bytes de semilla coincidentes.
La dirección declare_id de tu programa Anchor.
No en el array de semillas; el bump es un parámetro separado para find_program_address.
Compara las claves registradas; verifica las semillas y el ID del programa del lado del cliente.
Sí, cuando almacenan datos; financia con el pagador en la inicialización.
Sí, con las mismas semillas de firmante para cada CPI.
Consulta los enlaces relacionados para temas más profundos sobre ordenamiento.
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: 19 jul 2026