Fundamentos del Programa Anchor
Estructura del programa Anchor y manejadores de instrucciones. Los resultados aparecen en la misma sección de código: comentarios // en la misma línea cuando son cortos, bloques // multilínea debajo de la muestra cuando no lo son.
Constante del ID del programa a partir de un keypair.
// declare_id!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");
Módulo de manejadores de instrucciones.
// #[program]
// pub mod my_program {
// pub fn initialize(ctx: Context<Initialize>) -> Result<()> { Ok(()) }
// }
El manejador recibe Context<T> con cuentas validadas.
// pub fn ix(ctx: Context<MyIx>, amount: u64) -> Result<()> { ... }
#[derive(Accounts)] crea los validadores.
// #[derive(Accounts)]
// pub struct Initialize<'info> { ... }
Alias de Result de Anchor sobre ProgramResult con conversión de errores.
La restricción init crea una cuenta.
// #[account(init, payer = user, space = 8 + 32)]
Restricciones Signer y mut.
// #[account(mut)]
// pub user: Signer<'info>
Tipo de cuenta de programa para el programa del sistema.
// pub system_program: Program<'info, System>
Los argumentos del manejador después de Context son datos de la instrucción.
// pub fn set(ctx: Context<Set>, value: u64) -> Result<()>
Escribe a través de los envoltorios de datos de la cuenta.
// ctx.accounts.state.value = value;
Los nombres de la IDL siguen el módulo/manejadores.
// anchor build genera IDL/tipos
Funcionalidad opcional de cpi para ayudantes de CPI.
// cpi = ["no-entrypoint"] patrones en Cargo.toml
Funcionalidad no-entrypoint para usar como crate CPI.
// [features] no-entrypoint = []
8 bytes de discriminador + espacio para campos.
// space = 8 + std::mem::size_of::<MyState>()
Anchor verifica el propietario de la cuenta frente al programa esperado.
// #[account(has_one = authority)]
Versiones de Stack: Esta página fue escrita para Agave 4.1.1 , Solana CLI 3.0.10 , Anchor 0.32.1 , Rust 1.91.1 , y @solana/kit 7.0.0 .