{"id":"ERC-5453","name":"Endorsement for ERC-5750 Methods","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":"ERC-5453 is an endorsement protocol for target methods that adopt ERC-5750's final bytes extraData shape. validSince/validBy, relayer execution, cancellation/replay, and atomicity depend on target/integration; it is not a universal any-function permit.","officialUrl":"https://ercs.ethereum.org/ERCS/erc-5453","lastReviewed":"2026-09-18","lastUpdated":"2026-09-18","hasDetailedContent":true,"content":{"id":"ERC-5453","summary":"ERC-5453 builds on ERC-5750 to let an opted-in contract method accept endorsement data for a relayed call. It is not a universal permit for every function: the target contract must implement the relevant method and final bytes extraData shape, and execution/atomicity remain contract and relayer behavior.","applicability":{"whenToUse":["A target contract opts into the relevant ERC-5750 endorsement method and final bytes extraData shape.","A relayer can validate validSince/validBy and execute the selected method.","The product can show relayer availability and target-specific replay/cancellation behavior."],"whenToAvoid":["The target contract does not implement the relevant ERC-5750-compatible method with a final bytes extraData parameter.","The relayer cannot validate validity windows or provide a reliable execution path.","The flow needs guaranteed atomic multi-call execution."]},"designerTakeaways":["Show the target contract, method, parameters, validity window, and any extraData the selected integration uses.","Use validSince and validBy from the endorsement data; do not invent a universal validUntil or endorsementNonce API.","Make relayer availability and execution results explicit, and do not promise atomicity unless the target implementation provides it."],"problemsSolved":[{"problem":"Gasless patterns only work for token approvals","oldWay":"ERC-2612 permit for ERC-20, but custom solutions for everything else","newWay":"A contract that opts into the ERC-5750 method shape can accept an endorsed call through a relayer","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":"A shared endorsement shape can be displayed by wallets and integrations that support the selected ERC-5750 method.","impact":"high"},{"problem":"Batch operations require multiple signatures","oldWay":"Sign approve, sign stake, sign claim separately","newWay":"A selected integration can collect one endorsement for its supported method and action set","impact":"high"},{"problem":"Endorsements lack expiration and replay protection","oldWay":"Ad-hoc nonce and deadline implementations","newWay":"Endorsement data carries validSince and validBy; replay and cancellation behavior remain target-specific","impact":"medium"}],"uxPatterns":[{"name":"Supported Gasless Action","description":"Gasless action for a target method that accepts ERC-5750 endorsement data.","mockup":"concept/permit-approval","userFlow":["User starts a supported target action","UI shows action details","Indicates this is gasless","Wallet shows endorsement to sign","Relayer submits on-chain","App shows the target implementation's returned result and membership or state change."]},{"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 validSince/validBy and any target-specific replay or cancellation field","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 submits the selected calls according to the target implementation; show each result","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","Shows pending endorsements with validSince and validBy","Uses the target integration's cancellation or nonce mechanism when available","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":"ValidityAndReplayState","description":"Shows validSince/validBy and target-specific replay/cancellation state.","states":["current","pending","expired","unsupported"],"props":["validSince","validBy","replayState","onRefresh"]}],"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":"Using non-spec validity fields or implying indefinite authorization","why":"ERC-5453 endorsement data uses validSince and validBy, and the target method defines the remaining execution boundary.","instead":"Render validSince/validBy from the selected integration and state any contract-specific cancellation behavior.","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"}],"keyTakeaways":["ERC-5453 is an endorsement pattern for methods that opt into the ERC-5750 shape.","Show contract, method, parameters, extraData, and validSince/validBy.","Relayer execution and atomicity are implementation-specific.","Feature-detect the target method before presenting a gasless path."],"technicalNotes":"ERC-5453 is built around ERC-5750. A compliant target method accepts the endorsement data and a final bytes extraData parameter; endorsement validity uses validSince and validBy. The ERC does not define a universal arbitrary-function interface, endorsementNonce(), validUntil, or relayer atomicity. Use the selected contract's cancellation and replay rules.","lastUpdated":"2026-09-18","sources":[{"label":"ERC-5453 official specification","url":"https://ercs.ethereum.org/ERCS/erc-5453","type":"official-spec"}],"lastReviewed":"2026-09-18"},"sources":[{"label":"Official specification","url":"https://ercs.ethereum.org/ERCS/erc-5453","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-5453","type":"discussion"},{"label":"ERC-5453 official specification","url":"https://ercs.ethereum.org/ERCS/erc-5453","type":"official-spec"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-5453","markdown":"https://www.eipsfordesigners.com/standards/ERC-5453/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-5453/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-5453","official":"https://ercs.ethereum.org/ERCS/erc-5453","discussion":"https://ethereum-magicians.org/search?q=ERC-5453"},"freshness":{"lastReviewed":"2026-09-18","lastUpdated":"2026-09-18"}}