EIP-3074
EIP-3074: AUTH and AUTHCALL Opcodes¶
EIP-3074 is a proposed Ethereum upgrade that aims to give Externally Owned Accounts (EOAs) smart contract-like functionality by introducing two new opcodes: AUTH and AUTHCALL.
Problem Addressed¶
While ERC-4337 provides an account abstraction solution, it primarily targets new smart contract wallet users. For the hundreds of millions of existing EOA users (MetaMask users), migrating to smart contract wallets is costly and cumbersome. EIP-3074 aims to let existing EOAs enjoy advanced features like batch transactions and Gas sponsorship without migrating assets.
Mechanism and Principles¶
EIP-3074 introduces the concept of an "Invoker Contract":
-
AUTH (Authorization):
- The user (EOA) signs a message containing a specific format (Commitment) using their private key.
- The Invoker Contract receives the signature and executes the
AUTHopcode. - The EVM verifies the signature and sets the EOA's address in a temporary context variable (
authorized), indicating the contract has been authorized by that EOA.
-
AUTHCALL (Authorized Call):
- Once authorization is successful, the Invoker Contract can execute the
AUTHCALLopcode. AUTHCALLis similar toCALL, but it sets the sender (msg.sender) to the EOA address authorized viaAUTH, rather than the Invoker Contract's own address.- This means the Invoker Contract can "impersonate" the EOA to initiate transactions.
- Once authorization is successful, the Invoker Contract can execute the
Key Features¶
- EOA Empowerment: Instantly gives existing wallets account abstraction capabilities.
- Batch Transactions: The user signs once, and the Invoker can execute a series of operations on behalf of the user (e.g.,
approveandtransferFrom). - Gas Sponsorship: The Invoker can pay Gas, so the user doesn't need to hold ETH.
- Security: Highly dependent on the security of the Invoker contract. A malicious Invoker could steal user assets. Therefore, wallets are expected to use whitelisting mechanisms to restrict which Invokers users can authorize.
Status¶
EIP-3074 was previously planned for inclusion in an Ethereum hard fork upgrade (such as the Pectra upgrade), but the community ultimately adopted EIP-7702 instead.