How to Read a Wallet Signature Request Before You Sign It

Laptop showing a browser wallet confirmation dialog with a warning icon, hand paused on the trackpad

Quick answer: Your wallet asks you to do two different things, and it does not always make the difference obvious. A transaction changes something on the blockchain immediately and costs gas. A signature request is an off-chain message that costs nothing, leaves no on-chain record, and can hand someone a permission they use hours or weeks later. That second category is where most NFT theft now happens. Before approving any request, check three things: which site is asking, which contract address the message names, and what the message actually authorizes. Most modern prompts use the EIP-712 standard, so your wallet can show you readable fields instead of a hex blob. Read those fields. A request for a permission you did not intend to grant, or a hex string your wallet cannot decode at all, is a reason to reject the request and close the tab.

The signature prompt is the last checkpoint before a loss becomes permanent, and it is the one most people click through fastest.

A transaction and a signature are not the same thing

When a site wants something from your wallet, it makes one of two kinds of request.

The first is a transaction. It executes on the blockchain, it costs gas, and it produces a permanent record you can look up afterwards. Minting an NFT, transferring one, and revoking an approval are all transactions.

The second is a signature. Your wallet uses your private key to sign a piece of data and hands the result back to the site. Nothing touches the blockchain. There is no gas fee and no transaction hash to look up. From your wallet’s balance history, nothing happened at all.

That difference matters because a signature is not always harmless. Some signed messages are just proof that you control an address. Others are standing instructions that a smart contract will honor later, whenever someone chooses to submit them. The wallet interface for both looks similar, and the free one arouses less suspicion, which is exactly why attackers prefer it.

According to Scam Sniffer’s 2025 phishing report, wallet drainer phishing took $83.85 million from 106,106 victims during 2025. That was a steep drop from $494 million and roughly 332,000 wallets in 2024, but the mechanism did not change. The report’s largest single loss for the year was $6.5 million from one Permit signature.

The signature types you will actually see

Your wallet does not usually name the method it is being asked to use, but the prompt looks different for each, and learning the three shapes takes about five minutes.

personal_sign

This is a plain text message signed with your key. The classic use is logging in. A site generates a message like “Sign in to example.com, nonce 4f2a” and asks you to sign it to prove you own the address, replacing a password.

Your wallet shows you the full text, because that is all there is. If you can read the message and it says nothing about tokens, approvals, spending, or transfers, signing it moves no assets. This is the safest category, and it is what MetaMask’s documentation recommends for readable messages that do not need on-chain processing.

The failure mode is a message written to look like a login while containing an authorization in the wording, so read the text rather than glancing at it.

eth_signTypedData_v4

This is structured data following EIP-712, the Ethereum standard for typed data hashing and signing. It is what NFT marketplaces use for listings and offers, and what token contracts use for gasless approvals through Permit and Permit2.

Instead of one text blob, the payload has named fields with types, plus a domain section that ties the signature to a specific contract, chain, and application. Your wallet can render that as a list you can actually read. MetaMask’s docs call it the recommended method for most cases, and the readability is the reason.

Nearly every high-value signature you encounter will be this type, so it is the one worth learning to read properly.

eth_sign

This method signs arbitrary data with no readable structure. Your wallet cannot tell you what it means, so you would be approving a hex string on faith.

MetaMask deprecated it under MIP-3, disabled it by default, and removed it during 2024. A site asking you to enable an obscure advanced setting so it can request this is not asking for a convenience. Refuse and leave.

Man at a desk carefully reading a wallet signature prompt on his laptop screen

Reading an EIP-712 prompt field by field

When a typed data request appears, four things are worth checking in order.

The requesting site

Your wallet displays the domain making the request. Confirm it matches the site you typed or reached through a bookmark, character for character. Signature phishing usually starts with a lookalike domain, so a prompt that arrives from a link in a Discord message deserves more scrutiny than one you triggered by clicking a button yourself.

The verifying contract

The EIP-712 domain includes a verifyingContract address, which is the contract that will accept this signature. If you are listing on a marketplace you use often, that address should be the same one you saw last time. An unfamiliar address in this field on a familiar site is a genuine warning.

The permission being granted

Look for fields named spender, operator, holder, or allowed. These name the party receiving power over your assets. A Permit signature with a spender you do not recognize and a value set to an enormous number is a drain waiting to be executed.

In ERC-721, the standard behind most NFTs, the equivalent power is granted by setApprovalForAll, which the specification describes as enabling an operator to manage all of the caller’s assets. Broad by design, and worth pausing over whether it arrives as a transaction or inside a signed message.

The expiry

Many typed messages carry a deadline, expiry, or validUntil timestamp. A legitimate marketplace listing expires in days or weeks. A deadline decades away means the signature stays usable indefinitely.

If your wallet shows a hash rather than fields, the site sent data your wallet cannot decode. Treat that as a reason to stop rather than a display quirk.

Why a gasless signature can be worse than a transaction

A malicious transaction is at least visible. It appears in your history, block explorers index it, and you have a chance to notice.

A malicious signature produces none of that. The attacker receives the signed message and holds it. Nothing appears on-chain, your balances look correct, and there is no notification. They can submit it whenever they choose, including after you have stopped thinking about the site.

There is also nothing to cancel. A pending transaction can be replaced with a higher gas fee. A signature you already handed over cannot be recalled. Your only remedy is removing the underlying permission before it gets used, which means revoking the relevant approval on-chain. Our guide on how to revoke NFT wallet approvals covers how to find and clear standing permissions with Etherscan’s Token Approval Checker or Revoke.cash.

Red flags at the prompt

Some patterns justify rejecting a request without further investigation.

The prompt appeared without you asking for it. You connected a wallet to check a collection and a signature request opened by itself. Legitimate signature requests follow an action you took.

The reason given is urgency. Claim windows closing, migrations that must happen today, and airdrops expiring in an hour exist to stop you reading the fields. Attackers also time campaigns to coincide with real platform events, when an unusual prompt has a plausible explanation.

The stated purpose does not match the content. A site says it needs a signature to verify wallet ownership, and the payload contains a spender address and a token amount. Verification does not require either.

The site asks twice after a rejection. Repeated prompts after you decline are pressure, not a technical error.

You cannot read what you are signing. Whatever the site claims, an undecodable payload is a request to trust a stranger with your key.

Our guide on how to spot a fake or scam NFT project covers the earlier warning signs, before a prompt ever appears.

Hands holding a hardware wallet device next to a laptop on a desk

Hardware wallets and blind signing

A hardware wallet keeps your private key off your computer, which defeats malware that tries to steal the key. It does not stop you authorizing a transfer yourself.

The gap is blind signing. Where a device cannot interpret the data it receives, it shows a hash and asks you to confirm. You approve something the screen cannot describe, and the hardware protection buys you nothing at that moment.

Ledger’s clear signing work addresses this by having applications publish metadata that lets the device display what a call actually does, standardized as ERC-7730. Support depends on the application having submitted a descriptor, so blind signing prompts still appear. When one does, the safe response is the same as in software: do not approve data your device cannot explain. If you are still deciding between device types, our comparison of hardware and software wallets covers the tradeoffs.

If you think you already signed something

Assume the signature is usable and act on that basis.

Check your approvals first, on every chain where you hold assets, and revoke anything you do not recognize. That closes the permission the signature depends on. If valuable NFTs sit in the affected wallet, move them to an address that has never touched the site in question, and move them before revoking if gas conditions make the revoke slow to confirm.

Do not search for recovery services. Accounts offering to reverse the theft for a fee are a second attack aimed at people who just lost something. No service can undo a signed authorization.

Common questions

Does signing a message cost gas?

No. Signing is done locally by your wallet and never reaches the blockchain, so there is no fee and no transaction hash. That is precisely why a malicious signature is harder to notice than a malicious transaction: nothing shows up in your history until someone submits the signed message on-chain later.

Can a signature move my NFTs on its own?

Not by itself. A signature becomes dangerous when a contract will accept it as authorization, either because it grants an operator permission or because it authorizes a trade your wallet already has approvals for. The signature is the instruction, and the existing approval is what makes the instruction executable.

Is a signature request safe if the site looks legitimate?

Appearance is not evidence. Lookalike domains and compromised project accounts both produce prompts that arrive in a plausible context. Check the domain and the contract address in the prompt itself rather than judging the page around it.

The habit worth building

Reading a signature prompt takes about fifteen seconds once you know where to look: the domain asking, the contract named, the permission granted, and the expiry. Most requests pass that check easily.

The ones that fail tend to fail obviously, which is the useful part. Attackers rely on the prompt being skipped rather than examined, because the fields would give the attempt away. Slowing down at the one screen that stands between a click and an irreversible authorization costs almost nothing and removes most of the risk.