{"id":"ERC-7535","name":"Native Asset ERC-4626 Vault","status":"Draft","chain":"both","category":{"id":"defi","name":"DeFi Patterns","description":"Vaults, bonds, and financial primitives"},"journeyStages":[{"id":"management","name":"Asset Management","description":"Managing assets over time"}],"uxImpact":"Users can deposit native ETH directly into 4626-compatible vaults without wrapping to WETH first — simpler onboarding for liquid staking. Design implications: show ETH balance directly in vault deposit UI, use msg.value for deposits (no approval step needed), handle excess ETH refunds gracefully, display the special 0xEeee...EEeE address as 'ETH' not an address. Design decisions: whether to offer WETH alternative path, how to communicate the gas cost difference vs WETH vaults, handling the edge case where assets parameter may be ignored in favor of msg.value.","hasDetailedContent":true,"content":{"id":"ERC-7535","summary":"ERC-7535 extends the ERC-4626 vault standard to accept native assets (ETH) directly without requiring users to wrap them first. Users can deposit ETH straight into yield vaults, skipping the WETH wrapping step that adds friction and confusion to DeFi onboarding.","applicability":{"whenToUse":["Your users must wrap ETH to WETH before depositing.","Your product addresses: new users don't understand WETH.","The flow should deliver: eTH → deposit directly (1 step).","You are designing a direct eth deposit experience with visible states and recovery paths."],"whenToAvoid":["Hide wrapping entirely, deposit ETH directly.","Skip approval step entirely for ETH deposits.","Default to ETH, show WETH as alternative option.","No token balances, swaps, lending, or yield flows appear in the product."]},"designerTakeaways":["You can design UI that delivers eTH → deposit directly (1 step).","You can design UI that delivers deposit ETH, get shares. No wrapper tokens to explain.","You can design UI that delivers direct deposit saves wrapping gas entirely."],"problemsSolved":[{"problem":"Users must wrap ETH to WETH before depositing","oldWay":"ETH → approve → wrap to WETH → approve again → deposit to vault (4 steps)","newWay":"ETH → deposit directly (1 step)","impact":"critical"},{"problem":"New users don't understand WETH","oldWay":"\"What is WETH? Why do I need it? Where did my ETH go?\"","newWay":"Deposit ETH, get shares. No wrapper tokens to explain","impact":"critical"},{"problem":"Extra gas costs for wrapping","oldWay":"Wrapping costs ~45k gas, plus approval costs","newWay":"Direct deposit saves wrapping gas entirely","impact":"medium"},{"problem":"Fragmented ETH balance","oldWay":"Users have ETH + WETH + vault shares, confusing portfolio","newWay":"ETH → vault shares directly, cleaner balance view","impact":"medium"}],"uxPatterns":[{"name":"Direct ETH Deposit","description":"One-step deposit of native ETH into vault","mockup":"generic/vault-deposit","userFlow":["User enters ETH amount to deposit","Preview shows expected vault shares","Click deposit (no approve step)","Sign single transaction","ETH converts to vault shares directly"]},{"name":"Unified Deposit Interface","description":"Accept both ETH and WETH with same UI","mockup":"generic/vault-deposit","userFlow":["User chooses between ETH or WETH","Show approval requirements for each","ETH path is faster (no approval)","WETH accepted for users with existing balance","Same vault shares regardless of input"]},{"name":"Native Withdrawal","description":"Withdraw back to ETH directly","mockup":"generic/vault-position","userFlow":["User sees current position and earnings","Select withdrawal amount","Choose ETH or WETH output","Sign withdrawal transaction","Receive ETH directly to wallet"]}],"uiComponents":[{"name":"NativeAssetInput","description":"Input field that handles native ETH amounts","states":["empty","valid","insufficient","max"],"props":["balance","value","onChange","onMax"]},{"name":"AssetToggle","description":"Switch between ETH and WETH","states":["eth-selected","weth-selected"],"props":["ethBalance","wethBalance","onSelect"]},{"name":"VaultSharesPreview","description":"Show expected shares from deposit","states":["loading","ready","slippage-warning"],"props":["inputAmount","expectedShares","exchangeRate"]},{"name":"NoApprovalBadge","description":"Indicate no approval needed for native asset","states":["native","needs-approval","approved"],"props":["assetType","approvalStatus"]}],"antiPatterns":[{"pattern":"Still showing WETH wrapping in the UI","why":"Defeats the purpose of native asset support","instead":"Hide wrapping entirely, deposit ETH directly","severity":"critical"},{"pattern":"Requiring approval for ETH deposits","why":"Native ETH doesn't need approval - confuses users","instead":"Skip approval step entirely for ETH deposits","severity":"critical"},{"pattern":"Defaulting to WETH over ETH","why":"ETH is more familiar to users, WETH adds confusion","instead":"Default to ETH, show WETH as alternative option","severity":"high"},{"pattern":"Not showing \"no approval needed\" benefit","why":"Users don't realize ETH deposit is simpler","instead":"Highlight \"✓ No approval needed\" for ETH path","severity":"medium"}],"onMonad":[{"aspect":"Native Asset","ethereum":"ETH is the native asset","monad":"MON is the native asset","designImplication":"Update UI to show MON deposits, same UX pattern applies"},{"aspect":"Deposit Speed","ethereum":"Deposit takes 12-15 seconds to confirm","monad":"Sub-second finality, shares appear instantly","designImplication":"Can show shares balance updating in real-time"},{"aspect":"Gas Savings","ethereum":"Avoiding WETH wrap saves ~45k gas (~$5-20)","monad":"Gas already cheap, but still saves a transaction step","designImplication":"Emphasize simplicity over gas savings"},{"aspect":"Reserve Balance","ethereum":"Can deposit entire ETH balance","monad":"Must keep 10 MON reserve, adjust MAX button","designImplication":"MAX button should account for reserve: show \"Max: X MON (10 MON reserved)\""}],"keyTakeaways":["Native asset vaults eliminate the confusing WETH step","ETH deposits need no approval - highlight this benefit","Default to native asset, offer wrapped as alternative","Show clear \"You'll receive X shares\" preview","On Monad: account for reserve balance in MAX calculations"],"technicalNotes":"ERC-7535 extends ERC-4626 by adding receive() and depositETH() functions. The vault accepts msg.value as the deposit amount for native assets. Internally, vaults may still use WETH for accounting, but this is abstracted away from users. The standard maintains full compatibility with ERC-4626 for wrapped asset deposits."},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-7535","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-7535","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-7535","markdown":"https://www.eipsfordesigners.com/standards/ERC-7535/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-7535/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-7535","official":"https://eips.ethereum.org/EIPS/eip-7535","discussion":"https://ethereum-magicians.org/search?q=ERC-7535"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}