Assinatura no Lado do Client
Monte e envie transações no browser com kit + wallet adapters.
Busque em todas as páginas da documentação
Monte e envie transações no browser com kit + wallet adapters.
"use client";
import { createSolanaRpc, signTransactionMessageWithSigners } from "@solana/kit";Quando usar:
"use client";
import { useCallback } from "react";
import { useWallet } from "@solana/wallet-adapter-react";
import {
createSolanaRpc,
createTransactionMessage,
setTransactionMessageLifetimeUsingBlockhash,
appendTransactionMessageInstruction,
signTransactionMessageWithSigners,
sendAndConfirmTransactionFactory,
createSolanaRpcSubscriptions,
} from "@solana/kit";
import { getTransferSolInstruction } from "@solana-program/system";
export function SendButton({ to, lamports }: { to: string; lamports: bigint }) {
const wallet = useWallet();
const rpc = createSolanaRpc(process.env.NEXT_PUBLIC_RPC_URL!);
const rpcSubscriptions = createSolanaRpcSubscriptions(process.env.NEXT_PUBLIC_RPC_WSS_URL!);
const onSend = useCallback(async () => {
if (!wallet.publicKey) return;
const { value: bh } = await rpc.getLatestBlockhash().send();
// Bridge da carteira para kit signer (use o helper do seu template)
let msg = createTransactionMessage({ version: 0 });
// defina fee payer signer, lifetime, transfer ix...
const signed = await signTransactionMessageWithSigners(msg);
const sendAndConfirm = sendAndConfirmTransactionFactory({ rpc, rpcSubscriptions });
await sendAndConfirm(signed, { commitment: "confirmed" });
}, [wallet, rpc, rpcSubscriptions, to, lamports]);
return <button onClick={onSend}>Send</button>;
}O que isso demonstra:
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Tx patrocinada no servidor | Onboarding gasless | Auto-custódia total |
| Carteira embutida | UX Web2 | Usuários avançados |
Providers em client layout.tsx; pages misturam server + client components.
Env de servidor só para keypairs; NEXT_PUBLIC_ para URLs de RPC.
Todos os exemplos usam @solana/kit, não web3.js v1.
Assinatura apenas em client components.
Revalide leituras on-chain com cuidado - a chain é fonte da verdade.
Endpoints HTTPS retornando JSON de Solana Actions.
App React Native separado com MWA.
Surfpool para integração; mock RPC em testes unitários.
Arquivos env e program IDs separados.
Decodifique logs de simulação para mensagens voltadas ao usuário.
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: 16 de jul. de 2026