Skip to main content

Overview

Dynamic allows users to export their embedded wallet private keys for maximum control and portability. 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, ensure you surface this flow to your end-users so they always maintain control of their wallet.

Private key export settings

By default, users can export their private keys from embedded wallets. You can control this setting in the Embedded Wallets dashboard. Navigate to the Security section and toggle Private Key Exports to enable or disable private key exports.
Private Key Export Toggle
Consider disabling private key exports if your use case requires additional security controls. Disabling exports prevents users from exporting keys, which can reduce the risk of key exposure but limits user portability. See Best Practices - Private Key Export Controls for guidance.

Revealing the private key

To open the export wallet flow on behalf of your users, call revealEmbeddedWalletPrivateKey() on the SDK’s UI module. This presents a secure flow where only the end-user can see their private key.
final sdk = DynamicSDK.instance;

sdk.ui.revealEmbeddedWalletPrivateKey();

Example

import 'package:dynamic_sdk/dynamic_sdk.dart';
import 'package:flutter/material.dart';

class RevealPrivateKeyButton extends StatelessWidget {
  const RevealPrivateKeyButton({super.key});

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () {
        final sdk = DynamicSDK.instance;
        sdk.ui.revealEmbeddedWalletPrivateKey();
      },
      child: const Text('Reveal Private Key'),
    );
  }
}
You should always provide your end-users with a path to reveal and replicate their keys from their embedded wallet. When using a custom UI embedded wallet flow, ensure you add a path for users to complete this step using the method 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.