Assinatura e envio
Assine mensagens de transação e confirme landing no Agave 4.1.1.
Receita
Cartão de receita de referência rápida - pronto para copiar e colar.
import {
signTransactionMessageWithSigners,
getSignatureFromTransaction,
sendAndConfirmTransactionFactory,
createSolanaRpc,
createSolanaRpcSubscriptions,
} from "@solana/kit";
const signed = await signTransactionMessageWithSigners(message);
const sendAndConfirm = sendAndConfirmTransactionFactory({ rpc, rpcSubscriptions });
await sendAndConfirm(signed, { commitment: "confirmed" });Quando usar:
- Submeter transferências e instruções de programa a partir de TypeScript.
- Envios aprovados pela carteira após construção da mensagem.
- Scripts que precisam de confirmação antes de prosseguir.
Exemplo prático
import {
createSolanaRpc,
createSolanaRpcSubscriptions,
signTransactionMessageWithSigners,
getSignatureFromTransaction,
sendAndConfirmTransactionFactory,
getBase64EncodedWireTransaction,
} from "@solana/kit";
const rpc = createSolanaRpc(process.env.RPC_URL!);
const rpcSubscriptions = createSolanaRpcSubscriptions(process.env.RPC_WSS_URL!);
const signed = await signTransactionMessageWithSigners(message);
const signature = getSignatureFromTransaction(signed);
const simulation = await rpc
.simulateTransaction(getBase64EncodedWireTransaction(signed), { sigVerify: true })
.send();
if (simulation.value.err) throw new Error(JSON.stringify(simulation.value.err));
const sendAndConfirm = sendAndConfirmTransactionFactory({ rpc, rpcSubscriptions });
await sendAndConfirm(signed, { commitment: "confirmed" });
console.log("https://explorer.solana.com/tx/" + signature + "?cluster=devnet");O que isso demonstra:
- Simule antes do envio para expor erros de programa cedo.
sendAndConfirmTransactionFactorycombina envio HTTP com subscription de assinatura.- Links do explorer ajudam suporte e QA.
Mergulho profundo
Como funciona
- Assinatura produz transação wire com assinaturas Ed25519 válidas.
- RPC
sendTransactiontransmite para o cluster. - Confirmação espera até commitment escolhido ser atingido.
- Erros retornam logs de programa em simulação e meta de transação.
Opções de confirmação
| Estratégia | Trade-off |
|---|---|
sendAndConfirm | Simples; precisa WSS |
Poll getSignatureStatuses | Funciona só HTTP |
signatureNotifications | Estado de UI granular |
Erros comuns
- Pular simulação - usuários pagam taxas por falhas previsíveis. Correção: simule em dev e staging.
- Sem WSS para confirm factory - trava ou faz fallback. Correção: forneça
rpcSubscriptions. - processed tratado como final - rollback de UI possível. Correção: confirme em
confirmed+. - Duplo envio no retry - txs duplicadas se blockhash ainda válido. Correção: chaves de idempotência ou novo blockhash.
- Assinatura parcial da carteira - erro de signer ausente no envio. Correção: garanta todos os signers invocados.
Alternativas
| Alternativa | Use quando | Não use quando |
|---|---|---|
| Bundles Jito | Prioridade de landing | Smoke tests devnet |
Apenas sendTransaction | Analytics fire-and-forget | Transferências voltadas ao usuário |
| Envio patrocinado servidor | UX sem gas | Apenas autocustódia trustless |
FAQs
Funciona na devnet?
Sim - aponte RPC e carteira para o mesmo cluster.
Posso misturar kit e web3.js?
Evite em um módulo - migre por rota inteira.
E os wallet adapters?
Carteiras fornecem signers; kit constrói mensagens.
Como fixar @solana/kit?
Trave 7.0.0 no package.json e CI.
Onde estão priority fees?
Instruções compute budget antes do envio.
Como testar?
Surfpool 0.12.0 ou validador local com clones devnet.
Lamports ou SOL?
Sempre lamports bigint no código kit.
Qual commitment?
confirmed para UI; finalized para tesouraria.
Server components Next.js?
Leituras no servidor; assinatura em client components.
Depurar txs falhas?
Simule, leia logs, verifique owners de conta.
Relacionados
- Construindo mensagens de transação - compor primeiro
- RPC e subscriptions - confirmação WSS
- UX de transação - padrões de UI
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.