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

getWalletCapabilities

Retrieves the capabilities and supported features of the current wallet, particularly focusing on available services like paymaster support.

Function Signature

public func getWalletCapabilities() async throws -> WalletCapabilitiesResponse

Parameters

None - This function doesn't require any parameters.

Returns

A WalletCapabilitiesResponse dictionary containing:

  • Chain identifiers mapped to WalletCapabilitiesValue objects

  • Each WalletCapabilitiesValue includes:

    • paymasterService: Information about paymaster support

      • supported: Boolean indicating if paymaster service is available

Example Usage

// Basic capabilities check
do {
    let capabilities = try await portal.getWalletCapabilities()
    
    // Check capabilities for Ethereum mainnet
    if let ethCapabilities = capabilities["eip155:1"] {
        if ethCapabilities.paymasterService.supported {
            // Handle supported paymaster
            print("Paymaster service available")
            proceedWithGaslessTransaction()
        } else {
            // Handle unsupported paymaster
            print("Regular transaction required")
            proceedWithRegularTransaction()
        }
    }
    
    // Check capabilities for multiple chains
    let chainIds = [
        "eip155:1",     // Ethereum
        "eip155:137",   // Polygon
        "eip155:56"     // BSC
    ]
    
    for chainId in chainIds {
        if let chainCapabilities = capabilities[chainId] {
            print("\(chainId) Capabilities:")
            print("Paymaster supported: \(chainCapabilities.paymasterService.supported)")
        }
    }
} catch {
    print("Failed to fetch capabilities: \(error)")
}

// Feature-gated transaction handling
do {
    let capabilities = try await portal.getWalletCapabilities()
    
    guard let chainCapabilities = capabilities["eip155:1"],
          chainCapabilities.paymasterService.supported else {
        throw WalletError.paymasterNotSupported
    }
    
    // Proceed with paymaster-dependent transaction
    await processGaslessTransaction()
} catch {
    // Handle unsupported feature
    switch error {
    case WalletError.paymasterNotSupported:
        print("Paymaster service not available")
        await requestGasFromUser()
    default:
        print("Unexpected error: \(error)")
    }
}

Implementation Notes

  1. Chain Support

    • Check capabilities per chain before feature-dependent operations

    • Handle missing chain capabilities gracefully

    • Verify feature support before initiating operations

  2. Error Handling

    • Handle network failures when fetching capabilities

    • Verify capability existence before access

    • Consider fallback options for unsupported features

  3. Capability Changes

    • Capabilities might change during runtime

    • Consider refreshing capabilities periodically

    • Don't cache capabilities for extended periods

PreviousbuildSolanaTransactionNextAndroid

Last updated 3 months ago

Was this helpful?