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?

Last updated 2 months ago

Was this helpful?

In some cases, you might want to submit multiple transactions that will be processed in sequence by the network. This is useful for scenarios like batch operations or when you need to ensure transactions are processed in a specific order. Here's how to submit multiple transactions with sequential nonces.

Understanding Nonces

Before submitting concurrent transactions, it's important to understand nonces:

  • Every Ethereum transaction requires a nonce

  • Nonces must be used in sequence (0, 1, 2, etc.)

  • The network will process transactions in nonce order

  • Multiple pending transactions can exist in the mempool as long as they have sequential nonces

  • Submitting multiple transactions with the same nonce will result in the transaction with the highest gas overriding others

Steps

  1. First, retrieve your current nonce from the network. This ensures you start with the correct sequence number.

  1. Format your transaction objects with incrementing nonces. Here's an example transaction format:

  1. Submit multiple transactions using the Portal API. Each request should use the /v1/sign endpoint with eth_sendTransaction method:

  1. Repeat the request for each transaction, incrementing the nonce each time.

Important Notes

  • All transactions will enter the mempool but may not be processed immediately

  • Transactions will be processed in nonce order, regardless of submission time

  • If a transaction with a lower nonce fails, subsequent transactions will remain pending

  • Consider adding delays between submissions to prevent rate limiting

  • Make sure your wallet has sufficient funds to cover all transactions

If any transaction in the sequence fails due to insufficient funds or other errors, subsequent transactions with higher nonces will remain pending until the issue is resolved.

const web3 = new Web3("YOUR_RPC_URL");
const currentNonce = await web3.eth.getTransactionCount(walletAddress);
const transactionParams = {
  nonce: "0x" + nonce.toString(16),  // Convert nonce to hex
  value: "0x1",
  from: "YOUR_ETH_ADDRESS",
  to: "RECIPIENT_ADDRESS",
  data: "0x",
  maxFeePerGas: "0x2540BE400",        // 10 Gwei
  maxPriorityFeePerGas: "0x3B9ACA00", // 1 Gwei
  gasLimit: "0x5208"                   // 21000
};
curl -X POST 'https://mpc-client.portalhq.io/v1/sign' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <clientApiKey>' \
-d '{
  "share": $share,
  "method": "eth_sendTransaction",
  "params": "{\"nonce\": \"0x0\", \"value\": \"0x01\", \"from\": \"YOUR_ETH_ADDRESS\", \"to\": \"RECIPIENT_ADDRESS\", \"data\": \"0x\", \"maxFeePerGas\": \"0x2540BE400\", \"maxPriorityFeePerGas\": \"0x3B9ACA00\", \"gasLimit\": \"0x5208\"}",
  "rpcUrl": "YOUR_RPC_URL",
  "chainId": "eip155:11155111"
}'
  1. Guides
  2. Enclave MPC API

Concurrent Transactions

PreviousSign Stellar TransactionNextBack up a wallet
  • Understanding Nonces
  • Steps
  • Important Notes