# ERC-4626: Tokenized Vaults

Source: https://www.eipsfordesigners.com/standards/ERC-4626
Agent brief: https://www.eipsfordesigners.com/standards/ERC-4626/agent.md
Machine-readable JSON: https://www.eipsfordesigners.com/api/standards/ERC-4626
Last reviewed: 2026-04-05
Last updated: 2026-04-05

| Field | Value |
| --- | --- |
| Status | Final |
| Chain | both |
| Category | DeFi Patterns |
| Journey stages | Asset Management |
| Detailed guide | Yes |
| Official specification | https://eips.ethereum.org/EIPS/eip-4626 |
| Discussion search | https://ethereum-magicians.org/search?q=ERC-4626 |

## UX Impact

Users deposit assets into yield-generating vaults and receive shares representing their proportional ownership — standardized DeFi yield. Design implications: show both share balance AND underlying asset value side-by-side, display real-time APY/yield earned, use previewDeposit/previewRedeem to show exact conversion rates before transactions, indicate deposit/withdrawal limits via maxDeposit/maxWithdraw, show fees transparently (entry/exit/management). Design decisions: whether to default UI to 'assets' or 'shares' view, how to represent slippage between preview and actual execution, whether to show historical yield vs projected yield, handling vaults with transfer restrictions.

## Summary

ERC-4626 standardizes yield-bearing vaults. Deposit tokens, receive shares that grow in value. Whether it's Aave, Yearn, or Compound — same interface: deposit(), withdraw(), shares, assets. Users learn one pattern and can use any vault. Wallets can show all vault positions uniformly.

## For Designers

- You can show vault value in assets users understand, not opaque share units.
- You can reuse one deposit and withdraw flow across Aave, Yearn, and similar vaults.
- You can label fees and post-deposit value so yield feels earned, not magical.

## Applicability

### When to Use

- Users deposit into yield vaults and need share-to-asset value clarity.
- Your product lists vault positions from multiple protocols with one pattern.
- Deposit and withdraw previews must show expected assets after fees.

### When to Avoid

- Yield is informational only with no deposit or withdraw actions.
- Each vault uses a bespoke API you cannot normalize to ERC-4626.
- Users never see share balances or underlying asset equivalence.

## Problems It Solves

### Every DeFi protocol has different vault interface

Impact: critical

Old way: Aave: deposit(), Yearn: stake(), Compound: mint() — all different

New way: Standard deposit/withdraw interface everywhere

### Hard to calculate actual value of vault shares

Impact: high

Old way: Each vault has custom math for share→asset conversion

New way: convertToAssets(shares) and convertToShares(assets) standard

### Can't aggregate vault positions across protocols

Impact: high

Old way: Custom integration for each vault type

New way: One interface queries any ERC-4626 vault

## Anti-Patterns

### Only showing share balance

Severity: critical

"952.38 yvUSDC" means nothing without conversion

Instead: Always show asset value: "952.38 yvUSDC (~$1,050)"

### Hiding withdrawal fees/slippage

Severity: critical

User expects $1000, gets $950

Instead: Show expected output AFTER fees clearly

### Not explaining share price changes

Severity: high

Users confused when share count doesn't match deposits

Instead: Explain: "You deposited $1000, now worth $1050"

### Not showing historical earnings

Severity: medium

Users can't see if vault is performing well

Instead: Track and display total earned over time

## Design Decisions

### Do you show shares, assets, or both?

Recommendation: Lead with asset value (USDC); expose share count in advanced details.

Rationale: Users think in deposits and dollar value, not internal share units.

### How is APY presented?

Recommendation: Label as estimated APY with source and update time.

Rationale: Vault yields change; over-precise APY feels guaranteed.

### What does withdraw preview include?

Recommendation: Show assets out, shares burned, and any delay or fee.

Rationale: Withdrawals can be async or penalized; surprises cause support load.

### How do you handle insolvency or pause?

Recommendation: Block deposit/withdraw with protocol-specific reason, not generic errors.

Rationale: Vault pauses are common; users need to know funds are safe but gated.

## States to Design

### Deposit preview

Trigger: User enters deposit amount.

User need: Know expected shares and post-deposit balance.

Design response: Show assets in, estimated shares, and current exchange rate.

### Withdraw preview

Trigger: User enters withdraw amount.

User need: Know assets received and timing.

Design response: Assets out, shares burned, cooldown if applicable.

### Position accruing

Trigger: Share price increases over time.

User need: See earnings without manual refresh.

Design response: Live asset value; optional earned since deposit metric.

### Insufficient liquidity

Trigger: Vault cannot fulfill full withdraw instantly.

User need: Queue or partial withdraw path.

Design response: Explain delay, queue position, or max instant amount.

### Vault paused

Trigger: Protocol pauses deposits or withdrawals.

User need: Understand funds are locked temporarily.

Design response: Banner with reason link; disable actions with explanation.

## UI Components

### VaultCard

Summary of a vault position
States: no-position, deposited, earning, losing
Props: vault, shares, assets, apy

### ShareAssetConverter

Input that converts between shares and assets
States: shares-mode, assets-mode
Props: shares, assets, exchangeRate, onChange

### APYIndicator

Shows vault annual percentage yield
States: positive, negative, loading
Props: apy, timeframe

### EarningsDisplay

Shows profit/loss vs deposited amount
States: profit, loss, break-even
Props: deposited, currentValue, earned

## On Monad

### Deposit Confirmation

Ethereum: Deposit takes 12+ seconds

Monad: Sub-second deposit confirmation

Design implication: Position updates instantly

### Yield Updates

Ethereum: Yield accrues per block (12s)

Monad: More frequent yield updates

Design implication: Can show real-time yield accumulation

### Reserve Consideration

Ethereum: Can deposit entire balance

Monad: 10 MON reserve required for async execution safety

Design implication: MAX deposit should subtract reserve

## Key Takeaways

- ERC-4626 = standard vault interface
- ALWAYS show asset value, not just share balance
- Provide both deposit-by-assets and withdraw-by-assets
- Show earnings vs deposited amount clearly
- Display fees/slippage before withdrawal

## UX Patterns

### Vault Deposit

Standard deposit flow with share preview

User flow:

- User enters deposit amount
- App calls convertToShares(assets)
- Shows expected share amount
- Displays current exchange rate
- User confirms deposit

Mockup registry key: `generic/vault-deposit` (React UI on the live standard page).

### Vault Position

Show current position with earnings

User flow:

- User views positions
- App queries share balances
- Calls convertToAssets for value
- Calculates earnings vs deposit
- Shows profit/loss

Mockup registry key: `generic/vault-position` (React UI on the live standard page).

### Withdraw Flow

Redeem shares for underlying assets

User flow:

- User chooses withdraw mode
- Enter shares OR assets amount
- App calculates other side
- Shows shares to burn
- User confirms withdrawal

Mockup registry key: `generic/vault-position` (React UI on the live standard page).

## Technical Notes

ERC-4626 extends ERC-20 (shares are tokens). Key functions: deposit(assets, receiver), mint(shares, receiver), withdraw(assets, receiver, owner), redeem(shares, receiver, owner). View functions: convertToShares, convertToAssets, previewDeposit, previewMint, previewWithdraw, previewRedeem, maxDeposit, maxMint, maxWithdraw, maxRedeem.
