atomic
Capability
The atomic
capability specifies how a wallet will execute batches of transactions requested through the wallet_sendCalls
method. This capability is expressed separately for each chain and should be interpreted as a guarantee only for batches of transactions on that chain.
Specification
Wallet
The atomic
capability has a status
field that can take one of three values:
supported
: The wallet will execute all calls atomically and contiguouslyready
: The wallet is able to upgrade tosupported
pending user approval (e.g. via EIP-7702)unsupported
: The wallet does not provide any atomicity or contiguity guarantees
If the atomic
capability is not present for a given chain, it means that the wallet does not support batching for that chain.
Example
provider.request({
method: 'wallet_getCapabilities',
params: ['0xd46e8dd67c5d32be8058bb8eb970870f07244567']
})
{ "0x2105": { "atomic": { "status": "supported" } }, "0x14A34": { "atomic": { "status": "unsupported" } } }
App
When sending a batch of calls using wallet_sendCalls
, apps can specify their atomicity requirements using the atomicRequired
field:
- If
atomicRequired
is set totrue
:- The wallet MUST execute all calls atomically and contiguously
- The wallet MUST reject the request if it cannot guarantee atomic execution
- If the wallet's
atomic
capability isready
, it MUST upgrade tosupported
before proceeding
- If
atomicRequired
is set tofalse
:- The wallet MUST execute calls sequentially (one after another)
- The calls need not be contiguous (other transactions may be interleaved)
- Some calls may fail independently
- The wallet MAY still execute the batch atomically if it supports it
Apps should check the wallet's capabilities using wallet_getCapabilities
before sending requests with atomicRequired: true
to ensure the wallet supports atomic execution on the target chain.
Relationship with EIP-7702
The ready
status is particularly relevant for wallets that can upgrade to support atomic execution through EIP-7702. When a wallet indicates status: "ready"
, it means:
- The account is an EOA (Externally Owned Account)
- It can upgrade to a smart account that supports atomic execution via an EIP-7702 delegation
- The upgrade requires user approval
- Once upgraded, the wallet will support atomic execution of batches for that EOA
This allows apps to request atomic execution even from EOAs, as long as the wallet is capable of upgrading to support it.