> ## Documentation Index
> Fetch the complete documentation index at: https://docs.portalhq.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Manage wallet lifecycle states

> This guide will walk you through how to manage your users' wallet lifecycle states.

After initializing Portal for your user, it's crucial to determine their wallet's lifecycle state to ensure a healthy wallet state. We provide several helper methods to easily derive the state of your users' wallets:

```kotlin theme={null}
// Checks if the user has created a wallet on any device.
portal.doesWalletExistOrThrow()

// Checks if the user's wallet share is on their current device.
portal.isWalletOnDeviceOrThrow()

// Checks if the user has backed up their wallet.
portal.isWalletBackedUpOrThrow()

// Checks if the user can recover their wallet.
portal.isWalletRecoverableOrThrow()

// Returns a list of available recovery methods based on the user's backups.
portal.availableRecoveryMethods()
```

<Warning>
  The previous methods `doesWalletExist()`, `isWalletOnDevice()`, `isWalletBackedUp()`, and `isWalletRecoverable()` are deprecated. These methods silently return `false` when an error occurs, which can mask underlying issues. Use the `OrThrow` variants above instead — they propagate errors so you can handle them explicitly.
</Warning>

These methods can be used together to understand the user's wallet state and determine the next steps. For example:

```kotlin theme={null}
suspend fun manageWalletState(portal: Portal) {
    try {
        // Determine the wallet's state.
        val walletExists = portal.doesWalletExistOrThrow()
        val walletExistsOnDevice = portal.isWalletOnDeviceOrThrow()
        val walletIsRecoverable = portal.isWalletRecoverableOrThrow()

        if (!walletExists) {
            // Create and back up the wallet using portal.createWallet() and portal.backup().
        } else if (!walletExistsOnDevice) {
            if (walletIsRecoverable) {
                // Recover the wallet using portal.recover().
            } else {
                // Inform the user to back up the wallet on the original device.
            }
        } else {
            // The wallet is ready to use.
        }
    } catch(e: Exception) {
        // Handle any errors that occur.
    }
}
```

Each method also accepts an optional `chainId` parameter (e.g., `"eip155:1"`) or a `PortalNamespace` to check the state for a specific chain instead of globally.

And that's it! You're now helping your users maintain a safe and secure experience with their wallets while using your apps.
