Building Instructions
Construa instruções tipadas a partir de clientes Codama gerados.
Receita
import { getIncrementInstruction } from "./generated/clients/js";
import { appendTransactionMessageInstruction } from "@solana/kit";Quando usar:
- Compor chamadas de programa em fluxos de carteira.
- Transações parciais montadas no servidor.
- Rotas DeFi multi-instrução.
Exemplo Prático
import {
createTransactionMessage,
pipe,
setTransactionMessageFeePayerSigner,
setTransactionMessageLifetimeUsingBlockhash,
appendTransactionMessageInstruction,
createSolanaRpc,
} from "@solana/kit";
import { getIncrementInstruction } from "./generated/clients/js";
const rpc = createSolanaRpc(process.env.RPC_URL!);
const { value: bh } = await rpc.getLatestBlockhash().send();
const ix = getIncrementInstruction({
counter: counterAddress,
authority: walletSigner,
});
const message = pipe(
createTransactionMessage({ version: 0 }),
(m) => setTransactionMessageFeePayerSigner(walletSigner, m),
(m) => setTransactionMessageLifetimeUsingBlockhash(bh, m),
(m) => appendTransactionMessageInstruction(ix, m)
);O que isso demonstra:
- Builder gerado codifica discriminator + args Borsh.
- Objetos Signer satisfazem requisitos de meta de authority.
- Combine várias ix de programa em uma mensagem.
Aprofundamento
Como funciona
- Dados de instrução = discriminator de 8 bytes + args serializados.
- Account metas incluem flags signer/writable conforme IDL.
- Remaining accounts para CPI também aparecem no IDL.
- Simule para capturar falhas de constraint cedo.
Erros comuns
- Ordem de conta errada - erro de programa 0x... Correção: nunca reordene metas manualmente.
- Strings pubkey em vez de signers - assinatura ausente. Correção: passe tipo Signer para signers.
- Contas init ausentes - precisa system + rent. Correção: inclua instruções init dos helpers IDL.
- Mismatch de tipo de argumento - BN vs bigint. Correção: use tipos TS gerados literalmente.
- CU de profundidade CPI - OOM na simulação. Correção: aumente limite de compute unit.
Alternativas
| Alternativa | Use quando | Não use quando |
|---|---|---|
| Anchor .methods | Scripts legacy rápidos | Controle de mensagem kit |
| Layout Buffer bruto | Só aprendizado | Produção |
FAQs
IDL Anchor 0.32.1?
Rode anchor build; aponte Codama para JSON em target/idl.
Quando regenerar?
Toda mudança de interface on-chain em CI.
Clientes tipados kit?
Codama renderiza funções nativas @solana/kit.
gill obrigatório?
Açúcar opcional sobre kit.
Next.js?
Importe clientes gerados em client components para escritas.
Testes?
Surfpool + testes de integração devnet.
web3.js?
Não misture com clientes kit gerados.
Múltiplos programas?
Uma config Codama por programa ou workspace monorepo.
Fetch de conta?
Use decoders gerados com getAccountInfo.
Erros?
Mapeie códigos de erro do programa a partir de metadados IDL.
Relacionados
- Building Transaction Messages - compor tx
- Client-Side Signing - envio carteira
- Codama - gerar builders
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.