createSignerFromWalletAccount

function createSignerFromWalletAccount<TWalletAccount>(
    uiWalletAccount,
    chain,
):
    | TransactionSigner<TWalletAccount['address']>
    | (MessageSigner<TWalletAccount['address']> &
          TransactionSigner<TWalletAccount['address']>);

Creates a combined signer from a UiWalletAccount that exposes all signing capabilities the wallet account supports.

Unlike the more specific helpers (createTransactionSignerFromWalletAccount, createTransactionSendingSignerFromWalletAccount, createMessageSignerFromWalletAccount), this function inspects the wallet account's features at call time and returns a single signer object with whichever of the following methods are available:

  • modifyAndSignTransactions — present when the solana:signTransaction feature is available.
  • signAndSendTransactions — present when the solana:signAndSendTransaction feature is available.
  • modifyAndSignMessages — present when the solana:signMessage feature is available.

At least one of solana:signTransaction or solana:signAndSendTransaction must be present, otherwise an error is thrown. solana:signMessage is optional.

Type Parameters

Type Parameter
TWalletAccount extends UiWalletAccount

Parameters

ParameterTypeDescription
uiWalletAccountTWalletAccountThe wallet account to create a signer from.
chain| "solana:mainnet" | "solana:devnet" | "solana:testnet" | "solana:localnet"The Solana chain identifier (e.g., 'solana:devnet', 'solana:mainnet').

Returns

| TransactionSigner<TWalletAccount["address"]> | MessageSigner<TWalletAccount["address"]> & TransactionSigner<TWalletAccount["address"]>

A TransactionSigner, optionally combined with a MessageSigner, depending on the features available on the wallet account.

Throws

If the wallet account does not support the specified chain.

Throws

If the wallet account supports neither solana:signTransaction nor solana:signAndSendTransaction.

Example

import { createSignerFromWalletAccount } from '@solana/wallet-account-signer';
import { isMessageSigner } from '@solana/signers';
 
const signer = createSignerFromWalletAccount(walletAccount, 'solana:devnet');
 
// Sign a transaction (always available — at least one tx feature must exist)
if ('modifyAndSignTransactions' in signer) {
    const [signedTransaction] = await signer.modifyAndSignTransactions([transaction]);
}
 
// Also sign messages if the wallet supports it
if (isMessageSigner(signer)) {
    const [signedMessage] = await signer.modifyAndSignMessages([message]);
}

See

On this page