Overview

This guide walks you through creating Solana (SVM) wallets using Dynamic’s Node SDK. You’ll learn how to set up different threshold signature schemes and understand the security implications for Solana blockchain operations.

Prerequisites

Before you begin, make sure you have:

Step 1: Choose Your Security Model

Dynamic supports two threshold signature schemes for Solana wallets:
  • Security: Highest - requires both your server and Dynamic’s infrastructure
  • Availability: Lower - both parties must be online
  • Use case: High-value transactions, maximum security

TWO_OF_THREE

  • Security: High - requires 2 out of 3 shares
  • Availability: Medium - can tolerate one party being offline
  • Use case: Balanced security and availability

Step 2: Create Your First Solana Wallet

Here’s a complete example of creating a Solana wallet:
import { authenticatedSvmClient } from './client';
import { ThresholdSignatureScheme } from '@dynamic-labs-wallet/node';

export const createSvmWallet = async ({
  thresholdSignatureScheme = ThresholdSignatureScheme.TWO_OF_TWO,
  password
}: {
  thresholdSignatureScheme?: ThresholdSignatureScheme;
  password?: string;
}) => {
  const svmClient = await authenticatedSvmClient();

  const wallet = await svmClient.createWalletAccount({
    thresholdSignatureScheme,
    password
  });

  return {
    accountAddress: wallet.accountAddress,
    publicKeyHex: wallet.publicKeyHex,
    walletId: wallet.walletId,
  };
};

// Usage example
const wallet = await createSvmWallet({
  thresholdSignatureScheme: ThresholdSignatureScheme.TWO_OF_TWO,
  password: 'your-secure-password',
});

console.log('Solana wallet created:', wallet.accountAddress);

Step 3: Handle Errors Gracefully

Always implement proper error handling for Solana wallet creation:
try {
  const wallet = await createSvmWallet({
    thresholdSignatureScheme: ThresholdSignatureScheme.TWO_OF_TWO,
  });
  console.log('Solana wallet created successfully:', wallet.accountAddress);
} catch (error) {
  if (error.message.includes('insufficient funds')) {
    console.error('Insufficient funds for wallet creation');
  } else if (error.message.includes('invalid session')) {
    console.error('Invalid session ID - please re-authenticate');
  } else {
    console.error('Solana wallet creation failed:', error.message);
  }
}

Step 4: Store Wallet Information Securely

After creating a Solana wallet, you’ll receive important information that should be stored securely:
const wallet = await svmClient.createWalletAccount({
  thresholdSignatureScheme: ThresholdSignatureScheme.TWO_OF_TWO,
});

// Store these securely in your database
const walletData = {
  accountAddress: wallet.accountAddress,
  walletId: wallet.walletId,
  thresholdScheme: ThresholdSignatureScheme.TWO_OF_TWO,
  chainName: 'solana',
  createdAt: new Date().toISOString(),
};

// Never store externalServerKeyShares in plain text
// They should be encrypted and stored securely

Step 5: Verify Your Solana Wallet

You can verify your wallet was created correctly by checking the Solana network:
import { Connection, PublicKey } from '@solana/web3.js';

const connection = new Connection('https://api.mainnet-beta.solana.com', 'confirmed');
const publicKey = new PublicKey(wallet.accountAddress);

// Check if the account exists
const accountInfo = await connection.getAccountInfo(publicKey);
if (accountInfo) {
  console.log('Solana wallet verified on network');
} else {
  console.log('Wallet created but not yet on network (normal for new wallets)');
}

Best Practices

  1. Password Security: Use strong, unique passwords for each Solana wallet
  2. Error Handling: Always handle potential errors during wallet creation
  3. Monitoring: Log wallet creation events for audit purposes
  4. Backup Strategy: Implement secure backup strategies for key shares
  5. Network Selection: Choose the appropriate Solana network (mainnet, devnet, testnet)

Solana-Specific Considerations

Network Selection

  • Mainnet: For production applications
  • Devnet: For development and testing
  • Testnet: For testing with test tokens

Account Types

  • System Accounts: Standard Solana accounts for SOL storage
  • Token Accounts: For SPL token storage (created separately)

Rent Exemption

Solana accounts require rent exemption (minimum balance). Dynamic handles this automatically during wallet creation.

Next Steps

Now that you’ve created a Solana wallet, you can: