The planning for Ethereum’s Hegota hard fork is currently underway, and the hottest topic within the core devs community right now is native AA. In the past month alone, no less than 4 new EIPs for native AA have been proposed, including EIP-8141 aka “Frame Transactions” which was formally proposed as a headliner for Hegota.
Despite the momentum, the future of native AA is very much in doubt, because there’s heated debate among the client teams as to whether Frame Transactions is actually a good idea and whether some other AA proposals — such as “Tempo Transactions” — might be a better choice.
In this post, I will explain:
- How Frame Transactions and Tempo Transactions represent two distinct philosophies of native AA.
- What the respective strengths and weaknesses of these proposals are.
- How we can get the best of both worlds.
Two competing philosophies
In the history of account abstraction research, there has always been two competing philosophies, and Frame Transactions and Tempo Transactions are simply the latest iterations of them.
The two philosophies can be summarized as such:
- “Give users what they want”: enshrine the most important AA features into the protocol, to simplify integration for developers and optimize UX for users.
- “Let developers build what they want”: implement protocol primitives that enable developers to build AA features, so that the ecosystem can support the largest set of AA use cases.
Now let’s look at how Tempo Transactions and Frame Transactions exemplify these philosophies.
Tempo Transactions: Give users what they want
In the few years since ERC-4337 has been in production, it has been very clear (especially to those of us who have been selling AA solutions) what the most highly demanded AA features are. They are (in order from more to less demanded):
- Gas abstraction — including DApps sponsoring gas for users, and users paying gas in ERC20 tokens.
- Atomic batching — e.g. sending
approve + swapin one transaction. - Transaction automation — DApps executing transactions on behalf of users by requesting permissions from them. Examples include recurring payments, scheduled transactions (e.g. limit orders), automated trading by AI agents, etc.
- Alternative signature schemes, such as passkeys and multisig.
So the Tempo philosophy is simple: let’s just enshrine these features into the protocol. This is apparent by just looking at the structure of a Tempo transaction:

Notice the parts where it differs from a regular transaction:
callsis an array of calls, which naturally enables atomic batching.fee_payer_signatureenables another wallet to sponsor the transaction by co-signing the transaction.valid_beforeandvalid_afterenable scheduled transactions.
Notice how simple everything is. You don’t need to be a PHD in account abstraction to use these features — you just put the right data into the transaction. The simplicity, both for developers and for users, is the greatest strength of Tempo-style AA proposals.
However, also notice how some features are missing compared to our AA wishlist, such as ERC20 gas payments, permissions, and multisig. To make these features work, you’d need to enshrine more things into the protocol; for example, the Tempo blockchain itself enshrines a “fee AMM” for converting between ERC20s and native gas tokens, thus enabling gas payments in ERC20s.
Since all AA features are enshrined into the protocol, a developer building for a use case outside of what Tempo Transactions were intended for have no choice but to wait for the protocol to enshrine more features, or resort to application-layer solutions (such as ERC-4337) and accept the higher latency, higher gas cost, and lower security that come with them. The lack of extensibility is therefore the biggest downside of the Tempo philosophy.
Frame Transactions: Let developers build what they want
To understand how Frame Transactions represent a fundamentally different philosophy, let’s again look at the transaction structure:

The most interesting thing about this structure is what’s missing: signatures. Whereas a Tempo transaction has two signature fields — sender_signature and fee_payer_signature — frame transactions have none. Wait, what? How do you authorize transactions without signatures?
The answer is that frame transactions seek to generalize transactions to its most abstract form — smart contracts processing data. To authorize a transaction, you simply pass the signature as data to a smart contract that authorizes transactions.
To allow smart contracts to authorize transactions, EIP-8141 introduces a new opcode APPROVE where a smart contract would call:
APPROVE 0to approve sending the transaction.APPROVE 1to approve paying gas for the transaction.APPROVE 2to approve both sending and paying gas for the transaction .
But what’s the point of all this, when you can just embed sender and payer signatures directly into the transaction like Tempo Transactions do? The point is that sender and gas payer logic can now be implemented with arbitrary code, enabling use cases not supported by Tempo Transactions, such as:
- Signature schemes besides k1 and r1 (passkeys), including multisigs and quantum-resistant signatures.
- Conditional sponsorship. For example, if a user wants to pay gas in ERC20, they simply find a gas sponsor contract who would sponsor the transaction on the condition that the user transfers some ERC20 tokens to the contract.
- Privacy protocols. For example, you can send transactions where the
senderis not your own account, but rather a mixer protocol that verifies your signature using zero-knowledge proofs. - Generalized permissions. The sender contract can delegate arbitrarily fine-grained permissions to other accounts to execute transactions on its behalf.
Frame Transactions are undoubtedly more powerful than Tempo Transactions, but they come at the cost of complexity: it’s no longer obvious what’s the best way to do any given thing. Since account logic is implemented with EVM code, any AA feature can be implemented in an infinite number of ways, since EVM code is infinitely flexible.
More concretely, the complexity can manifest in several layers:
- Ethereum clients must implement complex mempool rules to protect themselves from DoS attacks since validating transactions will now involve executing code, which can be resource-intensive.
- Developer toolings such as Tenderly and Etherscan must deal with the fact that transactions will no longer have a well-defined structure, since authorization and gas payment of a transaction can now happen at any point of the transaction via smart contracts.
- Wallets must develop, audit, and integrate with smart account implementations that support frame transactions.
- For users to use their smart accounts across EVM chains, the account implementation contract must be deployed across EVM chains, which is challenging since the list of EVM chains is ever-growing.
In short, to pay for the power and flexibility of frames, the ecosystem must handle increased complexity across the Web3 stack.
Can we get the best of both worlds?
If you have read this far, you may be under the impression that we are stuck between two bad choices:
- If we go with Tempo-style transactions, we are confined to a set of protocol primitives that satisfy 80% of AA use cases today, but do not serve the other 20% and will require constant hard forks to serve new use cases as they come up.
- If we go with Frame-style transactions, we can serve all AA use cases in theory but in practice must deal with the increased complexity in client implementations, developer tooling, wallet implementations, and cross-chain UX.
Neither of these choices seems good. What do?
Fortunately, the real world is not so binary; thanks to feedback from the community, and with some contributions from myself, the coauthors of Frame Transactions are currently working on a set of updates that would enable Frame transactions to maintain their flexibility while keeping the cost of adoption low. These updates include:
- Expanding frame transactions to support EOAs via a “default account”. In other words, EOA users today will be able to reap the benefits of AA such as gas abstraction and atomic batching, without having to migrate to smart accounts. This vastly lowers the cost of AA adoption for leading EOA wallets, and offers a sane “happy path” that developer toolings can easily support.
- Enabling accounts to use non-k1 signature types (such as r1 passkeys) without using smart contracts, which again vastly reduces complexity for wallet developers and increases security for end users.
- Defining a set of recommended frame structures that Ethereum clients can easily support, so that Ethereum can maintain mempool safety without clients implementing complex mempool logic.
Again, none of these updates takes away from the flexibility of frames and how they can compose into arbitrarily advanced account logic. That’s how we get the best of worlds: offering sane defaults for the most common use cases, while providing composable primitives for developers to build for the more advanced use cases.
How you can help
Later this week, Ethereum client developers will be meeting to decide whether to implement Frame transactions for the Hegota upgrade. If you care about improving UX for Ethereum, now is the best time to get involved. Here are some ways you can help:
- Contribute to discussions on Ethereum Magicians and share your thoughts on Frame transactions and AA at large.
- If you are connected with someone at a client team (e.g. Geth/Reth/Nethermind/Besu/Erigon), let them know why implementing native AA for Ethereum is important for you, and express support for your preferred AA proposal if you have one.
- If you have ideas for improving any of the AA proposals, consider making PRs at the EIPs repo.
Ethereum is at its best when the community gets involved, and for an issue like native AA which affects EVERYONE, your input might just make the difference.