{"id":"EIP-5453","name":"Endorsement (Generalized Permit)","status":"Last Call","chain":"both","category":{"id":"transaction-friction","name":"Transaction Friction","description":"Reducing clicks, signatures, and mental overhead"},"journeyStages":[{"id":"approving","name":"Approving & Permissioning","description":"Granting permissions for actions"}],"uxImpact":"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.","hasDetailedContent":true,"content":{"id":"EIP-5453","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.","applicability":{"whenToUse":["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."],"whenToAvoid":["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."]},"designerTakeaways":["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."],"problemsSolved":[{"problem":"Gasless patterns only work for token approvals","oldWay":"ERC-2612 permit for ERC-20, but custom solutions for everything else","newWay":"Standard endorsement pattern works for any contract function","impact":"critical"},{"problem":"Users need ETH for non-financial interactions","oldWay":"Joining a DAO, voting, updating profile—all need gas","newWay":"Sign endorsement, relayer submits, protocol or user covers gas later","impact":"critical"},{"problem":"Each protocol implements gasless differently","oldWay":"Custom meta-transaction formats per protocol","newWay":"Standard endorsement format all wallets can display clearly","impact":"high"},{"problem":"Batch operations require multiple signatures","oldWay":"Sign approve, sign stake, sign claim separately","newWay":"Single endorsement can cover multiple actions","impact":"high"},{"problem":"Endorsements lack expiration and replay protection","oldWay":"Ad-hoc nonce and deadline implementations","newWay":"Built-in nonce and validUntil fields in standard format","impact":"medium"}],"uxPatterns":[{"name":"Universal Gasless Action","description":"Any protocol interaction via signature","mockup":"concept/permit-approval","userFlow":["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"]},{"name":"Endorsement Signature Display","description":"Clear wallet prompt showing what user is endorsing","mockup":"concept/permit-approval","userFlow":["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"]},{"name":"Batch Endorsement Flow","description":"Multiple actions in one signature","mockup":"concept/permit-approval","userFlow":["User starts onboarding flow","Multiple actions bundled together","Single endorsement signature requested","Relayer executes all actions atomically","All onboarding steps complete"]},{"name":"Endorsement Status Tracker","description":"Track pending and executed endorsements","mockup":"concept/permit-approval","userFlow":["User views endorsement history","Sees pending endorsements with expiry","Can cancel pending by incrementing nonce","Sees executed endorsements with timestamps","Links to transaction details"]}],"uiComponents":[{"name":"EndorsementPreview","description":"Human-readable view of what will be endorsed","states":["loading","parsed","error"],"props":["endorsementData","contract","function","params"]},{"name":"GaslessActionButton","description":"CTA that indicates action is signature-only","states":["ready","signing","submitted","confirmed","error"],"props":["label","onSign","isGasless"]},{"name":"RelayerStatus","description":"Shows relayer availability and estimated execution time","states":["available","busy","offline"],"props":["estimatedTime","relayerName"]},{"name":"NonceManager","description":"Display and control endorsement nonce","states":["current","incrementing","incremented"],"props":["nonce","pendingEndorsements","onIncrement"]}],"antiPatterns":[{"pattern":"Not showing the actual function being called","why":"Users signing blind endorsements is dangerous","instead":"Parse and display contract address, function name, all parameters","severity":"critical"},{"pattern":"Very long or no expiration on endorsements","why":"Stale endorsements can be replayed unexpectedly","instead":"Default to reasonable expiry (1-24 hours), show clearly","severity":"critical"},{"pattern":"No way to cancel pending endorsements","why":"Users trapped with outstanding authorizations","instead":"Clear nonce increment UI with explanation","severity":"high"},{"pattern":"Using endorsements when regular tx would be simpler","why":"Adds complexity and relayer dependency unnecessarily","instead":"Use endorsements for gasless/sponsored flows, not everything","severity":"medium"},{"pattern":"Hiding relayer details and execution timing","why":"Users confused when endorsed action doesn't happen immediately","instead":"Show relayer status and estimated execution time","severity":"medium"}],"onMonad":[{"aspect":"Relayer Economics","ethereum":"Relayers need significant gas buffer, high costs","monad":"Cheap gas makes relayer operation more viable","designImplication":"More apps can offer gasless via endorsements"},{"aspect":"Execution Speed","ethereum":"Endorsed action may take 15+ seconds after submission","monad":"Sub-second finality after relayer submits","designImplication":"Show \"confirming...\" briefly, then success"},{"aspect":"Nonce Updates","ethereum":"Canceling via nonce increment requires gas and time","monad":"Fast, cheap nonce updates for quick cancellation","designImplication":"Cancel button can feel instant"},{"aspect":"Batch Endorsements","ethereum":"Large batches may hit gas limits","monad":"Higher throughput allows bigger batches","designImplication":"Can bundle more actions in single endorsement"}],"keyTakeaways":["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"],"technicalNotes":"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."},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-5453","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=EIP-5453","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/EIP-5453","markdown":"https://www.eipsfordesigners.com/standards/EIP-5453/content.md","agent":"https://www.eipsfordesigners.com/standards/EIP-5453/agent.md","api":"https://www.eipsfordesigners.com/api/standards/EIP-5453","official":"https://eips.ethereum.org/EIPS/eip-5453","discussion":"https://ethereum-magicians.org/search?q=EIP-5453"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}