How to Check a Transaction Before Signing
Reviewed and updated September 18, 2026 by the SmartCryptoEarnings editorial team · editorial policy
The signing prompt is the last point at which anything can be stopped. Once a transaction is confirmed on-chain there is no reversal, no chargeback and no support queue.
This page is a checklist for that moment. It reduces a specific class of error — authorising something other than what you intended. It cannot make an interaction safe, and no checklist can.
- Step 1Did I start this?An unexpected prompt, or one that appears after a redirect, is rejected without further analysis.
- Step 2Which site produced it?Check the domain shown inside the wallet against the site you deliberately opened.
- Step 3What kind of request is it?Transfer, contract interaction, token approval, or an off-chain signature that grants something later.
- Step 4Then read the fieldsNetwork, destination, asset, amount, contract, spender and approval scope — whichever apply.
Rejecting costs nothing. A legitimate request can always be made again once you understand it.
First: not every signature is a transaction
Fact: wallets produce two materially different things. A transaction is submitted to the network, costs a fee, and changes state. A message signature is produced off-chain, usually costs nothing, and is handed to whoever asked for it.
Off-chain signatures are not harmless. A typed-data signature — the format used for structured requests such as token permits and trading orders — can authorise a later on-chain action by someone else. Because no funds move at the moment you sign, and often no fee is charged, the prompt feels lighter than it is.
| Request type | On-chain when signed? | Main risk |
|---|---|---|
| Transfer transaction | Yes — costs a network fee. | Wrong destination, wrong network, wrong asset or wrong amount. |
| Contract interaction | Yes — costs a network fee. | The contract does something other than what the interface described. |
| Token approval | Yes — costs a network fee. | A spender gains the right to move your tokens later, possibly without limit. |
| Typed-data signature (permit, order) | No — free, off-chain. | Grants an allowance or order that can be redeemed later. Nothing appears on-chain until it is used. |
| Plain 'sign-in' message | No — free, off-chain. | Usually proves address ownership. The risk is being misled about what the text means. |
Absence of an amount in a prompt does not mean nothing of value is being granted. Read the request type first.
Clear signing versus blind signing
Blind signing means approving a request whose contents you cannot meaningfully read. The data a wallet receives is machine-readable calldata: a function selector and a list of encoded values. It is accurate and complete, but it is written for software — an amount may appear as a raw integer with no decimal point or ticker, and an address carries no name.
Wallets bridge that gap by decoding, but only when they recognise the contract. When the protocol is new, the interface has been tampered with, or a hardware device has no reference for the call, the reader is back to hex — and historically that final confirmation step is where several major losses were completed, according to the Ethereum Foundation.
Clear signing is the effort to make that last step readable: 'what you see is what you sign'. Instead of a selector and integers, the wallet shows a sentence describing the action, with amounts formatted and the protocol named.
| Blind signing | Clear signing | |
|---|---|---|
| What is displayed | Function selector and raw encoded values, or an unrecognised-contract warning. | A described action with labelled fields, formatted amounts and a named protocol. |
| What you can verify | That something is being signed. Rarely what it does. | The intent and the key parameters, in units you recognise. |
| Where it commonly appears | Unrecognised or new contracts, complex calldata, some hardware-device screens. | Requests the wallet can decode, or contracts with a published display descriptor. |
Fact, with a limitation: clear signing improves interpretability. It does not make the underlying action safe. A perfectly readable request can still be a request you should decline.
ERC-7730, briefly — and why support varies
ERC-7730 is an Ethereum standard that defines a JSON 'descriptor' format. A protocol publishes a descriptor describing how its function calls and typed messages should be presented to a person, and a wallet that supports the standard uses it to render a readable prompt instead of raw data. The Ethereum Foundation's Trillion Dollar Security initiative helps steward an open registry of these descriptors.
That is all you need as a signer. Two practical consequences: a readable prompt usually means the wallet had a descriptor or its own decoding for that contract, and an unreadable prompt often means it simply had neither — not that the request is malicious.
- Support is not universal. Wallet adoption and descriptor coverage both vary, and many contracts have no descriptor at all.
- Coverage can change between wallets and between versions, so do not assume a readable prompt in one wallet means readable prompts everywhere.
- Readability is not approval. Understanding a request is the precondition for deciding, not the decision.
The pre-signing checklist
Work through whichever items apply to the prompt in front of you. Wallets present these differently, and some fields only appear for some request types.
- Context — did you initiate this? An unexpected prompt, or one that appears after a page reload or a redirect, is reason enough to reject.
- Domain — is the site the one you reached through your own bookmark? Compare the domain shown inside the wallet prompt with the one you intended.
- Network — is the chain the one you meant? A correct-looking address on the wrong network is a routine, unrecoverable mistake.
- Request type — transaction, approval, or off-chain signature? Establish this before reading anything else.
- Destination — for a transfer, compare the full address against the recipient's own deposit screen, including characters in the middle, not just the ends.
- Asset and amount — the exact token, and the exact quantity, including decimals. Confirm the token by contract address if there is any doubt about which one it is.
- Contract — for an interaction, does the contract address match the application's published address? Unknown or freshly deployed contracts deserve more scepticism.
- Spender and scope — for an approval, who is being permitted to move your tokens, and how much? Set a specific amount instead of an unlimited allowance whenever the interface allows.
- Decoded details and simulation — where your wallet shows a decoded action or a preview of balance changes, read it. An outcome that does not match your intention is decisive.
- Warnings — treat any wallet or explorer warning about the domain, contract or address as a stop, not a speed bump.
- Hardware device screen — if you use one, read the device itself. Anything a compromised computer shows can differ from what the device is actually being asked to sign.
- Unhurried decision — if any field is unclear, reject. Rejecting costs nothing; the request can always be made again once you understand it.
Approval scope, in practice
An approval is a standing permission. You are not sending tokens — you are recording on-chain that a particular spender may move up to a certain amount of a particular token from your address, at any time, until you change it.
Unlimited approvals exist because they save fees on repeat use. The trade-off is that the permission outlives the session, the interface and often your memory of granting it. If the spender contract is later compromised, the allowance is what gets used.
- Prefer a specific amount matching the transaction you are actually doing.
- Treat approvals as inventory: review what your address has granted, and revoke what you no longer use.
- An approval to a contract is a permission granted to whoever controls that contract now and in the future.
- Revoking is itself an on-chain transaction with a fee, and it applies per token, per spender, per network.
Wallet security alerts and simulation: useful, not authoritative
Depending on the wallet and the version, you may be shown some combination of the following: trust or reputation signals about a site, phishing warnings on known-bad domains, warnings about a contract or destination address, a simulation previewing expected balance changes, and specific warnings on signature requests such as unlimited approvals or permits.
These are worth having switched on. They catch a real share of ordinary attacks with no effort from you.
Operator claim, not verified fact: vendors describe their own coverage, and accuracy differs between products and releases. A simulation models an expected outcome under current conditions — state can change between preview and execution, and some contract behaviour depends on the caller or the block.
- A missing warning does NOT prove that an interaction is safe. Warning lists are reactive; a domain or contract that nobody has reported yet is simply unreported.
- A warning should not be dismissed because the site looks familiar. Familiarity is what a cloned interface is built to produce, and legitimate front ends do get compromised.
- No wallet vendor is infallible. Treat these features as one input alongside the checklist above, never as the check itself.
- If a simulation shows an outcome that does not match what you intended, that mismatch decides the matter on its own.
Reduce what a single mistake can cost
- Keep long-term holdings in an address that never interacts with applications.
- Use a separate, low-balance address for unfamiliar sites and new tokens.
- Send a small test transfer to any new destination before the full amount.
- Close extra tabs and pop-ups before signing, so you know which page produced the prompt.
- Refuse to sign while rushed, annoyed or pressured — that state is exactly what the attack is designed to produce.
Editorial guidance: this checklist reduces one category of loss. It does not guarantee safety, and a well-built attack can produce a prompt that passes every visible check.
Pre-signing decision flow
Work down the gates in order. Each one has a condition that ends the decision immediately — you do not need to reach the bottom to reject a request. This is editorial safety guidance, not a guarantee: a well-built attack can produce a prompt that passes every visible check.
1. Do I recognise the site or app that produced this prompt?
Check: You opened it deliberately, from a bookmark or an address you already use, and you know which tab the prompt came from.
Stop if: A prompt from a page you did not open, a pop-up, a redirect or a link someone sent is rejected here — no further reading needed.
Verify a crypto website or address2. Is the domain shown inside the wallet the one I expected?
Check: Read the domain in the wallet prompt itself, not the browser tab, and compare it character by character with the site you meant to use.
Stop if: A near-miss spelling, an extra word, a different suffix, or a domain the wallet cannot show at all: reject.
Phishing and wallet drainers3. Can I say, in a sentence, what this request authorises?
Check: Say it out loud: 'this lets X move up to Y of my Z'. If the wallet shows a decoded action, that sentence should match it.
Stop if: Raw calldata you cannot interpret, or a decoded action that does not match your intention, means you are blind signing. Stop here.
4. Is this a transaction or a signature request?
Check: A transaction is submitted on-chain and costs a fee. A typed-data signature is free and off-chain, but can authorise a later transfer by someone else.
Stop if: A free, fee-less prompt is not automatically harmless. If you cannot tell which type it is, do not sign.
5. Which asset, and is it the one I think it is?
Check: Confirm the token by contract address when two tokens share a name or symbol on the same network.
Stop if: An unfamiliar token, or one you never acquired deliberately, is a reason to pause.
How to verify a token contract address6. Which spender or recipient?
Check: For a transfer, compare the full destination address including the middle characters. For an approval, identify the spender contract.
Stop if: Never copy a destination from transaction history — that is exactly how address poisoning is harvested.
Address poisoning and clipboard malware7. What amount or scope am I granting?
Check: Check the exact quantity and decimals, and for approvals the allowance ceiling rather than the transaction size.
Stop if: An amount larger than the action you are performing needs an explanation before you continue.
8. Is this an unlimited approval?
Check: Where the interface allows it, set a specific allowance matching what you are doing right now.
Stop if: Unlimited means the permission outlives the session and the interface, and belongs to whoever controls that contract in future.
Token approvals and revoking access9. Is this an unexpected typed-data request?
Check: Permits and trading orders are legitimate in the right context. The question is whether this context called for one.
Stop if: A structured signature you did not expect, on a page that did not explain it, is rejected.
10. Did the wallet show any warning, or fail to simulate?
Check: Read every phishing, contract, address or signature warning, and compare any simulated balance change with your intention.
Stop if: Do not dismiss a warning because the site is familiar. A missing warning is not clearance either.
11. Still unclear about anything above?
Check: Rejecting costs nothing. A genuine request can be made again in five minutes.
Stop if: If you cannot explain what the request will do, do not sign yet. Close the prompt and find out first.
If you cannot explain what the request will do — do not sign yet.
Frequently Asked Questions
Can signing a free message really cost me money?
Yes, indirectly. Typed-data signatures such as token permits and trading orders authorise an action that someone else submits and pays for later. Nothing moves when you sign, which is precisely what makes them effective.
Does a hardware wallet remove the need for this checklist?
No. It protects the private key from being extracted, but it will faithfully sign whatever you approve on the device. Its value is the independent screen — which only helps if you read it.
Is it safe to approve an unlimited allowance to a well-known application?
It concentrates risk into that contract's future security rather than into today's reputation. A specific allowance limits the exposure to the transaction you are actually making, at the cost of an extra approval next time.
My wallet showed no warning. Does that mean the request is fine?
No. Warning lists are reactive and depend on prior reports. Absence of a warning means nothing has been reported to that provider for that domain or contract yet.
Sources
Spotted something out of date? See our corrections policy and fact-checking policy.
Continue reading
Educational information only. Nothing here is financial, legal or tax advice.