Skip to content

Frame Modes

Each frame in a frame transaction has a mode that determines its execution semantics — who the caller is, what state modifications are allowed, and what role the frame plays in the transaction lifecycle.

The Three Modes

mode & 0xFFNameCallerState ChangesPurpose
0DEFAULTENTRY_POINT (0xaa)YesGeneral-purpose execution
1VERIFYENTRY_POINT (0xaa)No (STATICCALL)Transaction validation
2SENDERtx.senderYesAct on behalf of sender

DEFAULT Mode

The simplest mode. The frame executes as a regular call with ENTRY_POINT as the caller. This is useful for setup operations that don't require sender authority — for example, deploying the sender's smart account contract before verification.

VERIFY Mode

The validation mode. Key characteristics:

  • Executes like a STATICCALLno state modifications are allowed
  • Must call APPROVE during execution or the entire transaction is invalid
  • Frame data is elided from the signature hash and invisible to other frames via FRAMEDATALOAD / FRAMEDATACOPY

The VERIFY mode is where the "abstract" in account abstraction lives. The frame can implement any validation logic: ECDSA, P256, BLS, multi-sig, time-locks, social recovery — anything expressible in EVM.

SENDER Mode

Executes with tx.sender as the caller address, effectively acting on behalf of the account. This requires sender_approved == true (set via a prior APPROVE call), so a VERIFY frame must succeed before any SENDER frames can execute.

Approval Bits

The upper bits of mode (bits 9-10) configure what the frame is allowed to approve:

Mode bitMeaning
9APPROVE of execution allowed
10APPROVE of payment allowed

The combination (mode >> 8) & 3 determines which APPROVE scopes the frame can use:

ValueAllowed scopes
1Only execution (0x0)
2Only payment (0x1)
3Execution, payment, or both (0x0, 0x1, 0x2)

This bit-level design allows the transaction to declare up front what each VERIFY frame is authorized to do, making it possible for the mempool and other observers to reason about frame behavior before execution.

Typical Frame Sequences

Simple Transaction (sender = payer)

FrameModePurpose
0VERIFYVerify signature, APPROVE(0x2) — approve execution + payment
1SENDERExecute the actual call
FrameModePurpose
0VERIFYSender verifies, APPROVE(0x0) — approve execution only
1VERIFYSponsor verifies, APPROVE(0x1) — approve payment only
2SENDERTransfer ERC-20 tokens to sponsor
3SENDERExecute the user's intended call
4DEFAULTSponsor post-op (refunds, token conversion)

First-time Account Deployment

FrameModePurpose
0DEFAULTDeploy smart account via factory
1VERIFYVerify signature against newly deployed code
2SENDERExecute the actual call

A Feel Your Protocol project — EIP-8141 reference implementation by the EthereumJS team.