All use cases

For crypto

They already know you only check four characters.

Every serious attack on a crypto transfer exploits the same habit: nobody reads forty-two characters, so we glance at the start, glance at the end, and hit send. Both clipboard hijacking and address poisoning are engineered precisely around that glance.

The root cause

Matching the ends is cheap. Matching the middle is not.

Generating an address whose first and last characters match a target is a brute-force search anyone can run on a laptop — it's the same technique behind "vanity" addresses. Matching the whole address is computationally impossible. So attackers buy the ends and gamble that you never look further in.

What your eye compares

bc1qwft3w7zm5vgjgxpk6zj2s467t6ly97hkcgxe8s
bc1qwft3w7zm5vh4nra26zj2s467t6ly97hkcgxe8s

Both addresses start bc1q and end xe8s. One of them is yours. DoublyCheck compares position by position, so the six characters in the middle are not something you have to notice — they're something the app reports.

Threat model

Four ways the address changes between you and the chain.

Clipboard hijacking

Malware rewrites what you paste

A clipboard stealer sits quietly on the machine, watches for anything shaped like a wallet address, and substitutes its own the instant you paste. You never typed a wrong character — the string simply changed in transit between copy and paste.

The check: scan the address now sitting in the recipient field, and compare it against your saved entry or a scan of the original source. If the clipboard lied, the diff shows it.

Address poisoning

Your own history is the bait

An attacker sends you a dust or zero-value transaction from an address generated to share the first and last characters of one you really use. It lands in your wallet's history. Next time you reach for a recent address, you copy theirs.

The check: never source an address from transaction history. Keep the real one saved and labelled, and let the comparison — not your memory of the last four characters — decide.

Compromised display

The screen shows one thing, the device another

Malware or a tampered page can render a different address than the one your transaction will actually carry. This is exactly why hardware wallets show the address on their own trusted screen — and why comparing the two screens is the standard advice.

The check: scan the address on your computer, scan the one on the hardware wallet's screen, and let the app confirm they're identical instead of squinting between two displays.

Wrong recipient

No attacker required

The mundane one, and probably the most common: the right address for the wrong destination. An exchange deposit address pasted into a self-custody send. Last month's deposit address for an exchange that has since rotated it.

The check: a labelled address book. Scanning tells you not just "this is a valid address" but "this is Kraken withdrawal, which you've used sixteen times."

In practice

The hardware wallet check, without the squinting.

Everyone is told to verify the address on the device screen. Almost nobody reads all forty-two characters twice. This is that check, done properly, in about ten seconds.

  1. 1

    Scan the recipient field on your computer — the address your wallet software says it will send to.

  2. 2

    Scan the second source — your hardware wallet's own screen, a paper backup, or the entry you saved and labelled the first time round.

  3. 3

    Read the verdict. Identical, or a highlighted list of the characters that aren't. Then confirm on the device — or don't.

What it reads

Bitcoin
Legacy and P2SH addresses in Base58Check, plus SegWit and Taproot in Bech32 and Bech32m. Each carries a checksum, verified on every scan.
Ethereum
EIP-55 mixed-case checksum addresses — the capitalisation itself is the integrity check, and DoublyCheck validates it.
QR codes and plain text
Both paths land in the same comparison. A QR on a screen, a string on a web page, a line printed on a steel backup plate.

What it deliberately doesn't do

  • It is not a wallet. No keys, no signing, no balances to lose. It never touches your funds because it never could.
  • It won't tell you who owns an address. There's no chain analysis and no blocklist — that would require sending your addresses to somebody's server.
  • Don't scan an address and then send to the scan result. That makes the app a source instead of a check. Scan to confirm two sources agree; copy from the source you already trust.
  • It can't catch a typo you invent. Type an address by hand into your wallet and there's no second source to compare against.

The transfer is final. The check doesn't have to be optional.

Free to use, no account, and nothing about your addresses ever leaves the device.

Paying suppliers rather than wallets? See the invoice-fraud use case.