Acceso a Cuentas
Usa ctx.accounts para campos tipados, ctx.bumps para semillas de PDA, y ctx.remaining_accounts para listas de cuentas variables pasadas después del layout fijo.
Busca en todas las páginas de la documentación
Usa ctx.accounts para campos tipados, ctx.bumps para semillas de PDA, y ctx.remaining_accounts para listas de cuentas variables pasadas después del layout fijo.
pub fn route(ctx: Context<Route>) -> Result<()> {
let bump = ctx.bumps.vault;
let vault = &mut ctx.accounts.vault;
for acc in ctx.remaining_accounts.iter() {
require!(acc.owner == &crate::ID, MyError::BadRemaining);
}
Ok(())
}Cuándo usar esto: Los manejadores leen o mutan cuentas validadas y extras opcionales.
pub fn swap(ctx: Context<Swap>) -> Result<()> {
let user = &ctx.accounts.user;
let pool = &mut ctx.accounts.pool;
let bump = ctx.bumps.pool;
msg!("user: {}, pool bump: {}", user.key(), bump);
for meta in ctx.remaining_accounts.iter() {
let ai = meta.to_account_info();
require!(ai.is_writable, SwapError::ReadonlyAccount);
}
Ok(())
}Qué demuestra esto:
ctx.bumps.<nombre> coincide con el nombre del campo de semillasremaining_accounts es un slice de AccountInfoto_account_info() para metadatos de cuenta de CPI&mut Account<'info, T> serializa los cambios al final de la instrucción si la cuenta fue marcada como mut en las restricciones.
Los clientes añaden cuentas después del orden del IDL. Documenta el orden esperado y valida cada entrada.
| Alternativa | Usar Cuándo | No Usar Cuándo |
|---|---|---|
| Vec explícito de cuentas en struct | Conjuntos pequeños y fijos | Enrutamiento dinámico grande |
| AccountLoader::load | Lecturas sin copia | Account<T> estándar |
| Cuentas Sysvar en struct | Clock, rent | remaining_accounts para sysvars raras |
0.32.1 en toda esta sección.
No. Usa restricciones de semillas y firma de CPI.
En el campo de tu struct de cuenta, establecido al inicializar.
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 en el lado del cliente.
Sí, cuando contienen datos; financia con el pagador al inicializar.
Sí, con las mismas semillas de firmante para cada CPI.
Consulta los enlaces relacionados para temas más profundos sobre acceso.
Versiones de Stack: 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