Skip to main content
There are four functions to sign and send transactions with Solana:
  • signAndSendTransaction: Sign and send a transaction. Sponsors gas automatically when SVM Gas Sponsorship is enabled in project settings and the wallet supports it; otherwise sends a regular transaction.
  • signAndSendSponsoredTransaction: Sign and send a sponsored transaction. Throws if sponsorship is not available.
  • signTransaction: Sign a transaction
  • signAllTransactions: Sign multiple transactions

Usage

import {
  signAndSendTransaction,
  signAndSendSponsoredTransaction,
  signTransaction,
  signAllTransactions,
} from '@dynamic-labs-sdk/solana';

const sendTransaction = async (walletAccount, transaction) => {
  const { signature } = await signAndSendTransaction({ transaction, walletAccount });
  console.log('Transaction sent successfully.', signature);
};

const sendSponsoredTransaction = async (walletAccount, transaction) => {
  const { signature } = await signAndSendSponsoredTransaction({ transaction, walletAccount });
  console.log('Sponsored transaction sent successfully.', signature);
};

const signTx = async (walletAccount, transaction) => {
  const { signedTransaction } = await signTransaction({ transaction, walletAccount });
  console.log('Transaction signed successfully.', signedTransaction);
};

const signTransactions = async (walletAccount, transactions) => {
  const { signedTransactions } = await signAllTransactions({ transactions, walletAccount });
  console.log('Transactions signed successfully.', signedTransactions);
};

Gas Sponsorship

signAndSendTransaction honors the project’s SVM gas sponsorship setting by default. When sponsorship is enabled in the dashboard and the wallet provider supports it (embedded V3 MPC wallets), the transaction is sponsored automatically. Otherwise, it sends a regular transaction. Use the sponsorshipMode option to control this behavior on a per-call basis:
  • 'auto' (default): sponsor when project settings and the wallet support it, otherwise send a regular transaction.
  • 'off': never sponsor, regardless of project settings.
// Explicitly skip sponsorship for this call.
const { signature } = await signAndSendTransaction({
  sponsorshipMode: 'off',
  transaction,
  walletAccount,
});
To require sponsorship (and throw if it isn’t available), use signAndSendSponsoredTransaction instead. See SVM Gas Sponsorship for details.

Error Handling

  • If the specified wallet account is not a SolanaWalletAccount, it will throw a NotSolanaProviderError error.
  • If the specified wallet account is not available for signing (e.g. wallet is an external wallet and the specific account is not the active one in the wallet app, or not connected to your app), it will throw a WalletAccountNotSelectedError error, stating what is the expected account address to be used, and the active account address in the wallet app (if available).
  • If signAndSendSponsoredTransaction is called on a wallet that does not support sponsorship (e.g. an external wallet), it will throw a SponsorTransactionError.