Documentation Index
Fetch the complete documentation index at: https://docs.dynamic.xyz/docs/llms.txt
Use this file to discover all available pages before exploring further.
There are four functions to sign and send transactions with Solana:
signAndSendTransaction: Sign and send a single transaction
signAndSendSponsoredTransaction: Sign and send a sponsored (gasless) transaction
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);
};
Use useWalletAccounts from @dynamic-labs-sdk/react-hooks to reactively get the active wallet, then call transaction functions inside button handlers:import { signAndSendTransaction } from '@dynamic-labs-sdk/solana';
import { useWalletAccounts } from '@dynamic-labs-sdk/react-hooks';
import { useState } from 'react';
function SendSolanaButton({ transaction }) {
const walletAccounts = useWalletAccounts();
const walletAccount = walletAccounts[0];
const [signature, setSignature] = useState('');
const handleSend = async () => {
if (!walletAccount) return;
const { signature } = await signAndSendTransaction({ transaction, walletAccount });
setSignature(signature);
console.log('Transaction sent:', signature);
};
return (
<div>
<button onClick={handleSend} disabled={!walletAccount}>
Send Transaction
</button>
{signature && <p>Signature: {signature}</p>}
</div>
);
}
signAndSendSponsoredTransaction sponsors the transaction via Dynamic’s gas sponsorship API before signing and sending. This is only available for embedded (WaaS) wallets and requires SVM Gas Sponsorship to be enabled in the dashboard. 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.