EIP-8141 Frame Transactions
Frame transactions — a new tx type with explicit sequenced execution frames
Status: Design phase. Gap analysis complete against the existing RIP-7560 AA implementation. Depends on: Modular Transaction Pipeline. Required by: Interop Bridge Phase 3+.
EIP-8141 implements protocol-native account abstraction directly in the EVM — no application-layer bundlers (ERC-4337) required. It introduces frame transactions (type 0x06): a transaction envelope containing an ordered sequence of execution frames, each running in a distinct execution context.
Erigon already has a complete RIP-7560 native AA implementation. EIP-8141 is built on top of it, reusing the existing ApplyFrame() engine, paymaster pattern, ERC-7562 opcode validation, and EIP-7702 delegation support.
Frame Execution Model
Each frame in a transaction runs in a distinct execution context:
VERIFY
Restricted opcodes; checks APPROVE result
Custom signature/authorization validation
SENDER
Restricted opcodes
Determines the effective sender (paymaster, sponsor, or delegated account)
DEFAULT
Normal EVM execution
The actual user operation
Frames execute sequentially. If VERIFY fails, the entire transaction is invalid. There is a single transaction hash, a single receipt, and a single nonce increment. The APPROVE opcode is a new EVM instruction — only valid inside VERIFY frames — for custom signature validation.
This enables protocol-native account abstraction without application-layer bundling (ERC-4337).
Existing Foundation: RIP-7560
What EIP-8141 reuses from the existing RIP-7560 implementation:
Frame execution engine
ApplyFrame() in state_transition.go
Yes — same sub-call-without-gas-buy pattern
Multi-frame sequencing
ValidateAATransaction + ExecuteAATransaction
Refactored into generic pipeline
Paymaster pattern
PaymasterFrame + PaymasterPostOp
SENDER frame with paymaster logic
ERC-7562 mempool validation
ethBackend.AAValidation()
Extended for APPROVE opcode
EIP-7702 delegation
Authorizations field
Same support
Block builder AA path
block_assembler.go:213
Generalized
Design: Frame Pipeline Engine
Rather than adding EIP-8141 as a parallel code path alongside RIP-7560, both are unified in a single frame pipeline engine:
RIP-7560 transactions (type 5) are adapted via RIP7560ToFrames() — their implicit frame sequence is converted to an explicit []Frame and executed through the same pipeline. Zero behavior change for existing AA transactions.
EIP-8141 Transaction Type
APPROVE Opcode
A new EVM opcode — only valid inside VERIFY frames. If called outside a VERIFY context, it errors. The frame pipeline checks whether APPROVE was invoked to determine whether the VERIFY frame approved the transaction.
The opcode number and exact semantics are pending finalization of the EIP-8141 spec.
Gap Analysis
The gaps vs the existing RIP-7560 implementation:
Explicit frame array
RIP-7560 has implicit frames derived from fixed fields; EIP-8141 has a user-defined []Frame
APPROVE opcode
New EVM opcode — consensus change; must be hardfork-gated
Frame type dispatch
VERIFY and SENDER frames need opcode restrictions (ERC-7562-style); DEFAULT is unrestricted
Txpool parsing
Frame array must be parsed from RLP into TxnSlot with frame metadata
Mempool validation
Frame sequence well-formedness; APPROVE only in VERIFY; total gas limits
Receipt format
Per-frame gas usage and status
Integration with Interop Bridge
The Interop Bridge's FrameTxAssembler constructs EIP-8141 transactions programmatically:
The bridge submits these via TxInjector.Submit() into the local mempool. The frame pipeline engine executes them during block building.
Implementation Phases
1
Extract generic FramePipeline; refactor RIP-7560 to use it internally — zero external behavior change
2
FrameTransaction struct (type 6); RLP encoding; txpool parsing; state processor routing; block builder handling
3
APPROVE opcode; frame-context tracking in EVM; hardfork gate
4
Full mempool support — ERC-7562 opcode restrictions for VERIFY/SENDER frames; frame gas estimation; parallel execution support
5
Bridge service integration — FrameTxAssembler builds and submits frame transactions
Last updated