{"id":"EIP-3074","name":"AUTH and AUTHCALL Opcodes","status":"Draft","chain":"ethereum","category":{"id":"transaction-friction","name":"Transaction Friction","description":"Reducing clicks, signatures, and mental overhead"},"journeyStages":[{"id":"executing","name":"Executing Transactions","description":"Performing on-chain actions"}],"supersededBy":"EIP-7702","uxImpact":"Predecessor to EIP-7702: introduced AUTH and AUTHCALL opcodes letting users sign an authorization so an 'invoker' contract could act on their behalf — enabling sponsored transactions, batching, and delegation without deploying a smart wallet. Superseded by EIP-7702 before mainnet deployment, so this guidance is historical: build new flows on EIP-7702, but the invoker/authorization mental model and its sponsored-transaction UX patterns informed 7702's design.","hasDetailedContent":true,"content":{"id":"EIP-3074","summary":"EIP-3074 introduced AUTH and AUTHCALL opcodes, letting users authorize a contract (invoker) to act on their behalf. Users sign an authorization message, and the invoker can then make calls as if it were the user's address. This enables sponsored transactions, batch operations, and delegation without deploying a smart wallet.","applicability":{"whenToUse":["Your product addresses: eOAs couldn't delegate actions.","Your product addresses: each operation needed separate transaction.","The flow should deliver: authorize an invoker to act on your behalf.","You are designing a authorize invoker experience with visible states and recovery paths."],"whenToAvoid":["Show invoker address, name, verification status.","Prominent authorization manager with revoke options.","Clear list of capabilities being granted."]},"designerTakeaways":["You can design UI that delivers authorize an invoker to act on your behalf.","You can collapse multi-step actions into one confirmation users understand.","You can design UI that delivers invoker submits tx, can pay gas for user."],"problemsSolved":[{"problem":"EOAs couldn't delegate actions","oldWay":"Every action required direct transaction from EOA","newWay":"Authorize an invoker to act on your behalf","impact":"critical"},{"problem":"Each operation needed separate transaction","oldWay":"Approve, then swap, then stake = 3 transactions","newWay":"Authorize invoker, batch everything in one call","impact":"high"},{"problem":"Users always paid their own gas","oldWay":"Need ETH in wallet before any action","newWay":"Invoker submits tx, can pay gas for user","impact":"high"},{"problem":"No way to revoke stuck approvals atomically","oldWay":"Multiple transactions to clean up approvals","newWay":"Invoker can batch multiple revokes in one call","impact":"medium"}],"uxPatterns":[{"name":"Authorize Invoker","description":"Grant an invoker permission to act on your behalf","mockup":"concept/physical-link","userFlow":["dApp requests authorization","Wallet shows invoker details","Permissions clearly listed","User reviews and approves","Signed auth message returned"]},{"name":"Sponsored Batch Transaction","description":"Execute multiple operations with sponsored gas","mockup":"generic/token-approval","userFlow":["User already authorized invoker","Batch transaction prepared","All steps shown clearly","Gas sponsored by invoker","One click executes all"]},{"name":"Active Authorizations","description":"View and revoke active invoker authorizations","mockup":"concept/bundled-defi","userFlow":["User views active authorizations","See which invokers are authorized","Usage stats for each","Individual or bulk revocation","Clear authorization audit trail"]},{"name":"Invoker Trust Verification","description":"Help users verify invoker trustworthiness","mockup":"concept/verify-safety","userFlow":["User considering authorization","Check invoker verification status","Review trust signals","Access audit and source","Make informed decision"]}],"uiComponents":[{"name":"InvokerAuthorization","description":"Request authorization for an invoker","states":["requesting","reviewing","authorized","rejected"],"props":["invokerAddress","invokerName","permissions[]","onAuth","onReject"]},{"name":"AuthorizationManager","description":"View and manage active authorizations","states":["loading","has-auths","no-auths"],"props":["authorizations[]","onRevoke","onRevokeAll"]},{"name":"InvokerTrustScore","description":"Display trust signals for an invoker","states":["verified","unverified","warning"],"props":["invokerAddress","signals[]","score"]},{"name":"BatchTransactionPreview","description":"Show operations that will execute via AUTH","states":["loading","ready","executing"],"props":["operations[]","gasSponsored","onExecute"]}],"antiPatterns":[{"pattern":"Not showing invoker details","why":"User authorizing unknown contract is dangerous","instead":"Show invoker address, name, verification status","severity":"critical"},{"pattern":"No way to revoke authorizations","why":"Users can't secure their account if invoker compromised","instead":"Prominent authorization manager with revoke options","severity":"critical"},{"pattern":"Hiding what invoker can do","why":"User doesn't understand scope of authorization","instead":"Clear list of capabilities being granted","severity":"high"},{"pattern":"Not validating invoker trust","why":"Users might authorize malicious invokers","instead":"Show trust signals, audit status, usage stats","severity":"high"},{"pattern":"Persistent authorizations without expiry","why":"Old authorizations become security risks","instead":"Session-based or time-limited authorizations","severity":"medium"}],"onMonad":[{"aspect":"Fast Batch Execution","ethereum":"Batch via AUTH still takes 12+ seconds","monad":"Sub-second execution of entire batch","designImplication":"Batch operations feel instant, great UX"},{"aspect":"Gas Sponsorship Value","ethereum":"Sponsored gas saves users real money","monad":"Gas already cheap, sponsorship less dramatic","designImplication":"Emphasize convenience over cost savings"},{"aspect":"EIP-7702 Overlap","ethereum":"EIP-3074 and EIP-7702 serve similar purposes","monad":"Both available, 7702 often preferred for permanence","designImplication":"Guide users to appropriate solution for their needs"}],"relatedStandards":[{"id":"EIP-7702","relationship":"EIP-7702 is successor/alternative providing similar capabilities with different tradeoffs"},{"id":"ERC-4337","relationship":"Account abstraction provides another approach to sponsored/batched transactions"},{"id":"ERC-2771","relationship":"Meta transactions offer simpler sponsorship without invoker pattern"},{"id":"EIP-712","relationship":"AUTH messages use EIP-712 for structured signing"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-3074","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=EIP-3074","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/EIP-3074","markdown":"https://www.eipsfordesigners.com/standards/EIP-3074/content.md","agent":"https://www.eipsfordesigners.com/standards/EIP-3074/agent.md","api":"https://www.eipsfordesigners.com/api/standards/EIP-3074","official":"https://eips.ethereum.org/EIPS/eip-3074","discussion":"https://ethereum-magicians.org/search?q=EIP-3074"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}