> ## Documentation Index
> Fetch the complete documentation index at: https://cosmos-docs-security-release.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Create an ML-DSA account

> Create a post-quantum user account with the keyring and move funds into it; there is no in-place migration for accounts.

This guide creates a user account backed by `ml_dsa_65`, the post-quantum signature algorithm, and moves funds into it. Accounts do not rotate. An existing account keeps its key for life, so moving to post-quantum means a new account and a transfer. For what ML-DSA is and when account migration matters, see [Post-quantum keys](/sdk/next/keys/post-quantum-keys).

Commands use `simd`. Substitute your chain's binary and adjust key names and denoms.

## Know the limits first

* CLI only. Wallet support for ML-DSA accounts is minimal; expect to manage the account with the chain CLI.
* No hardware wallets. Ledger devices sign with `secp256k1` only. Recovery works from the mnemonic alone.
* No EVM. EVM transactions require `eth_secp256k1` account keys, so ML-DSA accounts do not work with the EVM. See the EVM section of [Post-quantum keys](/sdk/next/keys/post-quantum-keys).

## Prerequisites

* The chain runs Cosmos SDK 0.55 or later.
* A running chain to send transactions to, with its CLI binary on your PATH and a funded account in the keyring. To stand up a local chain first, see [Run a node](/sdk/next/node/run-node).

## 1. Create the account

Generate the account with the keyring and select the ML-DSA algorithm:

```shell theme={"theme":{"light":"github-light-high-contrast","dark":"github-dark-high-contrast"}}
simd keys add pq-account --key-type ml_dsa_65
```

The output shows the new address and a mnemonic. Store the mnemonic securely. No hardware wallet can hold this key, so the mnemonic is the only recovery path. To recover the account later:

```shell theme={"theme":{"light":"github-light-high-contrast","dark":"github-dark-high-contrast"}}
simd keys add pq-account --recover --key-type ml_dsa_65
```

## 2. Move funds in

There is no in-place migration for accounts by design. Send funds from the old account with an ordinary transfer:

```shell theme={"theme":{"light":"github-light-high-contrast","dark":"github-dark-high-contrast"}}
simd tx bank send old-account "$(simd keys show pq-account -a)" 1000000stake --from old-account
```

Both transfers here are ordinary transactions. They read the signing key and chain ID from your client config; add `--chain-id`, `--keyring-backend`, and `--home` if that config does not supply them, and set `--fees` (or `--gas-prices`) to meet the chain's minimum gas price.

## 3. Verify the account signs

Confirm the balance arrived:

```shell theme={"theme":{"light":"github-light-high-contrast","dark":"github-dark-high-contrast"}}
simd query bank balances "$(simd keys show pq-account -a)"
```

Then prove the new key works by sending from it:

```shell theme={"theme":{"light":"github-light-high-contrast","dark":"github-dark-high-contrast"}}
simd tx bank send pq-account "$(simd keys show old-account -a)" 1stake --from pq-account --gas auto --gas-adjustment 1.5
```

You may need to raise the gas limit for this transfer. The account's first transaction writes its public key to state, and an ML-DSA public key is large enough that the default limit of 200000 runs out of gas. `--gas auto` sizes the limit to fit. Later transactions from the account are smaller and fit within the default.

A successful send from `pq-account` means the chain accepted an ML-DSA signature for the account. Drain and retire the old account safterwards.

## Next steps

* Understand what post-quantum protection the account now has. See [Post-quantum keys](/sdk/next/keys/post-quantum-keys).
* Validators migrate differently, by key rotation. See [Migrate a validator to ML-DSA](/sdk/next/keys/migrate-validator-ml-dsa).
