Noções básicas do @solana/kit
9 exemplos para começar com @solana/kit - 6 básicos e 3 intermediários.
Busque em todas as páginas da documentação
9 exemplos para começar com @solana/kit - 6 básicos e 3 intermediários.
Instale kit 7.0.0 e os helpers do system program:
npm install @solana/kit@7.0.0 @solana-program/systemDefina RPC_URL para um endpoint devnet (URL de provedor recomendada em vez de limites públicos de taxa).
JSON-RPC tipado com .send() em todo método.
import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const slot = await rpc.getSlot().send();
console.log(slot);createSolanaRpc retorna cliente tree-shakable - importe apenas o que usar..send() para I/O de rede explícita.Relacionado: RPC e subscriptions - subscriptions e provedores
Endereços são strings com brand - não arrays de bytes no código do app.
import { createSolanaRpc, address, lamports } from "@solana/kit";
const rpc = createSolanaRpc(process.env.RPC_URL!);
const owner = address("YOUR_WALLET_PUBKEY");
const { value } = await rpc.getBalance(owner).send();
console.log(Number(value) / 1e9);address() valida base58 e retorna Address tipado.Lamports (bigint) - converta com cuidado para exibição.Relacionado: RPC e subscriptions - HTTP vs WebSocket
Scripts de servidor e testes usam signers explícitos.
import { generateKeyPairSigner } from "@solana/kit";
const signer = await generateKeyPairSigner();
console.log(signer.address);generateKeyPairSigner cria chave Ed25519 utilizável em mensagens de transação.Relacionado: Keypairs e signers - CryptoKey e import de arquivo
Combine com formato de array do solana-keygen.
import { createKeyPairSignerFromBytes } from "@solana/kit";
import { readFileSync } from "node:fs";
const secret = Uint8Array.from(
JSON.parse(readFileSync("./dev-wallet.json", "utf8"))
);
const signer = await createKeyPairSignerFromBytes(secret);Relacionado: Keypairs e signers - traits de signer
Blockhashes expiram - atualize por lote de transação.
const { value: blockhash } = await rpc.getLatestBlockhash().send();
console.log(blockhash.blockhash, blockhash.lastValidBlockHeight);lastValidBlockHeight - hashes obsoletos falham na confirmação.Relacionado: Construindo mensagens de transação - lifetimes
pipe funcional compõe transformações imutáveis de mensagem.
import {
createTransactionMessage,
pipe,
setTransactionMessageFeePayerSigner,
setTransactionMessageLifetimeUsingBlockhash,
appendTransactionMessageInstruction,
} from "@solana/kit";
import { getTransferSolInstruction } from "@solana-program/system";
const message = pipe(
createTransactionMessage({ version: 0 }),
(m) => setTransactionMessageFeePayerSigner(signer, m),
(m) => setTransactionMessageLifetimeUsingBlockhash(blockhash, m),
(m) =>
appendTransactionMessageInstruction(
getTransferSolInstruction({
source: signer,
destination: recipient,
amount: 10_000_000n,
}),
m
)
);@solana-program/*, não program IDs string.bigint.Relacionado: Construindo mensagens de transação - pipeline completo
Signers são resolvidos da mensagem, depois RPC submete a transação wire.
import {
signTransactionMessageWithSigners,
getSignatureFromTransaction,
sendAndConfirmTransactionFactory,
} from "@solana/kit";
const signed = await signTransactionMessageWithSigners(message);
const signature = getSignatureFromTransaction(signed);
const sendAndConfirm = sendAndConfirmTransactionFactory({ rpc, rpcSubscriptions });
await sendAndConfirm(signed, { commitment: "confirmed" });signTransactionMessageWithSigners coleta signers exigidos da mensagem.Relacionado: Assinatura e envio - estratégias de confirmação
Atualizações push superam polling para UIs de carteira.
import { createSolanaRpcSubscriptions, address } from "@solana/kit";
const rpcSubscriptions = createSolanaRpcSubscriptions("wss://api.devnet.solana.com");
const abort = new AbortController();
const notifications = await rpcSubscriptions
.accountNotifications(address("YOUR_ACCOUNT"), { commitment: "confirmed" })
.subscribe({ abortSignal: abort.signal });
for await (const n of notifications) {
console.log(n.value.lamports);
}wss:// - URLs HTTP falham para subscriptions.Relacionado: RPC e subscriptions - tipos de subscription
Codecs do kit substituem layouts Buffer manuais.
import {
getU32Encoder,
getU32Decoder,
getStructEncoder,
getStructDecoder,
} from "@solana/kit";
const layout = getStructEncoder([["count", getU32Encoder()]]);
const bytes = layout.encode({ count: 42 });
const decoded = getStructDecoder([["count", getU32Decoder()]]).decode(bytes);Relacionado: Codecs e serialização - layouts avançados
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.
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026