This guide walks you through creating EVM wallets using Dynamic’s Rust SDK. You’ll learn how to set up different threshold signature schemes and understand the security implications of each choice.
Every call to create_wallet_account returns a Vec<ServerKeyShare>, the customer-side half of the MPC key. You always vault this share in your own infrastructure for day-to-day signing; the chain clients in 0.0.4 require it as an explicit argument on every sign / export call.The back_up_to_dynamic flag controls whether Dynamic also keeps an encrypted copy for disaster recovery:
The SDK encrypts your share with password (AES-256-GCM) and uploads the encrypted blob to Dynamic’s key share service. You still receive the share locally in the return value and still vault it yourself. If you ever lose your vaulted copy, you can recover it from Dynamic’s backup using run_recover_key_shares with the same password.
password is required when back_up_to_dynamic: true. The SDK rejects the call with Error::InvalidArgument if you pass None. The password never leaves your server. It’s used locally to derive an AES-256-GCM key that wraps the share before upload, and the same password is needed later to unwrap the recovered blob.
Dynamic does not store any copy of the share. You are the only holder. password is optional in this mode. Losing the share means permanently losing access to the wallet.
Mode
Local vault
Dynamic backup
password at create
Disaster recovery
back_up_to_dynamic: true
Required
Encrypted copy stored
Required
run_recover_key_shares + password
back_up_to_dynamic: false
Required
None
Optional
None; share loss means wallet loss
Don’t reuse a single password across all wallets. Derive one per wallet from a KMS-wrapped secret. A leaked password + leaked walletId lets an attacker decrypt the share from Dynamic’s backup.