Skip to main content
Crypto Readout

Crypto markets, protocols and policy

Why a token permit signature fails

A permit fails when its signed fields, nonce, deadline or token domain do not match the contract’s checks; compare those inputs before signing again on the same chain.

By Crypto Readout Editorial3 min read#bb717f

Cover artwork for Why a token permit signature fails

A token permit signature fails when the token contract cannot recover the owner from a signature that matches its required fields and current state. The wallet first signs a typed message; a caller submits it to the token contract; the contract checks the message, verifies the signer, then records an allowance and advances the owner’s nonce. A mismatch at any of those checks makes the permit call revert.

What does a permit signature approve?

Under the common ERC-2612 pattern, the signed message names the token owner, spender, allowance value, nonce and deadline. Its EIP-712 domain also identifies the token contract and chain. The wallet signs this structured data off-chain, so the owner does not need to send the approval transaction themselves. A relayer or application can submit the signature, but the token contract still decides whether it is valid.

This lets an application combine an approval with a later action, such as a token swap, instead of asking for a separate on-chain approval first. For the separate question of how a Base swap handles token trades and liquidity, see how a Base swap routes token trades. A permit grants an allowance; it does not itself move tokens or guarantee that the swap will succeed.

Which checks make a permit revert?

The contract compares the submitted signature with the exact data it expects. A correct-looking signature can still fail if one field changed after signing or if the wallet used a different domain. The main checks are:

  • Owner and signer: the recovered signing address must be the stated owner, which cannot be the zero address.
  • Spender and value: both must match the signed message exactly. A changed spender or allowance means a different approval.
  • Nonce: the signed nonce must equal the owner’s current nonce. A previously used signature is stale because a successful permit advances that nonce.
  • Deadline and domain: the deadline must not have passed, and the token contract and chain must match the domain used to sign.

The domain is like the address on a letter: it helps bind the signature to its intended destination. A signature for one token contract or chain should not be treated as an approval for another.

How can you diagnose a failed permit?

Start with the token’s actual permit implementation. ERC-2612 is common, but contracts may use a different permit format, field name or signature convention. A wallet or application that builds the wrong message cannot produce a signature the contract will accept, even if the wallet reports that signing succeeded.

Then compare the signed owner, spender, value, nonce, deadline, chain ID and verifying contract with the values being submitted. Check the owner’s current nonce on the token contract: another successful permit can invalidate an older signature. If the deadline has expired, request a fresh signature with a valid deadline. If the domain or message fields differ, reconnect to the intended chain and have the application build the message again from the correct token address.

What should you do before signing again?

Confirm that the token supports the permit method the application is requesting, and inspect the wallet prompt for the spender and allowance. Do not sign a message whose purpose or spender is unclear. For a repeatable failure, capture the token address, chain, revert reason and submitted fields; those details help distinguish a stale nonce from a wrong domain or incompatible permit format.

A failed permit does not create the allowance through that call. The practical fix is to correct the mismatched input or use the token’s supported approval path. When the fields, domain, nonce and deadline all line up, the permit can set the allowance; the application still has to submit the later action that uses it.