ERC-5453: Endorsement / Generalised Permit
ERC-5453 generalises ERC-2612 (permit for ERC-20) to any function call: a function can require a signed endorsement from a third party (validator, multisig signer, KYC service) before executing. Lets dApps require external approvals without per-method custom signature logic.
Used by:
- Compliance gates — actions need an endorsement from a KYC service.
- Multi-party releases — token releases require multiple signed endorsements.
- Optimistic flows — endorsement bypasses a delay if a trusted endorser signs.
Required Pattern
solidity
function gatedAction(uint256 amount, Endorsement calldata e) external {
require(verifyEndorsement(amount, e), "bad endorsement");
// ... action ...
}
struct Endorsement {
address endorser;
uint256 deadline;
uint8 v; bytes32 r; bytes32 s;
}Neo Equivalent: Native Witness Scopes Per Call
Neo's witness model already provides per-call signature authorisation. The "endorsement" pattern collapses to: the endorser adds their witness to the transaction; the contract's Runtime.CheckWitness(endorser) succeeds for the gated method.
csharp
public static void GatedAction(BigInteger amount, UInt160 endorser)
{
if (!Runtime.CheckWitness(endorser)) throw new Exception("AUTH:NoEndorsement");
if (!IsApprovedEndorser(endorser)) throw new Exception("AUTH:NotApprovedEndorser");
// ... action ...
}| ERC-5453 (Ethereum) | Neo Equivalent | Notes |
|---|---|---|
| Off-chain ECDSA endorsement signature | Tx witness from endorser | Native |
verifyEndorsement(...) per call | Runtime.CheckWitness(endorser) | Cheaper, native |
| Endorser allowlist storage | IsApprovedEndorser(addr) view | App-defined |
| Replay protection via deadline + nonce | Tx nonce + validUntilBlock | Native |
Migration Notes
For Solidity contracts using ERC-5453:
- Drop the typed-data signature parsing — use the endorser's witness on the transaction instead.
- Maintain an off-chain endorser-allowlist (or on-chain registry).
- The endorser signs the transaction (alongside the user); the contract's witness check authenticates both.
