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
  • Initializing Swaps
  • Fetching a list of Sources
  • The returned list
  • Fetching a swap Quote
  • QuoteArgs
  • Using your QuoteArgs
  • The Quote object
  • Executing a Swap

Was this helpful?

  1. Guides
  2. Android

Perform swaps

This guide will walk you through how to perform swaps with Portal's Android SDK.

PreviousBuild a WebViewNextAdd custom signature hooks

Last updated 4 months ago

Was this helpful?

Please contact sales for additional pricing information on using the Swaps integrations at

The PortalSwaps class allows you to easily extend your existing Portal instance with swaps functionality.

Initializing Swaps

In order to initialize the Swaps class you need an existing Portal instance and a Swaps API Key. If you have not received a Swaps API Key, please contact support at .

val swaps = PortalSwaps("SWAPS-API-KEY", portal)

Fetching a list of Sources

The getSources() function returns a Map<String, String> containing valid, swappable token sources that can be used with your Portal MPC Wallet. The existing Portal instance that was provided at initialization is used to scope the request to the current chain.

In order to retrieve this list, you can use the following code.

val sources = swaps.getSources(chainId = "your chain Id")

The returned list

The Map returned by the getSources() function is a set of key/value pairs where the key is the name of the token and the value is the token address for that token.

Fetching a swap Quote

The getQuote() function returns a Quote object for a given set of arguments.

QuoteArgs

The minimum requirements for a valid set of Quote arguments are a buyToken, a sellToken, and either a buyAmount or a sellAmount.

An example of a valid QuoteArgs object would look something like this.

val quoteArgs = QuoteArgs(
    buyToken: "UNI",
    sellToken: "ETH",
    sellAmount: .01,
)

Using your QuoteArgs

Once you have a valid QuoteArgs object, you can call the getQuote() function.

val quote = swaps.getQuote(chainId = "your chain id", args = quoteArgs)

The Quote object

The Quote object includes two properties:

  • allowanceTarget The address requiring allowances to complete the Swap

  • cost The total cost (gas fees) of the swap transaction

  • transaction The transaction to perform the swap

Executing a Swap

If you're selling ERC20 tokens, you'll need to utilize the allowanceTarget to give the associated contract permissions to access a given amount of the token you're selling. This requires a token allowance of at least what you're selling. If you're selling ETH, this step is not necessary.

When you're ready to execute a swap, you can use the Provider on your existing Portal instance to sign the transaction and make a request to chain.

portal.provider.request(
    chainId = "your eth chain id",
    method = PortalRequestMethod.eth_sendTransaction, 
    params = listOf(quote.transaction)
)
partner@portalhq.io
partner@portalhq.io