Gerando Clientes TS
Gere clientes TypeScript a partir do IDL do Anchor para resolução de contas tipadas, construtores de instruções e decodificação de erros.
Receita
anchor build
# Cliente Anchor legado
anchor idl parse -f target/idl/my_program.json -o app/src/idl.tsimport { Program, AnchorProvider } from "@coral-xyz/anchor";
import idl from "./idl/my_program.json";
const program = new Program(idl as MyProgram, provider);
await program.methods.initialize().accounts({ payer }).rpc();Quando usar isso: Você cria dApps ou testes de integração contra programas Anchor.
Exemplo de Trabalho
import { AnchorProvider, Wallet, Program } from "@coral-xyz/anchor";
import { Connection, Keypair } from "@solana/web3.js";
import idl from "../target/idl/counter.json";
const connection = new Connection("http://127.0.0.1:8899");
const wallet = new Wallet(Keypair.generate());
const provider = new AnchorProvider(connection, wallet, {});
const program = new Program(idl, provider);
await program.methods
.increment()
.accounts({
counter: counterPda,
authority: wallet.publicKey,
})
.rpc();O que isso demonstra:
- O JSON do IDL é o contrato entre o programa e o cliente
- builders
methods.*codificam os dados da instrução accounts()mapeia os nomes das contas do IDL- tipos do IDL para decodificação de contas
Mergulho Profundo
Pilha Moderna
Para aplicativos greenfield, prefira clientes gerados por Codama + @solana/kit 7.0.0 (veja o próximo artigo). O cliente TS do Anchor continua comum em fluxos de trabalho de teste do Anchor.
Publicação
Envie o pacote npm do IDL ou comite os tipos gerados no CI.
Armadilhas
- IDL não atualizado no repositório do cliente - Bugs silenciosos de layout. Correção: Automatize a cópia do IDL no CI.
- Erros de digitação nos nomes das contas em
.accounts()- Falhas em tempo de execução. Correção: Use tipos gerados sempre que possível. - IDL com ID de programa de cluster errado - Transações enviadas para o programa errado. Correção: IDL por cluster ou substituição do endereço.
- Mistura de versões web3.js - Conflitos de dependência. Correção: Alinhe com as dependências pares do Anchor ou migre para o kit.
- Pular simulação - UX ruim em erros. Correção: Simule antes da assinatura da carteira.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Codama + @solana/kit | Clientes modernos nativos do kit | Pilha de teste Anchor legado |
| Bytes de instrução criados manualmente | Dependências mínimas | IDL do Anchor disponível |
| anchorpy (Python) | Bots Python | dApps TypeScript |
FAQs
Versão do Anchor?
0.32.1 em tópicos avançados.
Quando usar zero_copy?
Layouts fixos grandes quando Borsh CU é muito alto.
É realloc reversível?
Não facilmente; planeje o crescimento futuro.
As contas restantes estão no IDL?
Não; documente separadamente.
declare_program! precisa de quê?
JSON do IDL do chamador em tempo de compilação.
O Anchor pode fazer CPI para Pinocchio?
Sim, com metadados de conta corretos.
Flags de recursos e IDL?
Evite IDL diferente por recurso no mainnet.
Como medir CU?
LiteSVM, Surfpool, simulação devnet.
Tipos de conta personalizados são comuns?
Não; último recurso.
Próximos passos?
Veja os links relacionados para o cliente ts.
Relacionados
- Codama a partir de um IDL do Anchor - geração de código do kit
- O Cliente TS do Anchor - padrões de cliente
- Versionamento de IDL - sincronização
Versões da Pilha: 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.