Instrucciones y Cuentas
IDs de programa, metadatos de cuenta y datos de instrucción. Esta guía está dirigida a validadores Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1 y clientes @solana/kit 7.0.0.
Receta
Tarjeta de receta de referencia rápida.
solana config set --url devnet
solana balanceimport { createSolanaRpc } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");Cuándo recurrir a esto:
- Implementar o depurar instrucciones y cuentas en rutas de producción
- Enseñar el concepto a ingenieros nuevos en Solana
- Auditar si tu stack coincide con el comportamiento de la era Agave 4.1
Ejemplo de Trabajo
import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const slot = await rpc.getSlot().send();
const sig = "PEGA_LA_FIRMA_DESPUÉS_DE_TU_TX";
const tx = await rpc
.getTransaction(sig, { encoding: "json", maxSupportedTransactionVersion: 0 })
.send();
console.log({ slot, err: tx?.meta?.err, cu: tx?.meta?.computeUnitsConsumed });use anchor_lang::prelude::*;
#[program]
pub mod demo {
use super::*;
pub fn log_slot(_ctx: Context<LogSlot>) -> Result<()> {
let clock = Clock::get()?;
msg!("slot: {}", clock.slot);
Ok(())
}
}
#[derive(Accounts)]
pub struct LogSlot {}Lo que esto demuestra:
- Patrones de acceso RPC con @solana/kit 7.0.0
- Lectura de metadatos de ejecución (errores, CU) de transacciones confirmadas
- Acceso a sysvars en cadena en programas Anchor 0.32.1
Análisis Profundo
Cómo Funciona
- IDs de programa, metadatos de cuenta y datos de instrucción.
- El modelo de cuentas de Solana requiere listas explícitas de cuentas por instrucción
- Sealevel ejecuta transacciones no conflictivas en paralelo
Notas de Agave 4.1.1
- Las semánticas de confirmación siguen la votación TowerBFT con ordenamiento PoH
- Alpenglow (Votor + Rotor) se está implementando para una finalidad más rápida - ver sección de Consenso
- Desarrollo local: Surfpool 0.12.0 y LiteSVM 0.6.x
Notas de Rust
// Usa matemáticas seguras y restricciones explícitas en los programas
require!(amount > 0, MyError::InvalidAmount);Trampas Comunes
- Snippets de web3.js v1 heredados - La API difiere de Kit. Solución: usa @solana/kit 7.0.0.
- Cluster incorrecto - Desajuste entre devnet y mainnet. Solución: alinea CLI, RPC, wallet y explorador.
- Montos de SOL en punto flotante - Pérdida de precisión. Solución: lamports bigint de extremo a extremo.
- Blockhash caducado - Transacciones descartadas. Solución: vuelve a obtener el blockhash y vuelve a firmar.
- CU insuficiente - OOM o presupuesto excedido. Solución: optimiza el programa + establece el Presupuesto de Cómputo.
- Faltan comprobaciones del propietario - Exploits de cuentas escribibles. Solución: restricciones de Anchor en cada cuenta
mut.
Alternativas
| Alternativa | Úsala Cuando | No la Uses Cuando |
|---|---|---|
| @solana/kit 7.0.0 | Nuevos clientes TypeScript | Manteniendo código heredado temporalmente |
| Solana CLI 3.0.10 | Operaciones y sondeos rápidos | Firma de transacciones en producción a escala |
| Surfpool 0.12.0 | Pruebas de integración de Anchor | Despliegue en producción |
| LiteSVM 0.6.x | Pruebas unitarias rápidas | Validación del comportamiento completo de la red |
Preguntas Frecuentes
¿Cómo se aplica esto en Agave 4.1.1?
Agave 4.1.1 aplica listas de cuentas en la ejecución — los indicadores de firmante/escribible faltantes o incorrectos fallan antes de que se ejecute la lógica de tu programa.
¿Qué versión de Solana CLI debo usar?
Usa Solana CLI 3.0.10, que se empareja con Agave 4.1.1. Instala con agave-install init 4.1.1 (o el archivo de fijación de tu equipo), luego verifica con solana --version y agave-install --version.
¿Debería usar @solana/kit o web3.js?
Usa @solana/kit 7.0.0 para nuevos TypeScript — métodos RPC tipados, superficie de API más pequeña y los ejemplos en esta página ya usan Kit. Mantén web3.js solo para bases de código heredadas; migra las llamadas RPC y la construcción de transacciones incrementalmente.
¿Qué nivel de compromiso se recomienda?
Simula en confirmed, luego consulta getSignatureStatuses en confirmed para mayor velocidad. Usa finalized antes de tratar los movimientos de tokens como asentados.
¿Cómo depuro fallos relacionados?
Los errores de simulación que listan índices de cuenta son casi siempre el orden incorrecto de AccountMeta o la falta de firmante. Compara con el IDL/restricciones de cuenta.
¿Funciona esto en devnet?
Sí — apunta la CLI y el RPC a https://api.devnet.solana.com. El comportamiento coincide con mainnet; solo los datos de cuenta y la economía difieren.
¿Cómo afectan las unidades de cómputo a esto?
Cada cuenta pasada a una instrucción añade CU para cargarla y bloquearla — recorta cuentas innecesarias de la lista.
¿Cuál es el patrón de Anchor 0.32.1?
Anchor 0.32.1 usa #[program], Context<T> y #[derive(Accounts)] con restricciones explícitas de mut/signer — ejecuta anchor build y anchor test en 0.32.1 a través de avm use 0.32.1.
¿Cómo pruebo con Surfpool 0.12.0?
Ejecuta anchor test con Surfpool 0.12.0 para simular transacciones completas contra una bifurcación de mainnet — especialmente las rutas de priority-fee y v0/ALT.
¿Puede LiteSVM 0.6.x cubrir esto?
LiteSVM 0.6.x valida listas de cuentas de la misma manera — úsalo para detectar errores de metadatos de forma económica.
¿Qué cambió en la era Agave?
El cliente validador cambió de nombre a Agave (4.1.1), CLI 3.0.10 se alinea con él y el trabajo de Alpenglow está cambiando la finalidad — fija las versiones y lee las notas de la versión en cada actualización.
¿Dónde encuentro métodos RPC relacionados?
simulateTransaction devuelve errores a nivel de cuenta; getTransaction muestra qué cuentas se tocaron con éxito.
Relacionado
- Explora otras páginas de la sección
transactions-instructions-feespara temas complementarios - Conceptos Básicos de Solana - orientación sobre cuentas y transacciones
Versiones del 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.