Skip to main content

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 throws DynamicSdkException 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:
The SDK is stateless and you must pass WalletProperties to every subsequent sign / export operation. See Storage Best Practices for the full pattern.

Best Practices

  1. Password Security — use strong, unique passwords per wallet; prefer char[] over String so the value can be cleared deterministically; never log it
  2. Error Handling — match on exception subclasses (InvalidArgumentException, AuthException, DynamicSdkException) rather than string-matching
  3. Resource ManagementDynamicEvmWalletClient is AutoCloseable; use try-with-resources or call close() explicitly to release the HTTP client + native handles
  4. Backup Strategy — if .backUpToDynamic(false), persist shares to your vault before returning success to the caller

Next Steps

Now that you’ve created a wallet, you can:
Last modified on May 25, 2026