Signing Transactions & Messages
Sign transaction messages and off-chain auth payloads with connected wallets.
Search across all documentation pages
Sign transaction messages and off-chain auth payloads with connected wallets.
import { signTransactionMessageWithSigners } from "@solana/kit";
// wallet adapter provides TransactionSendingSigner compatible adapterWhen to reach for this:
"use client";
import { useWallet } from "@solana/wallet-adapter-react";
import {
createTransactionMessage,
setTransactionMessageFeePayerSigner,
setTransactionMessageLifetimeUsingBlockhash,
appendTransactionMessageInstruction,
signTransactionMessageWithSigners,
createSolanaRpc,
} from "@solana/kit";
import { getTransferSolInstruction } from "@solana-program/system";
export function useSendSol() {
const { publicKey, signTransaction } = useWallet();
const rpc = createSolanaRpc(process.env.NEXT_PUBLIC_RPC_URL!);
return async function send(recipient: string, lamports: bigint) {
if (!publicKey || !signTransaction) throw new Error("Wallet not connected");
const { value: bh } = await rpc.getLatestBlockhash().send();
// Wire wallet signer helper from your adapter bridge
let msg = createTransactionMessage({ version: 0 });
// ... append transfer ix, sign with wallet, send via rpc
};
}What this demonstrates:
signMessage returns ed25519 signature over arbitrary bytes.| Alternative | Use When | Don't Use When |
|---|---|---|
| Server-sponsored tx | Gasless onboarding | Trustless self-custody |
| Mobile Wallet Adapter | React Native | Desktop extension only |
Match RPC URL, wallet network, and program IDs to one cluster.
Use @solana/kit 7.0.0 for new frontend code.
Surfpool 0.12.0 or devnet with faucet SOL.
confirmed for UX; finalized for high-value reads.
Providers in client layout; reads can be server-side.
Show retry; never assume approval.
Compute budget instructions on congested mainnet.
Use Mobile Wallet Adapter for React Native apps.
Never expose server keypairs to the browser.
Regenerate typed clients in CI.
Stack versions: This page was written for 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, and LiteSVM 0.6.x.
Reviewed by Chris St. John·Last updated Jul 16, 2026