{"kind":"chain-guide","id":"MONAD-7702","name":"Using EIP-7702 on Monad","searchAliases":["EIP-7702 Constraints"],"status":null,"chain":"monad","category":{"id":"transaction-friction","name":"Transaction Friction","description":"Reducing clicks, signatures, and mental overhead"},"journeyStages":[{"id":"approving","name":"Approving & Permissioning","description":"Granting permissions for actions"},{"id":"executing","name":"Executing Transactions","description":"Performing on-chain actions"},{"id":"gas","name":"Gas & Fees","description":"Paying for transactions"}],"uxImpact":"EIP-7702 is opt-in code delegation for EOAs on Monad. While delegated, a transaction that reduces the EOA's balance below the applicable reserve threshold reverts, subject to the documented max-gas-fee allowance. The current reserve parameter is 10 MON, not a required deposit; sponsored low-balance calls can work when the balance is unchanged or increased. Delegated accounts cannot use the emptying exception.","officialUrl":"https://docs.monad.xyz/developer-essentials/eip-7702","lastReviewed":"2026-09-21","lastUpdated":"2026-09-21","hasDetailedContent":true,"content":{"id":"MONAD-7702","specConstraints":[{"id":"fee-payer-and-asset-owner","constraint":"The transaction fee payer and the account authorizing an asset spend are separate roles.","appliesTo":"application","normativity":"rationale","specQuote":"In Ethereum's account-based model, there are two separate roles - \"fee payer\" (transaction\nsubmitter, i.e. who pays for gas to execute a transaction) and \"asset owner\" (spend authorizer,\ni.e. who holds keys with the power to spend from a balance). Originally, EOAs played both roles.\nUnder EIP-4337, the roles were split - a smart contract wallet holds title to assets (and has\nits own logic for validating that spend was authorized), but fees must still be paid by an\nEOA, hence the roles are definitively split.","specSection":"EIP-7702 Primer","specUrl":"https://docs.monad.xyz/developer-essentials/eip-7702#eip-7702-primer","designImplication":"Show the actual fee payer separately from the delegated account whose assets move. Sponsorship does not remove fees or waive reserve restrictions on that account's value spend."},{"id":"no-universal-deposit","constraint":"Delegated accounts do not need a universal 10 MON deposit to receive a sponsored call.","appliesTo":"application","normativity":"normative","specQuote":"To be clear, EIP-7702-delegated accounts are **not** required to have a 10 MON balance. For example,\na delegated EOA *A* with a balance of 5 MON can still be called by a gas sponsor, and the transaction\nwill succeed as long as *A* ends with 5 MON or more still.","specSection":"EIP-7702 on Monad / Delegated EOAs can't dip below 10 MON","specUrl":"https://docs.monad.xyz/developer-essentials/eip-7702","designImplication":"Do not block every low-balance or zero-balance sponsored flow. Evaluate the complete action's reserve effects and other execution checks; sponsorship eligibility alone does not guarantee success."}],"sources":[{"label":"Monad EIP-7702 documentation","url":"https://docs.monad.xyz/developer-essentials/eip-7702","type":"official-doc"},{"label":"EIP-7702 specification","url":"https://eips.ethereum.org/EIPS/eip-7702","type":"official-spec"},{"label":"Monad Reserve Balance documentation","url":"https://docs.monad.xyz/developer-essentials/reserve-balance","type":"official-doc"},{"label":"Monad block states documentation","url":"https://docs.monad.xyz/monad-arch/consensus/block-states","type":"official-doc"},{"label":"Monad JSON-RPC API reference","url":"https://docs.monad.xyz/reference/json-rpc/api","type":"official-doc"},{"label":"Canonical MIP-4 specification","url":"https://github.com/monad-crypto/MIPs/blob/7c95e69cb26d43d82e50d06199d4810067a3a2e0/MIPs/MIP-4.md","type":"official-spec"}],"lastReviewed":"2026-09-21","lastUpdated":"2026-09-21","summary":"EIP-7702 is opt-in code delegation for EOAs on Monad. While delegated, a transaction that reduces the EOA's balance below the applicable reserve threshold reverts, subject to the documented max-gas-fee allowance. The current reserve parameter is 10 MON, not a required deposit; sponsored low-balance calls can work when the balance is unchanged or increased. Delegated accounts cannot use the emptying exception.","designerTakeaways":["Show delegation state persistently and explain which balance-changing actions are restricted while it is active; let the wallet control authorization review.","Your send-max flow should use a transaction-specific estimate, show its assumptions and freshness, and re-check before signing rather than use a hard-coded balance-minus-10-MON rule.","You can support a documented sponsored workflow for a zero or low-balance delegated EOA when the call leaves its balance unchanged or increased, subject to other execution checks.","After clearing delegation, show reserve eligibility as pending until the relevant k-block and recent-activity conditions are satisfied.","Surface the CREATE/CREATE2 restriction when delegated code is used as contract code, while distinguishing it from a normal contract-creation transaction sent by the EOA."],"chainContext":{"behavior":"Monad supports EIP-7702, but delegation is opt-in and remains until changed or cleared. Monad's reserve and delegated-code CREATE/CREATE2 restrictions apply while an account is delegated. Check wallet and account-implementation support, and keep authorization review in the wallet. Sponsorship does not override reserve checks.","whenRelevant":["A wallet or dapp shows active EIP-7702 delegation, delegated target code, or a change or clear action.","An application uses a specific delegated implementation for batching, session authentication, recovery, or sponsored gas.","A send, swap, contract call, or deployment flow may move native MON from the delegated EOA or execute delegated code.","The product separates the asset owner from the fee payer or previews an authorization and its follow-on call."],"pitfalls":["Treating delegation as default EOA behavior or assuming every wallet supports the same authorization and account implementation.","Treating 10 MON as a deposit or blocking a zero or low-balance sponsored call when the delegated balance is unchanged or increased.","Assuming sponsorship overrides reserve checks; a value-spending action can still revert even when another account pays the transaction fee.","Treating undelegation as immediate emptying eligibility without checking the prior k blocks and recent delegation or undelegation requests.","Treating the delegated-code CREATE or CREATE2 restriction as a blanket ban on normal contract-creation transactions sent by the EOA.","Treating eth_call or gas estimation, inclusion, or finality as proof that the delegated action will execute successfully."]},"prototypeFirst":[{"screen":"Wallet-owned delegation review","why":"The wallet's review should explain the authority granted, delegated account state, reserve behavior, and sponsored zero-balance path. Applications detect support rather than requesting an authorization signature.","covers":["Pre-delegate"],"include":["Delegation target and account state","10 MON threshold explained as a conditional balance rule, not a deposit","Sponsored workflow conditions","Wallet-controlled authorization and clear revoke path"]},{"screen":"Delegated account header","why":"The active delegation changes how users should interpret balance-changing actions and contract calls.","covers":["Delegated active"],"include":["Delegated badge","Delegation target or details link","Reserve behavior link","Undelegate path"]},{"screen":"State-aware send max","why":"A delegated account's max send depends on the intended value, gas, current balance direction, and account state.","covers":["Send max","Over-threshold action"],"include":["Transaction-specific estimated sendable","Why the estimate is conditional or stale","Unchanged-balance sponsored path","Adjust amount inline"]},{"screen":"Advanced CREATE restriction note","why":"Delegated contract code cannot call CREATE or CREATE2, but a normal contract-creation transaction sent by the EOA remains a distinct path.","covers":["Deploy attempt blocked"],"include":["Advanced accordion","CREATE/CREATE2 restriction in delegated code","Context-specific recovery guidance"]}],"mentalModel":[{"label":"Delegation","description":"An EOA authorizes code at a target address and can then be called like a smart contract account."},{"label":"Conditional reserve rule","description":"While delegated, a prohibited balance reduction below the applicable reserve threshold reverts. The current reserve parameter is 10 MON, with the documented max-gas-fee allowance; an unchanged or increased balance can still succeed below 10 MON."},{"label":"Send max","description":"The maximum is transaction-specific and must account for gas, value, delegation, and current reserve eligibility rather than subtracting a constant."},{"label":"Undelegate","description":"Removing delegation may allow the emptying exception later, but recent k-block transactions and delegation changes still determine eligibility."},{"label":"CREATE restriction","description":"Delegated code executing as an EOA cannot call CREATE or CREATE2; normal contract creation sent by the EOA is a separate case."}],"statesToDesign":[{"state":"Not delegated","trigger":"The EOA has no active EIP-7702 delegation.","userNeed":"Know whether a normal transaction or an eligible emptying transaction is available.","designResponse":"Show ordinary transaction controls with current reserve and emptying eligibility; offer delegation as an explicit capability."},{"state":"Delegated active","trigger":"The EOA points to delegated code.","userNeed":"Understand active code, reserve behavior, sponsor roles, and deployment restrictions.","designResponse":"Show a persistent Delegated badge, target details, and action-specific reserve guidance."},{"state":"Balance-decreasing action below threshold","trigger":"A delegated transaction would decrement the EOA below 10 MON beyond the applicable gas-spend allowance.","userNeed":"Fix the action before signing or understand why a sponsored call is still allowed.","designResponse":"Show the transaction-specific restriction; keep unchanged or increased-balance sponsored calls available when their checks pass."},{"state":"Undelegation pending eligibility","trigger":"The user clears delegation but recent blocks still contain activity or delegation changes.","userNeed":"Know when an emptying transaction can become eligible.","designResponse":"Show the k-block wait and recent-activity conditions, then re-check before offering full-balance emptying."},{"state":"CREATE blocked","trigger":"Delegated contract code attempts CREATE or CREATE2.","userNeed":"Understand the context-specific deployment restriction.","designResponse":"Explain that delegated code cannot use those opcodes and distinguish a normal creation transaction sent by the EOA."}],"designDecisions":[{"question":"How should the reserve rule be explained at delegation time?","recommendation":"Describe 10 MON as a conditional threshold for balance-decreasing delegated actions, not as an upfront deposit; include the sponsored zero or low-balance case.","rationale":"The official Monad documentation says delegated EOAs are not required to hold 10 MON and can be called by a sponsor when their balance is unchanged or increased."},{"question":"How should send-max behave while delegated?","recommendation":"Compute a transaction-specific estimate, display its inputs and freshness, re-check before signing, and label it as conditional.","rationale":"Gas, value, account state, and whether the action decreases the delegated balance determine the result; a fixed subtraction misstates the available action, and a preview cannot guarantee later inclusion or execution."},{"question":"When should undelegation show full-balance emptying?","recommendation":"Show a pending state until the current k-block and recent-activity conditions pass.","rationale":"Removing delegation alone does not immediately satisfy the emptying-transaction criteria."},{"question":"When should CREATE restrictions be visible?","recommendation":"Show them in deployment tooling when the attempted path executes delegated code as contract code.","rationale":"The restriction is relevant to a specific execution context and does not block every contract-creation transaction sent by the EOA."}],"problemsSolved":[{"problem":"A delegated balance-decreasing action can revert unexpectedly","oldWay":"Let the user send an amount that would decrement the delegated EOA below the reserve threshold.","newWay":"Show a transaction-specific reserve check and explain the balance direction before signing.","impact":"high"},{"problem":"A false deposit rule blocks sponsored workflows","oldWay":"Require a delegated EOA to be funded with 10 MON before a sponsor can call it.","newWay":"Separate the sponsor from the delegated account and keep zero or low-balance sponsorship available when the delegated balance remains unchanged or increases and other checks pass.","impact":"high"},{"problem":"Delegated state and its constraints are invisible","oldWay":"Render the account like an ordinary EOA after code delegation.","newWay":"Show a persistent delegation badge, target details, reserve guidance, and undelegation status.","impact":"high"},{"problem":"Users assume undelegation immediately unlocks the whole balance","oldWay":"Offer full-balance emptying immediately after clearing delegation.","newWay":"Show pending eligibility until recent transactions and delegation changes fall outside the current k-block window.","impact":"high"},{"problem":"A preview is treated as a promise of execution","oldWay":"Treat a successful simulation or inclusion as proof that the signed delegated action will execute successfully.","newWay":"Show the preview's block or state freshness, re-check before signing, and confirm execution separately from inclusion and finality.","impact":"high"}],"uxPatterns":[{"name":"Action-Specific Balance Warning","description":"Explain the intended action's balance impact and sponsored path without presenting 10 MON as a universal deposit.","components":["DelegateBadge","ReserveCallout","SendCap"],"userFlow":["Load the current delegation and account state","Show the 10 MON threshold and no-deposit explanation","Distinguish balance-decreasing actions from sponsored unchanged-balance calls","Show a transaction-specific preview with block or state freshness before signing","Keep the preview conditional until execution is confirmed"]},{"name":"Delegated Account Header","description":"Persistent delegation status with a link to action-specific reserve and deployment rules.","components":["DelegatedChip","UndelegateLink","ReserveTooltip"],"userFlow":["Account is delegated","Badge and target are visible","Send and sponsored calls use the current state","Undelegate shows pending emptying eligibility when applicable"]}],"antiPatterns":[{"pattern":"Send max without a transaction-specific reserve check","why":"A prohibited delegated balance reduction below the applicable threshold reverts, subject to the documented max-gas-fee allowance. Unchanged or increased-balance sponsored calls may still be valid.","instead":"Compute and re-check the estimate from value, gas, balance direction, and delegation state.","severity":"critical"},{"pattern":"Delegate without explaining the reserve rule","why":"Users may believe they must deposit 10 MON or may not understand why a particular debit is restricted.","instead":"Explain the conditional threshold, the no-deposit rule, sponsored workflows, and the emptying exception boundary.","severity":"critical"},{"pattern":"Blocking zero-balance sponsored calls","why":"The official Monad documentation allows a sponsor to call a delegated EOA with zero or low balance when its balance is unchanged or increased, subject to other execution checks.","instead":"Check whether the action decreases the delegated EOA's balance and keep eligible sponsored flows available while showing their conditions.","severity":"high"},{"pattern":"Promising full balance immediately after undelegation","why":"Recent transactions and delegation or undelegation requests can delay emptying eligibility.","instead":"Show a pending state and re-check the current k-block conditions.","severity":"high"},{"pattern":"Hiding delegated state","why":"Users cannot explain why the same account behaves differently after code delegation.","instead":"Keep delegation status and target details visible wherever balance-changing actions are offered.","severity":"high"},{"pattern":"Treating simulation as a guarantee","why":"eth_call and gas estimates run against a selected block state; later balances, inflight activity, delegation, or consensus timing can differ.","instead":"Show the simulation's block or state freshness, re-check before signing, and confirm execution separately from inclusion and finality.","severity":"high"}],"vocabulary":[{"use":"Balance-decreasing action may be limited while delegated","avoid":"Keep 10 MON while delegated","why":"A delegated EOA is not required to hold a 10 MON balance, and unchanged or increased balances can still work below it."},{"use":"Sponsored gas","avoid":"The user must fund the delegated account","why":"EIP-7702 separates the authorization and fee-payer roles in a sponsored workflow."},{"use":"Pending emptying eligibility","avoid":"Full balance available now","why":"Undelegation alone does not satisfy the recent-block conditions."},{"use":"Delegated account","avoid":"Smart wallet supported everywhere","why":"The account implementation and wallet integration still determine which product capabilities are available."}],"onMonad":[{"aspect":"Delegated balance rule","ethereum":"Reserve behavior is chain-specific and should be read from the target network's rules.","monad":"A prohibited reduction below the applicable delegated-account reserve threshold reverts. The reserve parameter is 10 MON, with the documented max-gas-fee allowance; an unchanged or increased balance can succeed below 10 MON.","designImplication":"Make the threshold action-specific and never turn it into a universal deposit or send-max subtraction."},{"aspect":"Sponsored workflow","ethereum":"EIP-7702 supports authorization submission by another entity; fee behavior is chain- and account-specific.","monad":"A sponsor can submit a call for a delegated EOA, including one with zero or low balance, when the delegated EOA's balance is unchanged or increased and other execution checks pass.","designImplication":"Show sponsor and asset-owner roles separately and keep eligible sponsored actions available."},{"aspect":"Emptying eligibility","ethereum":"The Monad k-block emptying exception is not an Ethereum-wide EIP-7702 rule.","monad":"Delegated accounts cannot use the emptying exception; after undelegation, recent k-block activity and delegation changes still control eligibility.","designImplication":"Represent undelegation as a state transition with a pending eligibility period."},{"aspect":"CREATE and CREATE2","ethereum":"EIP-7702 behavior follows the Ethereum specification and target-chain execution rules.","monad":"Delegated code executing in the EOA context cannot call CREATE or CREATE2; a normal creation transaction sent by the delegated EOA remains a separate allowed path.","designImplication":"Give context-specific deployment feedback instead of a blanket account-level block."},{"aspect":"Reserve introspection","ethereum":"No MIP-4 precompile is implied by EIP-7702 itself.","monad":"MIP-4's 0x1001 precompile can report a current execution-time reserve dip as a bool, but it does not provide wallet preflight or a reserve amount.","designImplication":"Keep the contract check separate from delegation setup, send-max, and emptying eligibility screens."},{"aspect":"Simulation and result states","ethereum":"A simulation or gas estimate describes the selected state and does not decide later inclusion or execution.","monad":"eth_call and gas estimation can run against a selected Monad block tag, while consensus inclusion, asynchronous execution, and finality remain separate states.","designImplication":"Show previews as conditional, include their block or state freshness, and confirm execution after inclusion."}],"technicalNotes":"On Monad, EIP-7702 uses the Ethereum authorization workflow and adds chain-specific reserve and CREATE/CREATE2 behavior. Delegation is opt-in and remains until another authorization changes or clears it. A delegated EOA is not required to hold 10 MON: the current user_reserve_balance parameter protects balance-decreasing actions, while a transaction that leaves a below-10-MON balance unchanged or increases it can succeed. A sponsor can call a delegated EOA with zero or low balance when the call does not reduce that balance, subject to other execution checks. Delegated accounts cannot use the emptying exception. Clearing delegation may make emptying possible later, but only after the current k-block conditions are satisfied: no recent transaction from the sender and no recent delegation or undelegation request; k is currently 3. Delegated code cannot call CREATE or CREATE2, while ordinary contract-creation transactions sent by the EOA are a separate case. Wallets should treat eth_call and gas estimates as state-specific previews, re-check before signing, and show inclusion, execution, and finality separately. MIP-4's dippedIntoReserve() at 0x1001 is an execution-time bool for touched accounts, not a wallet reserve-amount or preflight API.","relatedStandards":[{"id":"EIP-7702","relationship":"Base EOA delegation standard"},{"id":"MONAD-RESERVE","relationship":"Monad reserve and emptying-eligibility rules"},{"id":"MIP-4","relationship":"Execution-time reserve-dip introspection"},{"id":"ERC-4337","relationship":"Smart-account and sponsored-workflow reference"}]},"sources":[{"label":"Official documentation","url":"https://docs.monad.xyz/developer-essentials/eip-7702","type":"official-doc"},{"label":"EIP-7702 specification","url":"https://eips.ethereum.org/EIPS/eip-7702","type":"official-spec"},{"label":"Monad Reserve Balance documentation","url":"https://docs.monad.xyz/developer-essentials/reserve-balance","type":"official-doc"},{"label":"Monad block states documentation","url":"https://docs.monad.xyz/monad-arch/consensus/block-states","type":"official-doc"},{"label":"Monad JSON-RPC API reference","url":"https://docs.monad.xyz/reference/json-rpc/api","type":"official-doc"},{"label":"Canonical MIP-4 specification","url":"https://github.com/monad-crypto/MIPs/blob/7c95e69cb26d43d82e50d06199d4810067a3a2e0/MIPs/MIP-4.md","type":"official-spec"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/MONAD-7702","markdown":"https://www.eipsfordesigners.com/standards/MONAD-7702/content.md","agent":"https://www.eipsfordesigners.com/standards/MONAD-7702/agent.md","api":"https://www.eipsfordesigners.com/api/standards/MONAD-7702","official":"https://docs.monad.xyz/developer-essentials/eip-7702"},"freshness":{"lastReviewed":"2026-09-21","lastUpdated":"2026-09-21"}}