EIPs

EIP-5792 — Wallet calls (batched submission)

eips.ethereum.org/EIPS/eip-5792

A dapp asks the wallet to execute multiple calls atomically. The wallet can implement the batch any way it likes — multiple sequential transactions, a multicall, an EIP-7702 set-code call, or a smart-account UserOperation. The dapp doesn’t care; it just submits the calls and polls for status.

import { wallet_send_calls, wallet_get_calls_status } from "@ethernauta/eip/5792";

const id = await wallet_send_calls({
  version: "1.0",
  chain_id: "0x1",
  from: account,
  calls: [
    { to: token_a, data: approve_calldata },
    { to: token_b, data: swap_calldata },
  ],
})(signer({ chain_id: eip155_1.chain_id }));

const status = await wallet_get_calls_status({ id })(
  signer({ chain_id: eip155_1.chain_id }),
);

Surface

Methods

MethodShapePurpose
wallet_send_callsSignable<SendCallsResult>Submit a batch.
wallet_get_calls_statusSignable<CallsStatus>Poll for status by batch ID.
wallet_get_capabilitiesSignable<Capabilities>What the wallet supports.

Status codes

CallsStatusCode enumerates pending / confirmed / partial / reverted states. The CALLS_STATUS constant holds the numeric values.

Types

  • SendCallsParameter, SendCallsParameters, SendCallsCall, SendCallsResult
  • CallsStatus, CallsStatusCode, CallsReceipt, CallsReceiptLog
  • Capabilities

All with matching Valibot schemas.

Why this matters

Without 5792, dapps that need “approve + swap” had to choose between:

  • Two separate signatures (bad UX).
  • Asking the user to use a hardcoded gas multiplier (fragile).
  • Relying on permit (only works on tokens that implement ERC-2612).

With 5792 the wallet decides the execution strategy: a multicall on chains where it’s deployed, an EIP-7702 set-code tx on chains where it’s deployed, or a smart-account UserOperation if the account is a 4337 smart account. The dapp doesn’t choose.

What the wallet does

The Ethernauta wallet’s send-calls view shows the batch as a list of decoded calls (using the selector registry to label them — see Tooling → ERC codegen). On approval, it picks the best execution strategy available for the active chain.

wallet_getCallsStatus is a tier-4 internal-storage read: the wallet tracks which batches it submitted and serves their status from a local registry.

See also