Simulando Transações
Simulação pre-flight e decodificação de erros. Este guia mira validators Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1 e clientes @solana/kit 7.0.0.
Receita
Cartão de receita de referência rápida.
solana config set --url devnet
solana balanceimport { createSolanaRpc } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");Quando usar isso:
- Implementar ou depurar simulação de transações em caminhos de produção
- Ensinar o conceito a engenheiros novos em Solana
- Auditar se sua stack corresponde ao comportamento da era Agave 4.1
Exemplo de Trabalho
import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const slot = await rpc.getSlot().send();
const sig = "PASTE_SIGNATURE_AFTER_YOUR_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 {}O que isso demonstra:
- Padrões de acesso RPC com @solana/kit 7.0.0
- Leitura de metadados de execução (erros, CU) de transações confirmadas
- Acesso a sysvar on-chain em programas Anchor 0.32.1
Deep Dive
Como Funciona
- Simulação pre-flight e decodificação de erros.
- O modelo de contas da Solana exige listas explícitas de contas por instrução
- Sealevel executa transações sem conflito em paralelo
Notas Agave 4.1.1
- Semântica de confirmação segue votação TowerBFT com ordenação PoH
- Alpenglow (Votor + Rotor) está sendo implantado para finalidade mais rápida - veja seção Consensus
- Desenvolvimento local: Surfpool 0.12.0 e LiteSVM 0.6.x
Notas Rust
// Use matemática verificada e constraints explícitas em programas
require!(amount > 0, MyError::InvalidAmount);Armadilhas
- Snippets legados web3.js v1 - API difere do Kit. Correção: use @solana/kit 7.0.0.
- Cluster errado - mismatch devnet vs mainnet. Correção: alinhe CLI, RPC, carteira, explorer.
- Amounts SOL em float - perda de precisão. Correção: lamports bigint ponta a ponta.
- Blockhash expirado - txs descartadas. Correção: busque blockhash novamente e reassine.
- CU insuficiente - OOM ou orçamento excedido. Correção: otimize programa + defina Compute Budget.
- Checks de owner ausentes - exploits de conta writable. Correção: constraints Anchor em toda conta mut.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| @solana/kit 7.0.0 | Novos clientes TypeScript | Manter código legado temporariamente |
| Solana CLI 3.0.10 | Ops e sondagens rápidas | Assinatura de transação em produção em escala |
| Surfpool 0.12.0 | Testes de integração Anchor | Deploy de produção |
| LiteSVM 0.6.x | Testes unitários rápidos | Validação de comportamento de rede completo |
FAQs
Como isso se aplica no Agave 4.1.1?
RPC simulateTransaction do Agave 4.1.1 executa o mesmo caminho Sealevel que execução real, menos persistência e taxas.
Qual versão do Solana CLI devo usar?
Use Solana CLI 3.0.10, que combina com Agave 4.1.1. Instale com agave-install init 4.1.1 (ou arquivo pin da equipe), depois verifique com solana --version e agave-install --version.
Devo usar @solana/kit ou web3.js?
Use @solana/kit 7.0.0 para novo TypeScript - métodos RPC tipados, API menor, e exemplos nesta página já usam Kit. Mantenha web3.js apenas para bases legadas; migre chamadas RPC e construção de transação incrementalmente.
Qual nível de commitment é recomendado?
Simule em confirmed, depois faça poll em getSignatureStatuses em confirmed para velocidade. Use finalized antes de tratar movimentos de token como liquidados.
Como depurar falhas relacionadas?
Sempre leia err, logs e unitsConsumed. Combine lista de contas e signers exatamente - simulação sucede mas envio falha quando blockhash ou taxas diferem.
Funciona em devnet?
Sim - aponte CLI e RPC para https://api.devnet.solana.com. Comportamento corresponde à mainnet; apenas dados de conta e economia diferem.
Como compute units afetam isso?
Simulação retorna uso de CU - use para definir SetComputeUnitLimit com ~10% de folga.
Qual é o padrão Anchor 0.32.1?
Anchor 0.32.1 usa #[program], Context<T> e #[derive(Accounts)] com constraints mut/signer explícitas - execute anchor build e anchor test em 0.32.1 via avm use 0.32.1.
Como testar com Surfpool 0.12.0?
Execute anchor test com Surfpool 0.12.0 para simular transações completas contra fork mainnet - especialmente caminhos de taxa de prioridade e v0/ALT.
LiteSVM 0.6.x cobre isso?
LiteSVM é simulador local; use RPC simulateTransaction quando precisar de estado exato de conta do cluster.
O que mudou na era Agave?
O cliente validator foi rebrandizado para Agave (4.1.1), CLI 3.0.10 alinha com ele, e trabalho Alpenglow está mudando finalidade - fixe versões e leia release notes a cada upgrade.
Onde encontro métodos RPC relacionados?
simulateTransaction com sigVerify: true para paridade de produção; getAccountInfo para semear contas ausentes.
Relacionado
- Navegue outras páginas na seção
transactions-instructions-feespara tópicos complementares - Noções Básicas de Solana - orientação de contas e transações
Versões da stack: Esta página foi 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 e LiteSVM 0.6.x.