Skip to main content

General Setup

Formatting

Chain✅ Import Format✅ Export Format
EVMHexadecimal with or without 0xHexadecimal without 0x
SolanaBase58-encoded private keyBase58-encoded private key
SuiBech32-encoded private keyBech32-encoded private key

Importing Wallet Keys

When importing an existing private key into Dynamic’s TSS-MPC system, we use Shamir Secret Sharing (SSS) to securely split the key into multiple shares. This process:
  1. Takes your existing private key as input
  2. Uses SSS to split it into either 2 or 3 shares (depending on your configuration)
  3. Distributes the shares between the relevant parties (user, server, and optionally a backup)
  4. Securely destroys the original private key
After import, the key exists solely in its distributed form, and all future operations are performed using TSS-MPC. The complete private key is never reconstructed, preserving the security benefits of TSS-MPC while enabling seamless migration from traditional wallets.

Exporting Wallet Keys

For maximum user control and portability, Dynamic allows users to export their private keys. During export:
  1. The key shares are temporarily recombined on the user’s device using secure MPC
  2. The private key is constructed client side and provided to the user
This ensures users maintain true self-custody and can always access their assets, even outside of Dynamic’s ecosystem.
When implementing Dynamic in a custom UI, please ensure you are surfacing this flow to your end-users, so that they always maintain control of their wallet.

Blocking private key exports

You can disable private key exports for your users via the dashboard. Navigate to Embedded Wallets > MPC Wallets and find the Security section. Toggle off Private Key Exports to prevent users from exporting their private keys.
This feature requires the latest SDK version. Make sure to update your SDK before enabling this setting.
To open the export wallet flow on behalf of your users, you can call the revealEmbeddedWalletKey method. This will open the flow described above. Only the end-user will be able to see the private key or seed phrase.
const ExportEmbeddedWalletKeyButtons: FC = () => {
  return (
    <View>
      <TouchableOpacity
        onPress={() =>
          client.ui.wallets.revealEmbeddedWalletKey({
            type: 'private-key',
          })
        }
      >
        Reveal private key
      </TouchableOpacity>
    </View>
  )
}
You can read more about the embedded wallets module here.
You should always provide your end-users with a path to reveal and replicate their keys from their embedded wallet. When using the custom UI embedded wallet flow, please ensure you add a path for users to complete this step using the programmatic option described above.
End-users should be aware that replicating their wallet credentials can expose their wallet to risk if the credentials are not stored securely. Users are advised to store their credentials in a secure location and not share them with anyone. When implementing Dynamic in a custom UI, we recommend communicating these warnings to users.