Skip to main content

Documentation Index

Fetch the complete documentation index at: https://www.dynamic.xyz/docs/llms.txt

Use this file to discover all available pages before exploring further.

EIP-5792 adds a small set of JSON-RPC methods that let dapps ask wallets for advanced capabilities — atomic batches, paymaster sponsorship, and conditional execution — without needing to understand ERC-4337 internals. The standard introduces:
  • wallet_getCapabilities
  • wallet_sendCalls
  • wallet_getCallsStatus
  • wallet_showCallsStatus
Support is rolling out across wallets. See the EIP-5792 ecosystem tracker for the current list. The Viem WalletClient returned by createWalletClientForWalletAccount exposes these methods directly.

Check capabilities

Use getCapabilities() to see which features the wallet supports for a given chain before sending calls.
import { createWalletClientForWalletAccount } from '@dynamic-labs-sdk/evm/viem';
import { getActiveNetworkData } from '@dynamic-labs-sdk/client';

const checkCapabilities = async (walletAccount) => {
  const walletClient = await createWalletClientForWalletAccount({ walletAccount });
  const { networkData } = await getActiveNetworkData({ walletAccount });
  const chainId = networkData.chainId;

  const capabilities = await walletClient.getCapabilities();
  const chainCapabilities = capabilities?.[chainId];

  if (!chainCapabilities) {
    return { atomic: false, paymaster: false };
  }

  const atomicSupported =
    chainCapabilities.atomic?.status === 'ready' ||
    chainCapabilities.atomic?.status === 'supported';

  const paymasterSupported = Boolean(
    chainCapabilities.paymasterService?.supported
  );

  return { atomic: atomicSupported, paymaster: paymasterSupported };
};

Batch calls

sendCalls submits multiple calls atomically when the wallet supports it. Optionally include paymasterService capabilities to request gas sponsorship.
import { parseEther } from 'viem';
import { createWalletClientForWalletAccount } from '@dynamic-labs-sdk/evm/viem';
import { getActiveNetworkData } from '@dynamic-labs-sdk/client';

const sendBatchedCalls = async (walletAccount) => {
  const walletClient = await createWalletClientForWalletAccount({ walletAccount });
  const { networkData } = await getActiveNetworkData({ walletAccount });
  const chainId = networkData.chainId;

  const capabilities = await walletClient.getCapabilities();
  const chainCapabilities = capabilities?.[chainId];

  const atomicSupported =
    chainCapabilities?.atomic?.status === 'ready' ||
    chainCapabilities?.atomic?.status === 'supported';

  if (!atomicSupported) {
    throw new Error(`Atomic batching not supported on chain ${chainId}`);
  }

  const callParams: Parameters<typeof walletClient.sendCalls>[0] = {
    calls: [
      {
        to: '0x1111111111111111111111111111111111111111',
        value: parseEther('0.001'),
      },
      {
        to: '0x2222222222222222222222222222222222222222',
        value: parseEther('0.001'),
      },
    ],
  };

  if (chainCapabilities?.paymasterService?.supported) {
    callParams.capabilities = {
      paymasterService: { url: undefined },
    };
  }

  const { id } = await walletClient.sendCalls(callParams);
  return id;
};

Track status

getCallsStatus returns the execution state for a batch. Poll it (or waitForCallsStatus) until the batch settles.
const status = await walletClient.getCallsStatus({ id });

if (status.status === 'success') {
  console.log('Batch executed:', status.receipts);
}
showCallsStatus lets the wallet present a transaction status UI to the user — handy for relayer-style flows.

Notes

  • If the wallet doesn’t support EIP-5792, getCapabilities and sendCalls will throw or return empty capabilities. Always check capabilities first and fall back to a sequential sendTransaction loop.
  • Atomic batching is a wallet-level guarantee — the wallet decides whether to submit calls atomically, sequentially, or via account abstraction.
  • Paymaster sponsorship requires both wallet support and a configured paymaster URL. If you’re using ZeroDev for sponsorship, see the Gas Sponsorship Quickstart for a more direct ERC-4337 path.