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:

// 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:

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.

Last updated