BLOCKCHAIN

EIP-5792 Explained: Wallet Call API for Batch Transactions in 2025

Maksym Koval
10 min read
102 views

EIP-5792 introduces the Wallet Call API, enabling dApps to send multiple transactions in a single batch. While this dramatically improves UX by reducing user clicks from 10+ wallet approvals to just 1, it sacrifices per-transaction gas optimization and introduces new security considerations. Here's everything developers need to know about batch transactions in 2025.

What is EIP-5792?

EIP-5792 is an Ethereum Improvement Proposal that standardizes how decentralized applications communicate with wallets to execute multiple transactions atomically. At its core, it introduces the wallet_sendCalls method, allowing developers to bundle multiple blockchain operations into a single user approval.

Think of it as the difference between buying groceries one item at a time versus putting everything in your cart and checking out once. Traditional Web3 interactions require users to approve each transaction individually through their wallet. With EIP-5792, complex multi-step operations become single-click experiences.

The Technical Foundation

EIP-5792 defines a JSON-RPC method that wallets can implement:

const result = await provider.request({
  method: 'wallet_sendCalls',
  params: [{
    calls: [
      { to: tokenAddress, data: approveData, value: '0x0' },
      { to: swapAddress, data: swapData, value: '0x0' }
    ],
    chainId: '0x1',
    from: userAddress
  }]
});

This single API call replaces what would traditionally require multiple separate transactions, each with its own wallet popup and user confirmation.

How Batch Transactions Transform User Experience

The user experience improvement is immediately apparent when comparing traditional versus batch transaction flows.

Traditional Flow (Without EIP-5792)

Consider a user swapping tokens on a decentralized exchange:

  1. Click "Approve" button → MetaMask popup appears

  2. Review approval transaction → Click "Confirm"

  3. Wait for approval confirmation (15-30 seconds)

  4. Click "Swap" button → Another MetaMask popup

  5. Review swap transaction → Click "Confirm"

  6. Wait for swap confirmation (15-30 seconds)

Total interaction: 6+ clicks, 2 separate wallet popups, 30-60 seconds waiting, 2 gas fees paid separately.

Batch Flow (With EIP-5792)

The same operation becomes:

  1. Click "Approve & Swap" button → Single MetaMask popup

  2. Review both operations together → Click "Confirm" once

  3. Both transactions execute atomically

Total interaction: 2 clicks, 1 wallet popup, operations execute together or not at all.

Real-World Example: DeFi Liquidity Provision

Adding liquidity to a Uniswap pool traditionally requires three separate transactions:

  • Approve Token A (USDC): User clicks → Wallet popup → Confirm → Wait

  • Approve Token B (ETH): User clicks → Wallet popup → Confirm → Wait

  • Add Liquidity: User clicks → Wallet popup → Confirm → Wait

With EIP-5792, this becomes a single atomic operation with one approval. The difference in friction is the difference between users completing the action or abandoning it mid-flow.

The Gas Optimization Tradeoff

While EIP-5792 dramatically improves UX, it introduces a significant limitation: all transactions in a batch must use the same gas parameters.

What You Lose

Per-Transaction Gas Control: In traditional separate transactions, developers can optimize gas for each operation individually. A simple approval might use standard gas, while a time-sensitive swap uses priority fees.

Dynamic Fee Adjustment: If network conditions change between operations, you cannot adjust gas for remaining transactions in the batch. Everything commits to initial gas parameters.

Priority Flexibility: Cannot prioritize certain operations over others within the batch. All transactions get the same gas price, regardless of urgency.

The Math of Overpaying

Consider a batch with three operations:

  • Simple approval: Would normally cost 50,000 gas at 20 gwei

  • Complex swap: Requires 200,000 gas at 50 gwei (urgent)

  • Simple transfer: Would cost 21,000 gas at 20 gwei

With EIP-5792, all three must use 50 gwei to ensure the urgent swap executes quickly. This means:

  • Approval overpays: (50 gwei - 20 gwei) × 50,000 gas = extra cost

  • Transfer overpays: (50 gwei - 20 gwei) × 21,000 gas = extra cost

  • Total: You pay premium gas for operations that didn't need it

What You Gain

Atomic Execution: All operations succeed together or fail together. No partial states where approval succeeded but swap failed, leaving tokens approved indefinitely.

Reduced Overall Costs: Despite overpaying per transaction, total cost might be lower due to eliminating multiple base fees and reducing total gas consumption through batching.

Predictable Outcomes: Users know exactly what will happen before confirming. No surprises from state changes between separate transactions.

Security Considerations and Risks

The Phishing Attack Vector

Batch transactions create new opportunities for malicious actors. Consider this scenario:

// What user thinks they're signing:
calls: [
  { to: USDC, data: approve(SwapContract, 1000) },
  { to: SwapContract, data: swap(1000 USDC for ETH) }
]

// What malicious dApp actually sends:
calls: [
  { to: USDC, data: approve(AttackerContract, INFINITE) },
  { to: SwapContract, data: swap(1000 USDC for ETH) },
  { to: AttackerContract, data: drainAllTokens() }
]

The legitimate swap in the middle masks the malicious operations. Users accustomed to approving batches might not scrutinize every call carefully.

Wallet UI Challenges

Displaying multiple transactions clearly in a single popup is difficult. Current wallet implementations show:

  • Collapsed view: Users see "3 transactions" but not details

  • Expanded view: Scrolling through technical data most users don't understand

  • Summary view: Oversimplified, potentially hiding malicious calls

This creates a security versus usability tension that wallets are still solving.

Smart Contract Reentrancy

Batch transactions can introduce new reentrancy attack surfaces. If one call in the batch makes an external call, it might reenter the contract before the batch completes, potentially exploiting assumptions about state.

All-or-Nothing Risk

While atomic execution is usually beneficial, it creates scenarios where one failed operation blocks all others. If adding liquidity to a pool requires approval + deposit, and the deposit fails due to slippage, the approval also reverts—requiring the entire flow to restart.

When to Use EIP-5792

Ideal Use Cases

DeFi Protocols: Operations like approve + swap, approve + stake, or approve + add liquidity are perfect for batching. Users complete complex interactions with single confirmations.

NFT Minting: Batch multiple NFT mints or approve + mint flows. Especially valuable for collection drops where users want to mint multiple tokens.

Gaming dApps: In-game actions that require multiple blockchain interactions—like claiming rewards, approving items, and initiating trades—become seamless.

DEX Aggregators: Multi-hop swaps across different protocols can execute atomically, ensuring users get expected prices or the entire swap reverts.

When to Avoid

Time-Sensitive Arbitrage: When you need precise gas control for competitive execution, separate transactions with individual gas optimization outperform batches.

High-Value Single Operations: For critical transactions like large swaps or expensive NFT purchases, the added complexity of batching provides no benefit—keep it simple.

Operations Requiring Different Urgency: If some transactions need immediate execution while others can wait, batching forces all to use higher gas or all to potentially fail.

Cross-Chain Operations: Different chains have different gas requirements and confirmation times. Batching doesn't work across chains and adds unnecessary complexity.

EIP-5792 vs Alternative Solutions

EIP-5792 vs EIP-4337 (Account Abstraction)

Both enable batch transactions, but through fundamentally different architectures:

EIP-5792 operates at the wallet API level. Traditional EOAs (Externally Owned Accounts) make calls through the wallet's batch interface. No on-chain changes required.

EIP-4337 creates smart contract accounts (UserOperations) that natively support batching, gas abstraction, and programmable validation. Requires on-chain infrastructure (EntryPoint contracts, Bundlers, Paymasters).

Key differences:

  • Wallet Support: EIP-5792 works with existing EOAs; EIP-4337 requires smart contract wallets

  • Gas Flexibility: EIP-4337 allows gas sponsorship and complex gas logic; EIP-5792 does not

  • Adoption Speed: EIP-5792 simpler to implement in existing wallets; EIP-4337 requires ecosystem coordination

  • Long-term Potential: EIP-4337 enables programmable accounts with far greater capabilities

EIP-5792 vs Multicall Contracts

Multicall contracts have existed for years, allowing multiple contract calls in a single transaction:

// Multicall pattern
multicall.aggregate([
  { target: token, callData: approveData },
  { target: swap, callData: swapData }
]);

Multicall advantages:

  • Works with any wallet, no special support needed

  • On-chain gas optimization possible

  • Developers have full control over execution flow

EIP-5792 advantages:

  • Better UX—wallet handles batching, not smart contracts

  • No additional contract deployment required

  • Standardized across dApps and wallets

In practice, many dApps will use both: Multicall for on-chain efficiency, EIP-5792 for wallet-level UX.

Implementation Guide for Developers

Checking Wallet Support

Before using EIP-5792, verify the user's wallet supports it:

async function checkBatchSupport() {
  try {
    const capabilities = await provider.request({
      method: 'wallet_getCapabilities',
      params: [userAddress]
    });
    
    const chainId = await provider.request({ 
      method: 'eth_chainId' 
    });
    
    return capabilities[chainId]?.atomicBatch?.supported === true;
  } catch (error) {
    return false;
  }
}

Implementing Fallback Logic

Always provide fallback for wallets without EIP-5792 support:

async function executeOperations(calls) {
  const supportsBatch = await checkBatchSupport();
  
  if (supportsBatch) {
    // Use EIP-5792
    return await provider.request({
      method: 'wallet_sendCalls',
      params: [{
        calls: calls,
        chainId: await provider.request({ method: 'eth_chainId' }),
        from: userAddress
      }]
    });
  } else {
    // Fallback to sequential transactions
    const results = [];
    for (const call of calls) {
      const result = await provider.request({
        method: 'eth_sendTransaction',
        params: [{
          to: call.to,
          data: call.data,
          value: call.value || '0x0',
          from: userAddress
        }]
      });
      results.push(result);
    }
    return results;
  }
}

Error Handling

Batch transactions fail atomically, but provide clear error feedback:

try {
  const result = await provider.request({
    method: 'wallet_sendCalls',
    params: [{ calls, chainId, from: userAddress }]
  });
  
  // Monitor batch status
  const receipt = await provider.request({
    method: 'wallet_getCallsStatus',
    params: [result]
  });
  
  if (receipt.status === 'CONFIRMED') {
    console.log('All transactions succeeded');
  }
} catch (error) {
  if (error.code === 4001) {
    // User rejected
  } else if (error.code === -32602) {
    // Invalid params - check call format
  } else {
    // Handle other errors
  }
}

Current Adoption Status in 2025

Wallet Support

Full Support:

  • MetaMask (v12.0+): Complete implementation with clear batch UI

  • Coinbase Wallet: Native support, integrated with Coinbase dApp ecosystem

  • Rainbow: Early adopter, excellent mobile UX

Partial Support:

  • WalletConnect: Depends on underlying wallet implementation

  • Trust Wallet: Support announced, rolling out

  • Ledger Live: In development, expected Q2 2025

No Current Support:

  • Hardware wallets (Ledger, Trezor): Technical limitations with batch signing

  • Older wallet versions: Users must update

  • Some mobile wallets: Development in progress

dApp Integration

Major protocols implementing EIP-5792:

  • Uniswap: Approve + swap flows for improved UX

  • Aave: Batch supply, borrow, and collateral operations

  • OpenSea: Approve + purchase flows for NFTs

  • 1inch: Multi-hop swaps as atomic operations

Layer 2 Support

EIP-5792 works on Layer 2 networks with varying implementations:

  • Optimism: Full support, leverages optimistic rollup benefits

  • Arbitrum: Implemented, excellent UX on low-fee network

  • Base: Native support, Coinbase wallet integration

  • Polygon: Supported, particularly valuable given lower fees

Best Practices for Production

User Communication

Be transparent about what users are signing:

  • Show clear summaries of all operations in the batch

  • Explain why batching benefits them (fewer clicks, atomic execution)

  • Provide detailed breakdowns on click/hover for advanced users

  • Never hide operations in collapsed views without clear indication

Gas Estimation

Calculate gas for the entire batch conservatively:

async function estimateBatchGas(calls) {
  let totalGas = 0;
  
  for (const call of calls) {
    const gas = await provider.request({
      method: 'eth_estimateGas',
      params: [{ to: call.to, data: call.data }]
    });
    totalGas += parseInt(gas, 16);
  }
  
  // Add 20% buffer for batch overhead
  return Math.ceil(totalGas * 1.2);
}

Testing Strategy

Test batch transactions extensively:

  • Individual call failures: Ensure entire batch reverts correctly

  • Gas limit edge cases: Test with exact, insufficient, and excessive gas

  • Wallet compatibility: Test across MetaMask, Coinbase, Rainbow

  • Network conditions: Simulate high gas, network congestion

  • Reentrancy scenarios: Verify no unexpected behavior in batched calls

The Future of Batch Transactions

EIP-5792 represents an intermediate step in Ethereum's UX evolution. Looking ahead:

Integration with Account Abstraction

As EIP-4337 adoption grows, we'll see hybrid approaches: wallets supporting both EOA batching (EIP-5792) and smart account features (EIP-4337). Users can choose the right tool for each use case.

Cross-Chain Batching

Future proposals will extend batching to cross-chain operations, enabling atomic multi-chain transactions through bridges and interoperability protocols.

Advanced Gas Strategies

Upcoming wallet features may allow per-call gas customization within batches, addressing the current limitation while maintaining atomic execution benefits.

Intent-Based Architectures

Batch transactions will integrate with intent-based systems where users express desired outcomes and solvers construct optimal transaction batches to achieve them.

Conclusion

EIP-5792 exemplifies the classic engineering tradeoff between user experience and technical optimization. By enabling batch transactions through a standardized wallet API, it dramatically reduces friction in Web3 interactions—turning complex multi-step flows into single-click operations.

The cost is clear: sacrificing per-transaction gas control, introducing new security considerations, and requiring wallet-level support. For most dApp developers, this tradeoff is worthwhile. The improvement in user experience directly translates to higher conversion rates and better retention.

Choose EIP-5792 when:

  • User experience is your top priority

  • Operations naturally group together (approve + swap, mint + stake)

  • Atomic execution prevents dangerous partial states

  • Per-transaction gas optimization isn't critical

Avoid EIP-5792 when:

  • You need dynamic gas pricing per transaction

  • Operations require different urgency levels

  • Working with time-sensitive arbitrage or MEV

  • Target users primarily use hardware wallets

As Ethereum continues evolving toward better UX, EIP-5792 provides an immediately deployable solution that works with existing infrastructure. It won't replace more sophisticated approaches like account abstraction long-term, but it solves a pressing problem today: making Web3 interactions feel as smooth as Web2, without sacrificing the security and decentralization that make blockchain valuable.

For developers building in 2025, implementing EIP-5792 support should be standard practice. The minimal development effort required delivers outsized returns in user satisfaction, making your dApp competitive in an increasingly user-experience-focused ecosystem.

Frequently Asked Questions

Everything you need to know

EIP-5792 is an Ethereum standard that lets users approve multiple blockchain transactions at once instead of clicking through separate wallet popups for each action. It introduces the wallet_sendCalls method that bundles operations into a single atomic batch, reducing 10+ clicks to just 1.

Not directly. EIP-5792 may actually increase per-transaction gas costs because all operations in a batch must use the same gas price. However, total costs might be lower due to eliminating multiple base fees and the improved efficiency of atomic execution.

MetaMask (v12+), Coinbase Wallet, and Rainbow fully support EIP-5792. WalletConnect support depends on the underlying wallet implementation. Hardware wallets like Ledger and Trezor do not yet support batch signing due to technical limitations with their security models.

EIP-5792 reduces complex multi-step flows from 10+ clicks and multiple wallet popups to a single approval. For example, swapping tokens traditionally requires separate approvals for token approval and swap execution—EIP-5792 combines these into one seamless user action, dramatically reducing friction.

EIP-5792 operates at the wallet API level and works with existing EOAs (externally owned accounts), while EIP-4337 creates smart contract accounts with native batching support. EIP-5792 is simpler to implement but less flexible; EIP-4337 enables gas sponsorship, programmable validation, and social recovery but requires on-chain infrastructure.

No, this is EIP-5792's main limitation. All transactions in a batch must use identical gas parameters. You cannot prioritize certain operations with higher gas or adjust fees for individual calls. This means some operations may overpay for gas to ensure urgent operations execute quickly enough.

EIP-5792 introduces new phishing risks where malicious dApps can hide harmful transactions within legitimate-looking batches. Users might not scrutinize every call carefully when approving batches. Always use trusted dApps, verify the contract addresses, and review all operations in a batch before confirming.

First, check wallet support using wallet_getCapabilities method. Then use wallet_sendCalls to submit batches with an array of calls containing to, data, and value fields. Always implement fallback logic for wallets without EIP-5792 support by executing transactions sequentially for broader compatibility.

All transactions in the batch revert atomically—it's all-or-nothing execution. If any single operation fails due to insufficient balance, slippage, or contract error, the entire batch fails and no state changes occur. This prevents dangerous partial states but means one failed operation blocks all others.

Yes, EIP-5792 works on Layer 2 networks including Optimism, Arbitrum, Base, and Polygon. The implementation is identical to Ethereum mainnet. L2 networks benefit even more from batching due to their lower base fees making multiple transactions more practical without significant cost overhead.

Not currently. Hardware wallets like Ledger and Trezor face technical limitations with batch transaction signing because their security models require signing each transaction individually on the device. Future firmware updates may enable limited batch support, but full EIP-5792 compatibility is not expected in 2025.

wallet_sendCalls is the core JSON-RPC method introduced by EIP-5792. It accepts an array of call objects (each with to, data, and value fields), a chainId, and sender address. Wallets process this into a batch transaction that executes atomically on-chain with a single user confirmation.

Atomic execution means all operations in the batch succeed together or fail together with no partial states. The wallet submits a single transaction containing all calls. If any call reverts, the entire transaction reverts and all state changes roll back automatically, ensuring data consistency and preventing dangerous intermediate states.

Use both for different purposes. EIP-5792 provides better UX through wallet-level batching and requires no contract deployment. Multicall contracts offer on-chain gas optimization and work with any wallet. Many production dApps use Multicall for efficiency and EIP-5792 for improved user experience when wallet support is available.

Main risks include phishing attacks hiding malicious calls in legitimate batches, wallet UI challenges displaying all operations clearly, smart contract reentrancy vulnerabilities with batched calls, and all-or-nothing execution where one failed operation blocks legitimate ones. Always audit dApp contracts, review batches carefully, and use established protocols.

Written by

Maksym Koval

EIP-5792 Explained: Batch Transactions & Wallet Call API