wallet_sendCalls (EIP-5792) sends multiple calls in a single user operation. All calls succeed together or revert together. The user approves once.
When to use it
- ERC-20 approve + spend in one click.
- Batch state changes that should atomically commit.
- Multi-token settlement.
Send a batch
from field is rewritten to the user’s smart account. The popup shows a single approval covering both calls. The request resolves directly with transactionHash and userOpHash once the batch lands, there is no separate id to poll.
With wagmi
Wagmi exposesuseSendCalls for the same flow:
Status tracking
wallet_getCallsStatus and wallet_showCallsStatus are not currently implemented in the Mini App host. Do not build a flow around either method. Read the transactionHash returned directly from wallet_sendCalls and, if you need a receipt, look it up with your own RPC client or waitForTransactionReceipt.
Atomic vs non-atomic
SetatomicRequired: true to require all calls land in a single transaction. With atomicRequired: false, the wallet may execute calls
sequentially in separate transactions, useful when the user has a non-AA fallback. Startale’s smart accounts always execute
atomically regardless.
Same primitive at the AA layer
wallet_sendCalls is the EIP-5792 wrapper. Under it, the SDK packs every entry of calls into a single ERC-4337 UserOperation and submits it through the bundler. If you skip the App SDK and work with @startale-scs/aa-sdk directly, you build the same batch by appending to the calls array on sendUserOperation. The execution semantics are identical in both layers.