What is EIP-712?
EIP-712 is a standard for signing typed, structured data, so a wallet can show what each part of a request means. The EIP-712EIP-712 is a standard for signing structured messages, so your wallet can show readable fields instead of an opaque string.See it in the glossaryRead the explainer text describes the problem it solves: signed messages are usually opaque hex strings, so users see little about what they approve.
A SignatureA signature is proof, made with your private key, that you approved a specific message or transaction.See it in the glossaryRead the explainer is proof, made with your Private keyA private key is the secret number that proves you control a wallet, and anyone who has it can spend your funds.See it in the glossary, that you approved exact content. Anyone can check it against your address, and nobody can forge it without the key. A signature costs no fee because nothing reaches the chain until someone submits it. That differs from a TransactionA transaction is a signed instruction that changes something on the blockchain, such as sending ETH or calling a contract.See it in the glossary, which goes onchain and costs a fee.
A signature is like a signature on paper: it is only as safe as the page in front of you. If you sign something you cannot read, you cannot know what you agreed to.
A typed request has two parts. The first is the data, such as a spender and an amount. The second is a “domain” that says who the signature is for: the app or token name, a version, the chain and the contract that checks it.
The domain ties your signature to one place, so a signature made for one contract on one chain should not work elsewhere. The standard leaves any further replay protection to each app.
What is a permit (EIP-2612)?
A permit is an approval made by signature. Instead of sending an approve transaction, you sign a permit and anyone can submit it to the token. The token then sets the allowance as if you had approved it yourself.
In what is ERC-20, an ApprovalAn approval is the action of giving an app an allowance, so it can move a set amount of your tokens.See it in the glossaryRead the explainer sets an AllowanceAn allowance is the amount of your tokens that an app is permitted to move on your behalf.See it in the glossaryRead the explainer, the amount an app may spend. A PermitA permit is an approval you grant by signing a message, with no transaction and no gas fee from you.See it in the glossaryRead the explainer sets the same allowance. Only the route differs.
With a plain approval you send one transaction to approve and a second to use the app. With a permit the app bundles your signature into its own transaction, so you do one step.
A permit has five fields: owner, spender, value, nonce and deadline. The token keeps the nonce for each owner and raises it by one each time a permit is used. The same signature therefore cannot be used twice.
Not every token supports permits. A token must add the functions permit, nonces and DOMAIN_SEPARATOR on top of ERC-20, and USDC does. Permit2 is a separate shared contract that gives other tokens a similar signed flow.
Why signing can be risky
A permit is risky because the signature alone grants access. You send no transaction, see no fee prompt and get no onchain confirmation. The only checkpoint is the window in your wallet.
That makes a signature request easy for a scam to imitate. A fake site can ask for a permit that names the attacker as spender. If you sign, the attacker submits it and spends up to the value you signed. The EIP states that anyone can submit a signed permit.
Time adds to the risk. A signed permit works until its deadline, so an attacker can wait. Setting your approval to zero later does not remove the permit, because submitting it sets the allowance again.
Most signature requests are ordinary. The goal is to spend ten seconds reading the right lines.
How to read a signature request
Read three lines in a permit: who can spend, how much, and until when. If any of them is not what you expected, reject the request. Rejecting costs nothing.
- Spender. Check that it is the app you opened, against the address the app documents. Stop if you do not recognise it.
- Value. Check that it matches what you are doing. A swap of 100 tokens should not ask for a huge number, and a value near the maximum means unlimited.
- Deadline. A short deadline limits the damage. A date far in the future leaves the permit open for a long time.
- The site. Check that you arrived from a link you typed or a bookmark. Treat requests from unexpected messages or pop-ups with extra care.
- What the wallet shows. If it shows only a hash or hex with no named fields, you cannot verify the content. Do not sign it.
If you signed something by mistake, check your approvals soon after. A submitted permit shows up as an allowance. An unsubmitted permit does not show up. It stops only when its deadline passes or when a permit of your own uses up its nonce, as EIP-2612 defines. If you are unsure, move valuables to a fresh wallet.
See it on a real contract
USDC supports permits, and its signatures are tied to a domain with a name and a version. The card reads both from the live contract, and the Token Allowance Checker shows the allowance a permit would set.
Token name and version your wallet should show in a USDC permit
Reading live from Ethereum
Check an allowance in the Token Allowance Checker
Show the query
usdc.name() + ", version " + usdc.version()Common mix-ups
-
“Signing is free, so it cannot cost me anything.” The signature has no fee, but it can grant an allowance. What you sign decides the risk, not what you pay.
-
“A signature is just a login.” Sometimes it is. A login message and a permit both ask for a signature, so read what the request says.
-
“Revoking my approval cancels a permit I signed.” It does not. An unused permit can be submitted until its deadline and sets the allowance again.
-
“Permit and Permit2 are the same thing.” They are not. A permit is built into a token that supports EIP-2612. Permit2 is a separate shared contract that works with ordinary ERC-20 tokens.
Summary
- A signature costs no fee but can still grant access. A permit (EIP-2612) approves a token spender with a signature alone, with no transaction from you.
- EIP-712 lets a wallet show a request as readable fields. Before you sign, check three lines: the spender, the value and the deadline.
- An unused permit stays valid until its deadline, and setting an approval to zero does not cancel it. Reject any request you cannot read.
For developers
One evmquery expression can read an owner’s allowance and permit nonce from a token in a single request. The Permit2 allowance guide shows the query pattern, and the specs are EIP-712 and EIP-2612.