@solana/kit, Codama & gill (JS/TS)
A pilha de cliente TypeScript moderna para Solana centra-se em @solana/kit 7.0.0 para RPC, codecs e mensagens de transação. Codama gera clientes nativos do kit a partir de IDLs do Anchor 0.32.1. gill é uma camada de conveniência que agrupa padrões comuns do kit para código de aplicação. Juntos, eles substituem o uso do @solana/web3.js v1 do greenfield no Agave 4.1.1.
Receita
Cartão de receita de referência rápida - pronto para copiar e colar.
npm install @solana/kit@7.0.0 gill
npm install -D @codama/nodes-from-anchor @codama/renderers-jsimport { createSolanaRpc, address, lamports } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const balance = await rpc.getBalance(address("11111111111111111111111111111111")).send();
console.log(balance.value);Quando usar isto:
- Novas dApps Next.js ou React que visam RPCs Agave 4.x.
- Geração de clientes tipados após a saída do IDL
anchor build. - Importações funcionais "tree-shakable" em vez de classes monolíticas do web3.js.
- Codecs compartilhados entre frontend e rotas de API.
Exemplo de Trabalho
import {
createSolanaRpc,
createTransactionMessage,
setTransactionMessageFeePayerSigner,
setTransactionMessageLifetimeUsingBlockhash,
appendTransactionMessageInstruction,
signTransactionMessageWithSigners,
getSignatureFromTransaction,
address,
} from "@solana/kit";
import { getTransferSolInstruction } from "@solana-program/system";
import { createKeyPairSignerFromBytes } from "@solana/signers";
import fs from "node:fs";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const secret = Uint8Array.from(JSON.parse(fs.readFileSync(process.env.KEYPAIR!, "utf8")));
const payer = await createKeyPairSignerFromBytes(secret);
const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
let message = createTransactionMessage({ version: 0 });
message = setTransactionMessageFeePayerSigner(payer, message);
message = setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, message);
message = appendTransactionMessageInstruction(
getTransferSolInstruction({
source: payer,
destination: address("11111111111111111111111111111111"),
amount: 1_000n,
}),
message,
);
const signed = await signTransactionMessageWithSigners(message);
const sig = getSignatureFromTransaction(signed);
await rpc.sendTransaction(signed, { encoding: "base64" }).send();
console.log(sig);O que isto demonstra:
- A pipeline funcional compõe mensagens de transação de forma imutável.
- Signers são adaptadores de chave de par explícitos.
- Auxiliares do programa do sistema vêm de pacotes
@solana-program/*. - RPC usa
.send()para respostas tipadas.
Mergulho Profundo
Como Funciona
- kit divide exportações de subcaminhos (
@solana/rpc,@solana/transaction-messages, codecs). - Codama lê o IDL, constrói um grafo de nós, renderiza funções de cliente TypeScript.
- gill reexporta o kit + clientes de programas comuns para inicialização mais rápida da aplicação.
- Adaptadores de carteira integram-se na camada de signers - o kit permanece agnóstico em relação à carteira.
Tabela TypeScript / NPM
| Pacote | Papel | Pino (este site) |
|---|---|---|
@solana/kit | RPC, mensagens, codecs, endereços | 7.0.0 |
gill | Auxiliares de nível de aplicação sobre o kit | Mais recente compatível com kit 7 |
@codama/cli | Orquestração de Codegen | Fixado pelo projeto |
@codama/renderers-js | Renderizador de cliente TS | Corresponde ao CLI |
@solana-program/system | Auxiliares de ix do sistema | Corresponde à versão principal do kit |
@solana-program/token | Auxiliares de ix do Token SPL | Corresponde à revisão do token |
Tabela de Crates Rust (paridade)
| Crate | Papel | Quando |
|---|---|---|
anchor-lang | Fonte do IDL | No on-chain Anchor 0.32.1 |
solana-sdk | Transações de cliente Rust | Serviços Rust |
declare_program! | Consumidor de IDL Rust | Backend Rust |
Notas TypeScript
// Regenerar clientes quando o IDL mudar
// npx codama run --config codama.json
// Preferir lamports bigint em exemplos do kit
const amount = 1_000_000n;Armadilhas
- Misturar tipos web3.js v1 e kit - modelos Pubkey duplicados. Correção: migrar módulos por completo por rota.
- Saída Codama desatualizada após mudança de IDL - erros de codificação em tempo de execução. Correção: CI falha se a pasta gerada estiver suja.
- Signer ausente na mensagem - simulação falha. Correção:
setTransactionMessageFeePayerSigner+ signers necessários. - Assumir que gill substitui kit - gill é açúcar; entender o kit para casos extremos. Correção: ler as APIs subjacentes do kit.
- Suporte incorreto a recursos RPC - APIs DAS e de taxa de prioridade variam por fornecedor. Correção: matriz de capacidade por fornecedor.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
@coral-xyz/anchor TS | Aplicações Anchor Legadas | Projetos Greenfield com kit |
@solana/web3.js v1 | Manutenção de código antigo | Novas aplicações 2026+ |
solana-py / AnchorPy | Backends Python | Carteiras do navegador |
Rust solana-client | Serviço de signer de alto rendimento | Frontend |
FAQs
web3.js está depreciado?
Tratado como legado; o kit é o caminho recomendado para TypeScript novo.
Codama com IDL nativo?
Sim, se você publicar IDL JSON compatível com Shank/Anchor.
App Router do Next.js?
Mantenha os signers apenas no navegador; rotas do servidor constroem mensagens não assinadas ou usam chaves de par do servidor com cuidado.
Padrão de Carteira?
Integre adaptadores de carteira que expõem signers compatíveis com o kit.
Transações versionadas?
Padrão nos exemplos do kit - use mensagens v0 com ALTs quando necessário.
Taxas de prioridade no kit?
Anexe instruções de orçamento de computação de @solana-program/compute-budget.
gill vs kit?
Comece com gill para velocidade; desça para o kit para controle fino.
Testes?
Testes de integração Bankrun TS ou com suporte Surfpool com clientes kit.
Apenas ESM?
Siga as exportações de pacotes do kit; configure o bundler para Node ESM em rotas de API.
Versão do Anchor?
IDL do Anchor CLI 0.32.1 / anchor-lang 0.32.1 para compatibilidade com Codama.
Relacionado
- Noções Básicas do @solana/kit - introdução ao kit
- Codama - pipeline de codegen
- gill - auxiliares do gill
- Gerando Clientes TS - fluxo de trabalho
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.