LogoLogo
SupportGithubSign InGet Access
  • Introduction
  • GETTING STARTED
    • SDK Quick Start
    • API Quick Start
  • Guides
    • Web
      • Create a wallet
      • Send tokens
      • Sign a transaction
      • Simulate a transaction
      • Back up a wallet
      • Recover a wallet
      • Cross-device sessions
      • Manage wallet lifecycle states
      • Web authentication methods
      • Perform swaps
      • Add custom signature hooks
      • MPC progress callbacks
      • Portal API methods
      • Configure a custom subdomain
      • Eject a wallet
      • Using the EIP-1193 Provider
      • Legacy documentation
        • Back up a wallet
          • Backup Options
        • Recover a wallet
    • iOS
      • Create a wallet
      • Send tokens
      • Sign a transaction
      • Simulate a transaction
      • Back up a wallet
      • Recover a wallet
      • Cross-device sessions
      • Manage wallet lifecycle states
      • Connect with WalletConnect
      • Build a WebView
      • Perform swaps
      • Add custom signature hooks
      • MPC progress callbacks
      • Portal API methods
      • Manage ERC20 tokens
      • Eject a wallet
      • Legacy documentation
        • Back up a wallet
          • Backup Options
          • Passkey + Enclave Storage
        • Recover a wallet
      • Troubleshooting Tips
      • Feature Flags
    • Android
      • Create a wallet
      • Send tokens
      • Sign a transaction
      • Simulate a transaction
      • Back up a wallet
      • Recover a wallet
      • Cross-device sessions
      • Manage wallet lifecycle states
      • Connect with WalletConnect
      • Build a WebView
      • Perform swaps
      • Add custom signature hooks
      • MPC progress callbacks
      • Portal API methods
      • Eject a wallet
      • Legacy documentation
        • Back up a wallet
          • Backup Options
        • Recover a wallet
    • React Native
      • Create a wallet
      • Send tokens
      • Sign a transaction
      • Simulate a transaction
      • Back up a wallet
      • Recover a wallet
      • Cross-device sessions
      • Manage wallet lifecycle states
      • Connect with WalletConnect
      • Build a WebView
      • Perform swaps
      • Add custom signature hooks
      • MPC progress callbacks
      • Portal API methods
      • Eject a wallet
      • Legacy documentation
        • Back up a wallet
          • Backup Options
        • Recover a wallet
    • Enclave MPC API
      • Create a client
      • Create a wallet
      • Send tokens
      • Sign Ethereum transactions
      • Sign Solana transactions
      • Sign Tron transactions
      • Sign Stellar Transaction
      • Concurrent Transactions
      • Back up a wallet
      • Eject a wallet
  • Reference
    • iOS
      • createWallet
      • backupWallet
      • recoverWallet
      • ejectPrivateKeys
      • registerBackupMethod
      • setGDriveConfiguration
      • setPasskeyConfiguration
      • setPasskeyAuthenticationAnchor
      • setPassword
      • availableRecoveryMethods
      • doesWalletExist
      • isWalletBackedUp
      • isWalletOnDevice
      • isWalletRecoverable
      • getBalances
      • getAssets
      • getNftAssets
      • getTransactions
      • sendSol
      • evaluateTransaction
      • buildEip155Transaction
      • buildSolanaTransaction
      • getWalletCapabilities
    • Android
      • Reference Documentation
    • React Native
      • @portal-hq/core
      • Storage adapters
        • Cloud storage
          • @portal-hq/gdrive-storage
          • @portal-hq/icloud-storage
        • Mobile storage
          • @portal-hq/keychain
          • @portal-hq/mobile-key-values
    • Enclave MPC API
      • V1 endpoints
    • Client API
      • V3 endpoints
      • V1 endpoints
    • Custodian API
      • V3 endpoints
      • V1 endpoints
    • Swaps API
      • V3 endpoints
      • V1 endpoints
  • Resources
    • Flutter
      • iOS
      • Android
    • Error codes
      • Overview
      • MPC errors
      • Network errors
      • General errors
      • Encryption errors
      • Portal Connect errors
    • Portal's MPC architecture
    • Authentication and API Keys
    • Self-Managed Backups
    • Alert Webhooks
    • Wallet lifecycle
    • Backup options
      • Password/PIN
      • GDrive
      • iCloud
      • Passkey + Enclave
    • WalletConnect metadata
    • Advanced security scanning
    • Account abstraction
    • Security firewall
    • Eject
    • Security
    • Blockchain support
    • Chain ID formatting
    • Testnet faucets
    • Going to Production
    • Rate Limits
    • Multi-backup migration guide
    • Multi-wallet migration guides
      • Migrating from Android SDK v3.x.x to v4.x.x
      • Migrating from iOS SDK v3.0.x to v3.2.x
  • Support
    • Changelog
      • Android
      • iOS
      • React Native
      • Web
      • Past Releases
        • 2024 Releases
        • 2023 Releases
    • Celo Hackathon Hub
    • Glossary
Powered by GitBook
On this page

Was this helpful?

  1. Reference
  2. iOS

isWalletBackedUp

Checks whether a wallet has completed backups. This method verifies if backup shares have been successfully created and stored.

Function Signature

public func isWalletBackedUp(
    _ forChainId: String? = nil
) async throws -> Bool

Parameters

  • forChainId: Optional chain identifier (e.g., "eip155:1" for Ethereum mainnet, "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp" for Solana mainnet). If nil, checks backup status across all chains.

Returns

A boolean value indicating whether the wallet is backed up:

  • When forChainId is provided:

    • Returns true if a wallet exists for the specified chain and has at least one completed backup share

    • Returns false if no wallet exists or if no backup shares are completed

  • When forChainId is nil:

    • Returns true if any wallet exists and has at least one completed backup share

    • Returns false if no wallets exist or if no backup shares are completed

Throws

  • PortalClassError.clientNotAvailable if the client is not initialized

Example Usage

// Check backup status for all wallets
do {
    let isBackedUp = try await portal.isWalletBackedUp()
    if isBackedUp {
        print("At least one wallet is backed up")
    } else {
        print("No wallets are backed up")
    }
} catch {
    print("Error checking backup status: \(error)")
}

// Check backup status for specific chains
do {
    // Check Ethereum wallet backup
    let ethBackedUp = try await portal.isWalletBackedUp("eip155:1")
    if ethBackedUp {
        print("Ethereum wallet is backed up")
    }
    
    // Check Solana wallet backup
    let solBackedUp = try await portal.isWalletBackedUp("solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp")
    if solBackedUp {
        print("Solana wallet is backed up")
    }
} catch {
    print("Error checking chain-specific backups: \(error)")
}

// Complete example with backup flow
do {
    let isBackedUp = try await portal.isWalletBackedUp()
    if !isBackedUp {
        // Perform backup if not already done
        let backup = try await portal.backupWallet(.iCloud) { status in
            switch status.status {
            case .readingShare:
                print("Reading share...")
            case .encryptingShare:
                print("Encrypting share...")
            case .storingShare:
                print("Storing backup...")
            case .done:
                print("Backup completed!")
            default:
                break
            }
        }
        
        // Complete the backup process
        try await backup.storageCallback()
        
        // Verify backup was successful
        let verifyBackup = try await portal.isWalletBackedUp()
        print("Backup verification: \(verifyBackup ? "Success" : "Failed")")
    } else {
        print("Wallet is already backed up")
    }
} catch {
    print("Error in backup process: \(error)")
}

Implementation Notes

  • The method only considers backup shares with a status of .completed

  • Incomplete or pending backups are not considered when determining backup status

  • Useful for ensuring wallet security and prompting users to complete backup

  • Should be checked before performing critical operations

Usage in App Flow

  1. After Wallet Creation:

    // Check backup status after creating wallet
    let wallet = try await portal.createWallet()
    if !(try await portal.isWalletBackedUp()) {
        // Prompt user to backup their wallet
        showBackupPrompt()
    }
  2. Security Checks:

    // Ensure wallet is backed up before large transactions
    func performTransaction() async throws {
        guard try await portal.isWalletBackedUp() else {
            throw CustomError.walletNotBackedUp
        }
        // Proceed with transaction
    }

Related Documentation

For more information about wallet backups, see:

  • Back up a wallet

PreviousdoesWalletExistNextisWalletOnDevice

Last updated 3 months ago

Was this helpful?

Backup methods
Backup options