What is blind signing?
Approving a transaction whose contents your wallet cannot decode, so you see raw data rather than what it will do.
Not yet verifiedHow we verify
3 min read
In this entry
Approving a transaction whose contents your wallet cannot decode, so you see raw data rather than what it will do.
Hardware wallets often require it for complex contract calls, and it is the moment most drainer attacks succeed, because the confirmation screen shows a hash rather than the words "give this address permission to spend everything."
Wallets increasingly decode common calls into readable summaries and refuse to sign unknown ones without an explicit setting change. Treat any request to enable blind signing as a reason to stop and verify the site.
How it works
A signing device can only describe what it can parse. For a plain transfer it knows the format, so it shows a destination and an amount. For a contract call it needs the contract's abi to turn calldata into named functions and arguments.
Hardware wallets have limited storage, so they ship with parsers for common standards and a small set of applications. Anything outside that set arrives as bytes, and the device asks you to approve a hash of data it cannot explain.
Off-chain message signing under EIP-712 was designed to improve this by giving structured, typed data that a device can render as labeled fields. It helps only where the application uses it and the device supports that type.
The attack works because the dangerous actions are cheap to encode and impossible to read. A permission granting unlimited spending, or a signature authorizing a transfer of every token in the wallet, is a short blob of bytes that looks identical to a harmless one.
Modern wallets add transaction simulation, which runs the transaction against a fork of chain state and shows the resulting balance changes before you sign. That is a different defense: it tells you the outcome even when the call itself is unreadable.
Example
Illustrative: a site offering an airdrop claim asks you to sign. Your hardware wallet cannot decode the call and shows a 64-character hash with an option to approve. The transaction is a setApprovalForAll granting a contract full control of an entire token collection. Approving costs a few cents in fees and moves nothing immediately. The collection is transferred out three days later, when you are not watching.
Why it matters when you buy
This only becomes a risk once you hold assets in your own wallet and start interacting with applications, which is the normal path after a few exchange purchases. Keep the balance you are not actively using in a wallet that never connects to any site, and never enable blind signing to get past a screen you did not expect. See the guide on verifying a token contract and the guide on spotting a crypto scam.
Related terms
- abi — what a device needs to decode a call
- calldata — the bytes being signed
- transaction simulation — previewing balance changes first
- wallet drainer — the contracts that rely on unreadable signatures
- token approval — the permission most often granted blindly
- eip 712 — structured data a device can render readably
Questions
Why does my hardware wallet make me enable a setting?
Because the manufacturer treats unreadable approvals as dangerous by default. The setting exists so advanced users can interact with contracts the device cannot parse, and it is off for a reason.
Is signing a message safer than signing a transaction?
Not necessarily. An off-chain signature can authorize a transfer or an approval that someone else submits later, which is how several large thefts worked. Read what the message says, not just whether it costs gas.
How do I avoid blind signing entirely?
Use a wallet that simulates transactions, stick to applications your device can decode, and keep long-term holdings in a wallet that never connects to any site.