{"id":"ERC-7575","name":"Multi-Asset ERC-4626 Vaults","status":"Final","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":"ERC-7575 groups asset-specific ERC-4626 entry-point vaults that issue a common share token. Users can choose among the deployed group members, such as an ETH or USDC entry point, while the application presents their shared share asset and each entry point's own rates and limits.","officialUrl":"https://ercs.ethereum.org/ERCS/erc-7575","lastReviewed":"2026-09-18","lastUpdated":"2026-09-18","kind":"proposal","hasDetailedContent":true,"content":{"id":"ERC-7575","summary":"ERC-7575 groups asset-specific ERC-4626 entry-point vaults that issue a common share token. Users can choose among the deployed group members, such as an ETH or USDC entry point, while the application presents their shared share asset and each entry point's own rates and limits.","applicability":{"whenToUse":["Your users must swap to the exact asset a vault accepts.","Your product addresses: different vaults for same strategy but different assets.","The flow should group asset-specific entry points under one shared share token.","You are designing a multi-asset deposit selector experience with visible states and recovery paths."],"whenToAvoid":["The product has only one ERC-4626 entry-point asset and no multi-asset vault group.","The deployed contracts do not share a common share token.","The flow cannot discover or distinguish each asset-specific entry point.","No token balances, swaps, lending, or yield flows appear in the product."]},"designerTakeaways":["You can group a USDC entry point with other asset-specific vaults that issue the same share token.","You can show one vault group with separate contracts, rates, limits, and supported assets.","You can let users choose among the entry points the deployed group actually exposes."],"problemsSolved":[{"problem":"Users must swap to the exact asset a vault accepts","oldWay":"Have USDC, vault wants DAI → swap first → then deposit (2 steps)","newWay":"Use the USDC-denominated entry point and group its common share token with the other entries","impact":"critical"},{"problem":"Different vaults for same strategy but different assets","oldWay":"ETH vault, WETH vault, stETH vault - fragmented liquidity","newWay":"A group of asset-specific entry-point vaults issues one common share token","impact":"high"},{"problem":"Users confused about which asset to use","oldWay":"\"Should I deposit DAI or USDC?\" - arbitrary choice anxiety","newWay":"Show the supported entry points and their own terms so users can choose clearly","impact":"high"},{"problem":"Extra gas for pre-swap before deposit","oldWay":"Swap on DEX → approve → deposit (3 transactions)","newWay":"Deposit through the selected entry point without assuming an internal pre-swap","impact":"medium"}],"uxPatterns":[{"name":"Multi-Asset Deposit Selector","description":"Choose any supported asset to deposit","userFlow":["User sees list of accepted assets","Balances shown for each asset","Select asset they have most of","Enter amount to deposit","See the selected entry point's preview and limits","Deposit directly"]},{"name":"Best Asset Suggestion","description":"Recommend optimal deposit asset based on user balances","userFlow":["Analyze user's wallet balances","Compare rates and limits for each deployed entry point","Suggest an option based on balance, rate, and user-selected risk","One-click deposit with suggested asset","Allow override if user prefers different asset"]},{"name":"Multi-Asset Withdrawal","description":"Choose which asset to receive on withdrawal","userFlow":["User sees their share balance","Choose an available entry-point vault for withdrawal, if supported","Compare the selected entry points' rates and limits","Select amount to withdraw","Receive the selected entry-point asset when the deployed withdrawal path supports it"]},{"name":"Accepted Assets Display","description":"Show all assets a vault accepts","userFlow":["User browses vault details","See all asset-specific entry points and their contract context","Understand the common share token and each entry point's terms","Decide to deposit based on flexibility"]}],"uiComponents":[{"name":"MultiAssetSelector","description":"Dropdown/list for selecting from multiple deposit assets","states":["collapsed","expanded","selected","disabled"],"props":["assets[]","balances{}","rates{}","onSelect"]},{"name":"AssetRateComparison","description":"Show conversion rates for each accepted asset","states":["loading","loaded","stale"],"props":["assets[]","rates{}","bestRate"]},{"name":"AcceptedAssetsBadge","description":"Compact display of all accepted assets","states":["compact","expanded"],"props":["assets[]","maxDisplay"]},{"name":"SmartAssetSuggestion","description":"AI/logic based suggestion for best deposit asset","states":["analyzing","suggested","overridden"],"props":["userBalances{}","vaultRates{}","onAccept","onOverride"]}],"antiPatterns":[{"pattern":"Not showing all accepted assets upfront","why":"Users may not realize they can use their existing balance","instead":"List all accepted assets prominently on vault page","severity":"critical"},{"pattern":"Hiding conversion rate differences","why":"Users may get worse rate without knowing","instead":"Show rate comparison and highlight best option","severity":"high"},{"pattern":"Forcing single asset deposit first","why":"User has to discover multi-asset later, friction","instead":"Show the asset-specific entry points as the primary deposit choices","severity":"high"},{"pattern":"No indication of vault composition","why":"Users can't understand diversification risk","instead":"Show what % of vault is in each asset","severity":"medium"}],"keyTakeaways":["ERC-7575 groups asset-specific entry points under a common share token","Show each supported entry point and the user's balance for its asset","Compare rates and limits between deployed entry points","Offer a withdrawal choice only when the selected entry point supports it"],"technicalNotes":"ERC-7575 defines a group of ERC-4626 entry-point vaults, each denominated in a specific asset and linked to one common share token. Each entry point keeps its own ERC-4626 limits, previews, and rates; there is no single deposit ABI that accepts arbitrary assets or requires internal conversion. share() identifies the common share token, and the optional vault(asset) lookup is a SHOULD that clients must feature-detect.","specConstraints":[{"id":"vault-erc4626-interface","constraint":"Every ERC-7575 Vault implements the ERC-4626 Vault interface except for the ERC-20 methods and events.","appliesTo":"application","normativity":"normative","specQuote":"All [ERC-7575](./eip-7575.md) Vaults MUST implement [ERC-4626](./eip-4626.md) excluding the [ERC-20](./eip-20.md) methods and events.","specSection":"Specification / Methods","specUrl":"https://ercs.ethereum.org/ERCS/erc-7575#methods","designImplication":"Reuse ERC-4626 deposit, withdrawal, preview, and limit concepts while making the missing ERC-20 surface explicit in wallet and vault UI."},{"id":"share-token-address","constraint":"The share method must return the address of an ERC-20 share representation of the Vault.","appliesTo":"application","normativity":"normative","specQuote":"The address of the underlying `share` received on deposit into the Vault. MUST return an address of an [ERC-20](./eip-20.md) share representation of the Vault.","specSection":"Specification / Methods / share","specUrl":"https://ercs.ethereum.org/ERCS/erc-7575#share","designImplication":"Show the actual share-token address and distinguish it from the Vault address when an external share contract is used."},{"id":"external-share-accounting","constraint":"When share is an external token, entry operations increase the receiver's share balance and exit operations decrease the owner's share balance by the specified shares amount.","appliesTo":"account-implementation","normativity":"normative","specQuote":"* entry functions MUST increase the `share` balance of the `receiver` by the `shares` amount. i.e. `share.balanceOf(receiver) += shares`\n* exit functions MUST decrease the `share` balance of the `owner` by the `shares` amount. i.e. `share.balanceOf(owner) -= shares`","specSection":"Specification / Methods / share","specUrl":"https://ercs.ethereum.org/ERCS/erc-7575#share","designImplication":"Update share balances and Vault positions together in deposit and exit flows, with receiver and owner roles shown separately when a different account is involved."},{"id":"share-read-no-revert","constraint":"The share method must not revert when clients read the share representation.","appliesTo":"account-implementation","normativity":"normative","specQuote":"MUST _NOT_ revert.","specSection":"Specification / Methods / share","specUrl":"https://ercs.ethereum.org/ERCS/erc-7575#share","designImplication":"Keep share discovery a reliable read path and provide an explicit unsupported or malformed response only when the contract does not satisfy the standard."},{"id":"multi-asset-share-entrypoints","constraint":"Each entry point of a Multi-Asset Vault must implement share and should not itself be an ERC-20 token.","appliesTo":"application","normativity":"normative","specQuote":"Multi-Asset Vaults MUST implement the `share` method on each entry point. The entry points SHOULD NOT be [ERC-20](./eip-20.md).","specSection":"Specification / Multi-Asset Vaults","specUrl":"https://ercs.ethereum.org/ERCS/erc-7575#multi-asset-vaults","designImplication":"Let users choose an asset-specific entry point while keeping the common share token visible, and do not present each entry point as a separate fungible share asset by default."},{"id":"erc4626-compatibility-limit","constraint":"ERC-7575 Vaults are not fully ERC-4626-compatible because ERC-20 functionality has been removed.","appliesTo":"application","normativity":"backwards-compatibility","specQuote":"[ERC-7575](./eip-7575.md) Vaults are not fully compatible with [ERC-4626](./eip-4626.md) because the [ERC-20](./eip-20.md) functionality has been removed.","specSection":"Backwards Compatibility","specUrl":"https://ercs.ethereum.org/ERCS/erc-7575#backwards-compatibility","designImplication":"Keep ERC-4626 terminology where it applies but disclose the missing ERC-20 methods and events so integrators do not assume a single Vault is itself the share token."},{"id":"redeem-authority-approval","constraint":"A redeem flow where owner is not msg.sender needs an explicit approval path when the Vault and share are separate contracts.","appliesTo":"wallet","normativity":"security-considerations","specQuote":"non-compliant Vaults must take care with supporting a redeem flow where `owner` is not `msg.sender`, since the [ERC-20](./eip-20.md) approval flow does not by itself work if the Vault and share are separate contracts.","specSection":"Security Considerations","specUrl":"https://ercs.ethereum.org/ERCS/erc-7575#security-considerations","designImplication":"Show whose shares are being redeemed, whose approval is required, and whether a trusted-forwarder path is being used before confirming an exit for another owner."}],"lastUpdated":"2026-09-18","sources":[{"label":"ERC-7575 official specification","url":"https://ercs.ethereum.org/ERCS/erc-7575","type":"official-spec"}],"lastReviewed":"2026-09-18"},"sources":[{"label":"Official specification","url":"https://ercs.ethereum.org/ERCS/erc-7575","type":"official-spec"},{"label":"Discussion search","url":"https://ethereum-magicians.org/search?q=ERC-7575","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-7575","markdown":"https://www.eipsfordesigners.com/standards/ERC-7575/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-7575/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-7575","official":"https://ercs.ethereum.org/ERCS/erc-7575","discussion":"https://ethereum-magicians.org/search?q=ERC-7575"},"freshness":{"lastReviewed":"2026-09-18","lastUpdated":"2026-09-18"}}