Skip to content

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":

  1. 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 AUTH opcode.
    • 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.
  2. AUTHCALL (Authorized Call):

    • Once authorization is successful, the Invoker Contract can execute the AUTHCALL opcode.
    • AUTHCALL is similar to CALL, but it sets the sender (msg.sender) to the EOA address authorized via AUTH, rather than the Invoker Contract's own address.
    • This means the Invoker Contract can "impersonate" the EOA to initiate transactions.

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., approve and transferFrom).
  • 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.