# Agent instructions

You are advising on UX and product design for **EIP-5453: Endorsement (Generalized Permit)**.
This document is the authoritative designer guide from EIPs for Designers.

- Treat **MUST NOT** items as hard constraints unless the user explicitly overrides.
- Use the **Vocabulary** section for UI copy; do not use avoided terms.
- Cite the canonical source URL when giving recommendations.
- Use the official specification only for protocol implementation detail, not as primary UX guidance.

---

# EIP-5453: Endorsement (Generalized Permit)

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

| Field | Value |
| --- | --- |
| Status | Last Call |
| Chain | both |
| Category | Transaction Friction |
| Journey stages | Approving & Permissioning |
| Detailed guide | Yes |
| Official specification | https://eips.ethereum.org/EIPS/eip-5453 |
| Discussion search | https://ethereum-magicians.org/search?q=EIP-5453 |

## UX Impact

Generalized permit system — any function can accept off-chain signatures for authorization, enabling multi-sig and threshold signing in one transaction. Design implications: design multi-party approval collection UI, show endorsement status ('2 of 3 signed'), enable off-chain voting/approval workflows. Design decisions: complex signature coordination UX — must make gathering multiple signatures intuitive, handle partial endorsement states, decide how to display endorser identities and validity windows.

## Summary

EIP-5453 is "permit for everything." While ERC-2612 brought gasless approvals to ERC-20, EIP-5453 generalizes this pattern to ANY smart contract function. Users sign a message endorsing an action, and anyone can submit it on-chain. This enables gasless interactions with any protocol—not just tokens. Sign to join a DAO, register a name, or update metadata, all without holding ETH.

## For Designers

- You can standard endorsement pattern works for any contract function.
- You can design UI that delivers sign endorsement.
- You can standard endorsement format all wallets can display clearly.

## Applicability

### When to Use

- Your product addresses: gasless patterns only work for token approvals.
- Your users need ETH for non-financial interactions.
- The flow should deliver: standard endorsement pattern works for any contract function.
- Fee screens need estimates, speed options, and plain-language breakdowns.

### When to Avoid

- Parse and display contract address, function name, all parameters.
- Default to reasonable expiry (1-24 hours), show clearly.
- Clear nonce increment UI with explanation.
- The flow is a single low-risk transfer where batching adds confusion.

## Problems It Solves

### Gasless patterns only work for token approvals

Impact: critical

Old way: ERC-2612 permit for ERC-20, but custom solutions for everything else

New way: Standard endorsement pattern works for any contract function

### Users need ETH for non-financial interactions

Impact: critical

Old way: Joining a DAO, voting, updating profile—all need gas

New way: Sign endorsement, relayer submits, protocol or user covers gas later

### Each protocol implements gasless differently

Impact: high

Old way: Custom meta-transaction formats per protocol

New way: Standard endorsement format all wallets can display clearly

### Batch operations require multiple signatures

Impact: high

Old way: Sign approve, sign stake, sign claim separately

New way: Single endorsement can cover multiple actions

### Endorsements lack expiration and replay protection

Impact: medium

Old way: Ad-hoc nonce and deadline implementations

New way: Built-in nonce and validUntil fields in standard format

## MUST NOT (Anti-Patterns)

- **Not showing the actual function being called** (critical)
  - Why: Users signing blind endorsements is dangerous
  - Instead: Parse and display contract address, function name, all parameters

- **Very long or no expiration on endorsements** (critical)
  - Why: Stale endorsements can be replayed unexpectedly
  - Instead: Default to reasonable expiry (1-24 hours), show clearly

- **No way to cancel pending endorsements** (high)
  - Why: Users trapped with outstanding authorizations
  - Instead: Clear nonce increment UI with explanation

- **Using endorsements when regular tx would be simpler** (medium)
  - Why: Adds complexity and relayer dependency unnecessarily
  - Instead: Use endorsements for gasless/sponsored flows, not everything

- **Hiding relayer details and execution timing** (medium)
  - Why: Users confused when endorsed action doesn't happen immediately
  - Instead: Show relayer status and estimated execution time

## UX Patterns

### Universal Gasless Action

Any protocol interaction via signature

User flow:

- User clicks "Join DAO"
- UI shows action details
- Indicates this is gasless
- Wallet shows endorsement to sign
- Relayer submits on-chain
- User is now a DAO member

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

### Endorsement Signature Display

Clear wallet prompt showing what user is endorsing

User flow:

- Wallet receives endorsement request
- Parses EIP-712 typed data
- Shows human-readable action description
- Displays contract, function, parameters
- Shows expiry and nonce
- User signs or rejects

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

### Batch Endorsement Flow

Multiple actions in one signature

User flow:

- User starts onboarding flow
- Multiple actions bundled together
- Single endorsement signature requested
- Relayer executes all actions atomically
- All onboarding steps complete

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

### Endorsement Status Tracker

Track pending and executed endorsements

User flow:

- User views endorsement history
- Sees pending endorsements with expiry
- Can cancel pending by incrementing nonce
- Sees executed endorsements with timestamps
- Links to transaction details

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

## UI Components

### EndorsementPreview

Human-readable view of what will be endorsed
States: loading, parsed, error
Props: endorsementData, contract, function, params

### GaslessActionButton

CTA that indicates action is signature-only
States: ready, signing, submitted, confirmed, error
Props: label, onSign, isGasless

### RelayerStatus

Shows relayer availability and estimated execution time
States: available, busy, offline
Props: estimatedTime, relayerName

### NonceManager

Display and control endorsement nonce
States: current, incrementing, incremented
Props: nonce, pendingEndorsements, onIncrement

## On Monad

### Relayer Economics

Ethereum: Relayers need significant gas buffer, high costs

Monad: Cheap gas makes relayer operation more viable

Design implication: More apps can offer gasless via endorsements

### Execution Speed

Ethereum: Endorsed action may take 15+ seconds after submission

Monad: Sub-second finality after relayer submits

Design implication: Show "confirming..." briefly, then success

### Nonce Updates

Ethereum: Canceling via nonce increment requires gas and time

Monad: Fast, cheap nonce updates for quick cancellation

Design implication: Cancel button can feel instant

### Batch Endorsements

Ethereum: Large batches may hit gas limits

Monad: Higher throughput allows bigger batches

Design implication: Can bundle more actions in single endorsement

## Key Takeaways

- EIP-5453 = gasless signature pattern for ANY function
- Always show what contract/function/params user is endorsing
- Include reasonable expiry and clear nonce management
- Great for onboarding flows where users lack ETH
- On Monad: fast finality makes endorsed actions feel instant

## Technical Notes

EIP-5453 defines an "Endorsement" as an EIP-712 typed signature authorizing a specific contract call. The endorsement includes: contract address, function selector, encoded parameters, nonce (for replay protection), and validUntil (expiry timestamp). Contracts implementing this standard expose an endorsementNonce() function and accept endorsed calls via a standard interface.

## Official specification (reference only)

https://eips.ethereum.org/EIPS/eip-5453
