> ## 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

> Users can have multiple states in their wallet lifecycle: having a wallet, having wallet backups, having certain recovery methods available, and more.

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:

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

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

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

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

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

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

```swift theme={null}
func manageWalletState(portal: Portal) async {
    do {
        // Determine the wallet's state.
        let walletExists = try await portal.doesWalletExist()
        let walletExistsOnDevice = try await portal.isWalletOnDevice()
        let walletIsRecoverable = try await portal.isWalletRecoverable()

        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 {
        // Handle any errors that occur.
    }
}
```

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

**Related Documentation**

* [doesWalletExist function reference](../reference/doeswalletexist)
* [isWalletOnDevice function reference](../reference/iswalletondevice)
* [isWalletBackedUp function reference](../reference/iswalletbackedup)
* [isWalletRecoverable function reference](../reference/iswalletrecoverable)
* [availableRecoveryMethods function reference](../reference/availablerecoverymethods)
