Overview
This comprehensive example demonstrates all available functions in the Dynamic SVM SDK, showing the actual API usage patterns and how to handle common operations.Complete Example Code
Copy
Ask AI
// Import statements
import { DynamicSvmWalletClient } from "@dynamic-labs-wallet/node-svm";
import {
Connection,
LAMPORTS_PER_SOL,
PublicKey,
SystemProgram,
Transaction,
} from "@solana/web3.js";
import { ThresholdSignatureScheme } from "@dynamic-labs-wallet/node";
import fs from "fs";
// Initialize SVM client
export const authenticatedSvmClient = async () => {
const client = new DynamicSvmWalletClient({
environmentId: process.env.DYNAMIC_ENVIRONMENT_ID!,
});
await client.authenticateApiToken(process.env.DYNAMIC_AUTH_TOKEN!);
return client;
};
// Example usage demonstrating all available functions
async function main() {
try {
console.log("🚀 Starting SVM Client Demo...\n");
// Initialize the SVM client
const svmClient = await authenticatedSvmClient();
console.log("✅ SVM client authenticated successfully\n");
// 1. Create a new SVM wallet
console.log("📝 Creating new SVM wallet...");
const svmWallet = await svmClient.createWalletAccount({
thresholdSignatureScheme: ThresholdSignatureScheme.TWO_OF_TWO,
onError: (error: Error) => {
console.error("❌ SVM wallet creation error:", error);
},
backUpToClientShareService: true,
});
console.log("✅ SVM wallet created:", svmWallet.accountAddress);
console.log("externalServerKeyShares:", svmWallet.externalServerKeyShares);
console.log("rawPublicKey:", svmWallet.rawPublicKey);
// Save wallet info to file
fs.writeFileSync("svmWallet.json", JSON.stringify(svmWallet, null, 2));
console.log("💾 Wallet saved to svmWallet.json\n");
// 2. Get wallet information
console.log("🔍 Getting wallet details...");
try {
const walletDetails = await svmClient.getWallet({
accountAddress: svmWallet.accountAddress,
});
console.log("✅ Wallet details retrieved:", walletDetails);
} catch (error) {
console.log("⚠️ Could not retrieve wallet details:", error);
}
// 3. Get all SVM wallets
console.log("\n📋 Getting all SVM wallets...");
try {
const allWallets = await svmClient.getSvmWallets();
console.log("✅ Found", allWallets.length, "SVM wallets");
} catch (error) {
console.log("⚠️ Could not retrieve all wallets:", error);
}
// 4. Sign a message
console.log("\n✍️ Signing a message...");
try {
const message = "Hello, Solana! This is a test message from Dynamic SVM wallet.";
const signedMessage = await svmClient.signMessage({
accountAddress: svmWallet.accountAddress,
message,
});
console.log("✅ Message signed successfully");
console.log("Signature:", signedMessage);
} catch (error) {
console.log("⚠️ Message signing failed:", error instanceof Error ? error.message : String(error));
}
// 5. Sign a transaction (Solana transfer example)
console.log("\n💸 Preparing Solana transaction...");
const connection = new Connection("https://api.devnet.solana.com", "confirmed");
try {
const amountInSol = 0.001;
const recipientAddress = "EukgLDgaWNQRLemZSHK8Wc9EGhPhbG3wL9a1mxa3LHg6";
// Create transaction
const transaction = new Transaction().add(
SystemProgram.transfer({
fromPubkey: new PublicKey(svmWallet.accountAddress),
toPubkey: new PublicKey(recipientAddress),
lamports: amountInSol * LAMPORTS_PER_SOL,
})
);
// Get latest blockhash
const { blockhash } = await connection.getLatestBlockhash();
transaction.recentBlockhash = blockhash;
transaction.feePayer = new PublicKey(svmWallet.accountAddress);
console.log("📝 Transaction prepared, signing with SVM wallet...");
// Sign the transaction
const signedTransaction = await svmClient.signTransaction({
senderAddress: svmWallet.accountAddress,
transaction,
});
console.log("✅ Transaction signed successfully");
console.log("Signed transaction:", signedTransaction);
} catch (error) {
console.log("⚠️ Transaction signing failed:", error instanceof Error ? error.message : String(error));
}
// 6. Import private key (if you have one)
console.log("\n🔑 Testing private key import...");
try {
const importedWallet = await svmClient.importPrivateKey({
privateKey: "your-private-key-here", // Replace with actual private key
chainName: "SVM",
thresholdSignatureScheme: ThresholdSignatureScheme.TWO_OF_TWO,
backUpToClientShareService: true,
password: "test-password",
});
console.log("✅ Private key imported:", importedWallet.accountAddress);
} catch (error) {
console.log("ℹ️ Private key import skipped (no valid key provided)");
}
// 7. Export key information
console.log("\n📤 Exporting key information...");
try {
const exportedKey = await svmClient.exportKey({
accountAddress: svmWallet.accountAddress,
chainName: "SVM",
});
console.log("✅ Key exported:", exportedKey);
} catch (error) {
console.log("ℹ️ Key export not available or requires additional setup");
}
// 8. Export private key
console.log("\n🔓 Exporting private key...");
try {
const privateKey = await svmClient.exportPrivateKey({
accountAddress: svmWallet.accountAddress,
});
console.log("✅ Private key exported:", privateKey);
} catch (error) {
console.log("ℹ️ Private key export not available or requires additional setup");
}
// 9. Test connection to Solana network
console.log("\n🌐 Testing Solana network connection...");
try {
const balance = await connection.getBalance(new PublicKey(svmWallet.accountAddress));
console.log("✅ Solana connection successful");
console.log("Wallet balance:", balance / LAMPORTS_PER_SOL, "SOL");
} catch (error) {
console.log("ℹ️ Solana network connection test skipped");
}
console.log("\n🎉 SVM Client Demo completed successfully!");
console.log("📁 Check svmWallet.json for wallet details");
// Summary of what was accomplished
console.log("\n📊 Demo Summary:");
console.log("✅ Successfully completed:");
console.log(` • Created SVM wallet: ${svmWallet.accountAddress}`);
console.log(` • Raw public key: ${svmWallet.rawPublicKey}`);
console.log(` • External server key shares: ${svmWallet.externalServerKeyShares?.length || 0}`);
console.log(` • Solana network connection: Working`);
// Try to get additional wallet details if available
try {
const walletDetails = await svmClient.getWallet({
accountAddress: svmWallet.accountAddress,
});
console.log(` • Wallet ID: ${walletDetails.walletId || "N/A"}`);
console.log(` • Threshold scheme: ${walletDetails.thresholdSignatureScheme || "N/A"}`);
console.log(` • Chain name: ${walletDetails.chainName || "N/A"}`);
} catch (error) {
console.log(" • Additional wallet details: Not available");
}
} catch (error) {
console.error("❌ Error in SVM demo:", error);
}
}
// Run the example
main();
Key API Patterns
1. Wallet Creation
Copy
Ask AI
const wallet = await svmClient.createWalletAccount({
thresholdSignatureScheme: ThresholdSignatureScheme.TWO_OF_TWO,
onError: (error: Error) => {
console.error("Wallet creation error:", error);
},
backUpToClientShareService: true,
});
2. Message Signing
Copy
Ask AI
const signature = await svmClient.signMessage({
message: "Hello, Solana!",
accountAddress: wallet.accountAddress,
});
3. Transaction Signing
Copy
Ask AI
const signedTransaction = await svmClient.signTransaction({
senderAddress: wallet.accountAddress,
transaction: transaction,
});
4. Wallet Retrieval
Copy
Ask AI
const walletDetails = await svmClient.getWallet({
accountAddress: wallet.accountAddress,
});
5. Getting All Wallets
Copy
Ask AI
const allWallets = await svmClient.getSvmWallets();
Available Functions
The SVM SDK provides the following main functions:createWalletAccount()- Create new SVM walletimportPrivateKey()- Import existing private keygetWallet()- Get specific wallet detailsgetSvmWallets()- Get all SVM walletssignMessage()- Sign messagessignTransaction()- Sign transactionsexportKey()- Export wallet key dataexportPrivateKey()- Export private key
Error Handling
Always implement proper error handling:Copy
Ask AI
try {
const result = await svmClient.someFunction(params);
console.log("Operation successful:", result);
} catch (error) {
console.error("Operation failed:", error instanceof Error ? error.message : String(error));
}
Environment Setup
Make sure you have these environment variables:Copy
Ask AI
DYNAMIC_AUTH_TOKEN=your_auth_token_here
DYNAMIC_ENVIRONMENT_ID=your_environment_id_here
Dependencies
Install required packages:Copy
Ask AI
bun add @dynamic-labs-wallet/node-svm @solana/web3.js @dynamic-labs-wallet/node