Overview
This guide walks you through creating EVM wallets using Dynamic’s Java SDK. You’ll learn how to set up different threshold signature schemes and understand the security implications of each choice.Prerequisites
Before you begin, make sure you have:Step 1: Choose Your Security Model
Dynamic supports two threshold signature schemes, each offering different security and availability trade-offs:TWO_OF_TWO (Default)
- 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 Wallet
DynamicEvmWalletClient::createWalletAccount runs an MPC keygen ceremony and returns a KeygenResult carrying the wallet metadata and the server key shares the customer must persist.
Step 3: Handle Errors
The SDK throwsDynamicSdkException subclasses inside the CompletableFuture — unwrap with CompletionException::getCause and match on the type:
Step 4: Persist WalletProperties and List<ServerKeyShare>
KeygenResult carries two pieces of state — each belongs in a different storage tier:
WalletProperties to every subsequent sign / export operation. See Storage Best Practices for the full pattern.
Best Practices
- Password Security — use strong, unique passwords per wallet; prefer
char[]overStringso the value can be cleared deterministically; never log it - Error Handling — match on exception subclasses (
InvalidArgumentException,AuthException,DynamicSdkException) rather than string-matching - Resource Management —
DynamicEvmWalletClientisAutoCloseable; use try-with-resources or callclose()explicitly to release the HTTP client + native handles - Backup Strategy — if
.backUpToDynamic(false), persist shares to your vault before returning success to the caller