# ERC-7751: Wrapping of Bubbled Up Reverts

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

| Field | Value |
| --- | --- |
| Status | Draft |
| Chain | both |
| Category | Comprehension & Display |
| Journey stages | Reading & Understanding |
| Detailed guide | Yes |
| Official specification | https://eips.ethereum.org/EIPS/eip-7751 |
| Discussion search | https://ethereum-magicians.org/search?q=ERC-7751 |

## UX Impact

Nested contract call failures show full error chain — see exactly which contract in a multi-hop transaction failed and why. Design implications: display error stack traces for complex transactions, show failing contract address and function, preserve original error context through wrapping, visualize call hierarchy. Design decisions: depth of error chain to display (can get verbose), technical vs simplified error presentation, whether to show intermediate contract addresses, integration with block explorers for debugging. Complements ERC-6093 for the same Blanket Warnings problem — preserves error context through nested contract calls so users see 'Swap failed: insufficient liquidity' instead of generic reverts.

## Summary

ERC-7751 standardizes wrapping of error types, enabling nested errors with full context about what went wrong and why. Instead of "execution reverted", users see "Swap failed: insufficient liquidity in pool (needed 100 ETH, available 50 ETH)". Errors chain together to tell the complete story.

## For Designers

- You can design UI that delivers full error chain: "Swap failed → Pool error → Insufficient liquidity".
- You can design UI that delivers "Approval expired 2 minutes ago, please approve again".
- You can design UI that delivers error shows exact step that failed and why.

## Applicability

### When to Use

- Your product addresses: error messages lose context as they propagate.
- Your users can't take action on vague errors.
- The flow should deliver: full error chain: "Swap failed → Pool error → Insufficient liquidity".
- You are designing a contextual error display experience with visible states and recovery paths.

### When to Avoid

- Translate to human-readable: "Insufficient liquidity".
- Show friendly message + expandable technical details.
- Parse error type, suggest specific resolution.
- Users never see addresses, amounts, or signing payloads in your UI.

## Problems It Solves

### Error messages lose context as they propagate

Impact: critical

Old way: "execution reverted" - no idea what failed or why

New way: Full error chain: "Swap failed → Pool error → Insufficient liquidity"

### Users can't take action on vague errors

Impact: critical

Old way: "Transaction failed" - what should user do?

New way: "Approval expired 2 minutes ago - please approve again"

### Debugging requires guessing what went wrong

Impact: high

Old way: Trial and error, check each step manually

New way: Error shows exact step that failed and why

### Different contracts return different error formats

Impact: medium

Old way: Parse error differently for each protocol

New way: Standard wrapping format enables consistent parsing

## Anti-Patterns

### Showing raw error selector codes

Severity: critical

"0x4e487b71" means nothing to users

Instead: Translate to human-readable: "Insufficient liquidity"

### Hiding error details entirely

Severity: high

Power users need details for debugging

Instead: Show friendly message + expandable technical details

### No suggested actions

Severity: high

User sees error but doesn't know what to do

Instead: Parse error type, suggest specific resolution

### Losing nested error context

Severity: medium

Root cause hidden, only surface error shown

Instead: Preserve and display full error chain

## UI Components

### ErrorChainDisplay

Nested display of wrapped errors
States: collapsed, expanded, highlighted
Props: errors[], onExpand, highlightRoot

### ActionableError

Error with suggested resolution action
States: error, suggesting, resolving
Props: error, suggestion, action, onAction

### BatchStepIndicator

Show progress through batch with failure point
States: pending, success, failed, skipped
Props: steps[], failedStep, errorDetail

### TechnicalErrorView

Developer-focused error details
States: collapsed, expanded
Props: error, contract, selector, params

## On Monad

### Error Introspection

Ethereum: Limited error detail available

Monad: Enhanced error introspection in EVM

Design implication: Can show more detailed error context on Monad

### Retry Speed

Ethereum: Retry takes 15+ seconds to confirm

Monad: Sub-second retry confirmation

Design implication: Retry buttons can show instant feedback

### Simulation

Ethereum: Simulation to check errors is expensive

Monad: Cheap simulation for pre-flight checks

Design implication: Can simulate before sending, catch errors earlier

### Reserve-Related Errors

Ethereum: N/A

Monad: New error type: InsufficientSpendableBalance

Design implication: Handle Monad-specific reserve errors gracefully

## Key Takeaways

- Wrapped errors tell the complete story of what went wrong
- Always translate technical errors to human-readable messages
- Provide specific, actionable suggestions based on error type
- Show error chain hierarchy for transparency
- On Monad: better error introspection + reserve balance errors

## UX Patterns

### Contextual Error Display

Show error with full context chain

User flow:

- Transaction fails
- Parse wrapped error chain
- Display hierarchy of what failed
- Extract actionable suggestion
- Offer relevant next steps

Mockup registry key: `concept/verify-safety` (React UI on the live standard page).

### Approval Expiry Error

Handle common approval-related failures

User flow:

- Swap fails with approval error
- Parse to find root cause
- Show specific approval issue
- One-click re-approve action
- Suggest prevention for future

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

### Multi-Step Error Tracing

Show which step in a batch failed

User flow:

- Multi-step batch fails mid-way
- Identify which step failed
- Show completed vs failed vs skipped
- Explain root cause from error
- Offer fix for specific failure

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

### Developer Debug View

Technical error details for power users

User flow:

- User clicks "Show details"
- Display full technical error chain
- Show contract addresses and selectors
- Allow copy for bug reports
- Link to transaction explorer

Mockup registry key: `concept/verify-safety` (React UI on the live standard page).

## Technical Notes

ERC-7751 defines a WrappedError structure that contains an inner error plus context. Contracts use try/catch to wrap lower-level errors with higher-level context. The standard defines encoding/decoding for error chains. Frontends parse the chain to extract the root cause and each layer of context.
