{"id":"ERC-7540","name":"Asynchronous ERC-4626 Vaults","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 request deposits/withdrawals that process asynchronously over time — necessary for RWA, cross-chain, and illiquid strategies. Design implications: design three-state UI (Pending → Claimable → Claimed), show estimated wait times, display pending request status prominently, add 'Claim' button that appears when requests become claimable, remove instant preview quotes (previewDeposit/Redeem revert). Design decisions: whether to show queue position, how to communicate yield accrual during pending state, whether to allow request cancellation if protocol supports it, notification strategy for when claims become available.","hasDetailedContent":true,"content":{"id":"ERC-7540","summary":"ERC-7540 adds asynchronous deposit and redemption to ERC-4626 vaults. Instead of instant deposits/withdrawals, users submit requests that are fulfilled later. This enables vaults with real-world assets, illiquid investments, or settlement delays to use the standard vault interface while being honest about timing.","applicability":{"whenToUse":["Your users expect instant withdrawal but vault has illiquid assets.","Your product addresses: real-world asset vaults can't use ERC-4626.","Your UI should clear \"request → wait → claim\" flow sets proper expectations.","You are designing a request-wait-claim flow experience with visible states and recovery paths."],"whenToAvoid":["Show settlement timeline BEFORE they submit request.","Show percentage progress and estimated time remaining.","Notify user and let them claim when ready.","No token balances, swaps, lending, or yield flows appear in the product."]},"designerTakeaways":["You can clear \"request → wait → claim\" flow sets proper expectations in the interface.","You can standardized async interface works for RWA vaults.","You can design UI that delivers trackable request status with estimated completion."],"problemsSolved":[{"problem":"Users expect instant withdrawal but vault has illiquid assets","oldWay":"Transaction reverts with confusing error, or vault has exit penalties","newWay":"Clear \"request → wait → claim\" flow sets proper expectations","impact":"critical"},{"problem":"Real-world asset vaults can't use ERC-4626","oldWay":"Custom vault interfaces, each with different UX","newWay":"Standardized async interface works for RWA vaults","impact":"high"},{"problem":"Users don't know when their withdrawal will complete","oldWay":"Vague \"processing\" messages with no timeline","newWay":"Trackable request status with estimated completion","impact":"high"},{"problem":"No standard way to show pending positions","oldWay":"Each vault has custom UI for pending deposits/withdrawals","newWay":"Standardized pending request queries enable consistent UI","impact":"medium"}],"uxPatterns":[{"name":"Request-Wait-Claim Flow","description":"Three-phase withdrawal with clear status at each stage","mockup":"generic/vault-deposit","userFlow":["User submits withdrawal request","System shows pending status with timeline","User can track request progress","Notification when claimable","User claims when ready"]},{"name":"Pending Requests Dashboard","description":"Overview of all pending deposits and withdrawals","mockup":"concept/tx-status","userFlow":["User views dashboard of pending requests","Each request shows progress and timeline","Ready requests have prominent claim button","Completed requests move to history"]},{"name":"Async Deposit Flow","description":"Deposit with delayed share minting","mockup":"generic/vault-deposit","userFlow":["User enters deposit amount","Show clear settlement timeline","User understands it's not instant","Submit request locks funds","Track progress until claimable","Claim shares when ready"]},{"name":"Request Cancellation","description":"Allow users to cancel pending requests when possible","mockup":"concept/tx-status","userFlow":["User wants to cancel pending request","Check if still in cancellation window","Show deadline for cancellation","Confirm cancellation","Funds returned to original state"]}],"uiComponents":[{"name":"RequestProgressStepper","description":"Visual progress through request → wait → claim","states":["requested","processing","claimable","claimed"],"props":["currentStep","estimatedTime","requestId"]},{"name":"PendingRequestCard","description":"Card showing single pending request details","states":["pending","processing","ready","claiming"],"props":["requestType","amount","vault","progress","eta"]},{"name":"SettlementTimeline","description":"Visual timeline of settlement process","states":["upcoming","in-progress","completed"],"props":["steps[]","currentStep","estimatedDates"]},{"name":"ClaimableAlert","description":"Notification that request is ready to claim","states":["ready","claiming","claimed"],"props":["requestId","amount","vaultName","onClaim"]}],"antiPatterns":[{"pattern":"Hiding that deposits/withdrawals are async","why":"Users expect instant fulfillment, feel trapped when delayed","instead":"Show settlement timeline BEFORE they submit request","severity":"critical"},{"pattern":"No progress updates while waiting","why":"Users anxious about their funds, support tickets","instead":"Show percentage progress and estimated time remaining","severity":"high"},{"pattern":"Auto-claiming without user action","why":"User may want control over when shares/assets enter wallet","instead":"Notify user and let them claim when ready","severity":"high"},{"pattern":"Using DeFi-instant language for async vaults","why":"\"Deposit\" implies instant, misleading for async","instead":"Use \"Request Deposit\" or \"Submit Request\" language","severity":"medium"}],"onMonad":[{"aspect":"Transaction Speed","ethereum":"Request submission takes 15+ seconds","monad":"Request confirms in under 1 second","designImplication":"Even async vaults feel snappier at request step"},{"aspect":"Checking Status","ethereum":"Polling for status updates is expensive","monad":"Cheap reads enable real-time status updates","designImplication":"Can show live progress bar updating"},{"aspect":"Claim Transaction","ethereum":"Claiming has typical 15s+ wait","monad":"Instant claim confirmation","designImplication":"Claim feels instant even if request was async"},{"aspect":"Multiple Requests","ethereum":"Managing multiple requests expensive","monad":"Cheap transactions enable request management","designImplication":"Can offer batch claim and request modifications"}],"keyTakeaways":["Async vaults need clear Request → Wait → Claim flow","Show settlement timeline BEFORE user commits","Provide trackable progress with time estimates","Notify users when requests become claimable","On Monad: fast finality makes request/claim steps instant"],"technicalNotes":"ERC-7540 extends ERC-4626 with requestDeposit(), requestRedeem(), pendingDepositRequest(), and claimableDepositRequest() functions. Requests return a request ID that users track. Vaults can implement their own settlement logic - from instant (mimicking sync vaults) to multi-day delays for RWA. The standard maintains share price integrity during settlement."},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-7540","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-7540","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-7540","markdown":"https://www.eipsfordesigners.com/standards/ERC-7540/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-7540/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-7540","official":"https://eips.ethereum.org/EIPS/eip-7540","discussion":"https://ethereum-magicians.org/search?q=ERC-7540"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}