Anchor vs Nativo
Programas Solana nativos usam entrypoint! e análise manual de contas. O Anchor gera dispatch, discriminadores, validação de contas e IDL a partir de macros, ao custo de tamanho binário e alguma sobrecarga de CU.
Receita
| Preocupação | Nativo | Anchor 0.32.1 |
|---|---|---|
| Ponto de entrada | Escrito manualmente | Gerado por #[program] |
| Verificações de conta | Manual no handler | Restrições #[derive(Accounts)] |
| Tipos de cliente | Mantidos manualmente | IDL / declare_program! |
| Erros | Códigos u32 personalizados | #[error_code] + mapeamento IDL |
Quando usar isso: Você escolhe um framework para um novo programa ou debate a migração de código nativo existente.
Exemplo de Trabalho
// Anchor: a validação é declarativa
#[derive(Accounts)]
pub struct Increment<'info> {
#[account(mut, has_one = authority)]
pub counter: Account<'info, Counter>,
pub authority: Signer<'info>,
}
// Equivalente nativo: verificações manuais em cada handler
// - verificar signatário
// - verificar owner == program_id
// - verificar counter.authority == authority.key()
// - desserializar com discriminadorO que isso demonstra:
- O Anchor adiciona verificações de discriminador nos dados da conta automaticamente
- IDL habilita módulos CPI
declare_program!em 0.32 - Nativo/Pinocchio vence em CU para caminhos críticos (hot paths)
- Sistemas mistos podem fazer CPI entre frameworks com metadados de conta corretos
Análise Profunda
O que o Anchor Gera
- Dispatch de instrução - discriminadores de 8 bytes e desserialização Borsh.
- Validação de conta - Restrições de proprietário, signatário, mut, seeds, init, token.
- JSON IDL - Instruções, contas, tipos, erros para clientes.
- Auxiliares de CPI - Especialmente via
anchor-spledeclare_program!.
Quando o Nativo Ainda Vence
- Orçamentos de CU extremos (matemática de AMM de alta frequência).
- Requisitos mínimos de tamanho de implantação.
- Programas sem necessidades de cliente tipado off-chain.
Armadilhas
- Assumir que o Anchor remove todo o trabalho de segurança - Invariantes personalizadas ainda precisam de
constrainterequire!.. Correção: Modele ameaças explicitamente. - Misturar frameworks em um único crate - Não suportado; escolha um por programa.. Correção: Divida crates ou use nativo.
- Migração cega nativo→Anchor - Layouts de conta devem corresponder aos discriminadores.. Correção: Planeje instruções de migração de dados.
- Ignorar regressão de CU - A sobrecarga do Anchor importa em escala.. Correção: Perfis com
solana program loge medidores de CU. - Pular IDL para programas Anchor - Derrota a principal razão para usar Anchor.. Correção: Publique IDL com cada lançamento.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Pinocchio + layout manual | Código sensível a CU | Você quer macros de conta do Anchor |
| Framework Steel | Padrões nativos estruturados | Você precisa de ferramentas IDL do ecossistema Anchor |
| Permanecer nativo | Programa minúsculo, sem geração de código de cliente | Necessidades ricas de validação de conta |
FAQs
Qual versão do Anchor este site usa?
0.32.1 para anchor-lang, Anchor CLI e exemplos nesta seção.
Preciso do Solana CLI junto com o Anchor?
Sim. Solana CLI 3.0.10 lida com keypairs, airdrops e inspeção de solana program.
Onde a IDL vive após a compilação?
target/idl/<program>.json em seu workspace.
Posso misturar UncheckedAccount com Signer?
Sim, mas cada campo não verificado precisa de restrições explícitas ou verificações no handler.
Como testar sem devnet?
Use anchor test com Surfpool 0.12.0 ou LiteSVM 0.6.x em CI.
Qual é o prefixo de 8 bytes nos dados da conta?
Discriminador de conta Anchor; não o remova ao dimensionar space.
Devo commitar a IDL gerada?
Sim, ou publique a IDL on-chain para que os clientes tenham uma fonte canônica.
Como depurar falhas de restrição?
Execute com logs; o Anchor imprime o nome da restrição e o índice da conta.
O Anchor funciona no Agave 4.1.1?
Sim. Esta stack tem como alvo validadores Agave com Solana CLI 3.0.10.
O que devo ler a seguir nesta seção?
Veja artigos irmãos vinculados em Relacionados para tópicos mais aprofundados de anchor vs nativo.
Relacionado
- Noções Básicas de Programas Nativos - modelo de ponto de entrada
- Interagindo com Programas Nativos/Pinocchio - sistemas mistos
- Otimização de CU e Tamanho - ajuste de sobrecarga
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.