Independent DeFi security desk · Status: operationalMethodology & corrections · Submit an incident
DeFi Safety · Fact checked

Why a DeFi Checklist Should Include the Official Domain

How domain verification fits into a repeatable wallet safety workflow.

This article may contain affiliate links. Commercial relationships are disclosed in the affiliate policy.

DeFi Safety — illustration keyed to this article's identifier. Source documents are listed under Sources and are not reproduced here.

A DeFi checklist that omits the official domain is checking the wrong thing. Almost every catastrophic loss in this space starts with a user arriving somewhere they believed was legitimate, and the majority of those arrivals came through a link in an email, a direct message, a search advertisement, or a shortened URL posted by an account that looked right. None of those are the protocol’s fault, and none of them are prevented by a checklist that only asks whether the signature request makes sense. The domain is the cheapest and most reliable item on any safety list, because it is the one thing an attacker had to fabricate.

The reason to put it first, rather than in a general safety section, is that every other check assumes you are on the real site. Slippage tolerance looks sensible on a genuine swap and perfectly reasonable on a fraudulent one. A contract address can be compared against the official documentation — by the official documentation. A warning sign in a support chat means nothing if the chat itself is hosted by the attacker. The domain check is upstream of the rest of the list.

What counts as the official domain

The official domain is the one recorded by the protocol itself, not the one you arrived through. This distinction is the entire point, because the address in your address bar was chosen by whoever sent you the link.

In practice there are three ways to get an authoritative answer, in descending order of reliability. The protocol’s own documentation, reached independently of the message that brought you here, lists the domains it uses. Its verified social accounts link back to those domains. Its deployed contract is published at a domain you can check in a block explorer. Any one of these is authoritative; the link in the message is not.

Watch for the near-misses, because they are the actual attack surface. A hostname that appends a hyphen to a known name. A hostname that adds a word — “wallet”, “support”, “security” — before the real brand. A subdomain of a service the attacker does not own, used to make a path look official. A domain that differs by one character, or uses a homoglyph. A URL shortener, which removes the ability to inspect the destination at all. And search advertisements, which look like organic results and lead to domains that have nothing to do with the project.

What to do with the domain once you have it

Once you know the real domain, the check becomes cheap. Type it yourself rather than following the link. Compare it character by character against what you expected — not approximately, not “does this look right”, but reading left to right from the second character, because that is where a substituted letter hides.

Check the connection. A padlock in the address bar means traffic to that domain is encrypted, which is worth having and says nothing about who owns the domain. A certificate warning means stop.

Then stay on that domain for the whole flow. A protocol you reached correctly can still hand you off to something you did not verify — a token list, a governance proposal, a “migration” link rendered inside a legitimate interface. Every internal link deserves the same suspicion as the original message, because a compromised or careless official site is a real attack path, not a hypothetical one.

Why the domain belongs in the checklist rather than in habit

Domain verification is often treated as knowledge a careful user already has. That assumption is what the checklist exists to correct. The people who lose money are frequently experienced users acting fast on a plausible message — familiarity with crypto makes a fraudulent interface easier to process, not harder, because the layout looks like something they have legitimately seen a hundred times.

Written down, the check costs five seconds and applies to everyone: a new user, a tired user, a user on a phone at night, a user who has been told the funds will disappear. That last case is the one the checklist is really for. A person acting against a deadline does not run a mental checklist, but an open document beside them might get read.

The parts of the list that depend on it

Once the domain is verified, the rest of a reasonable checklist has something to stand on. Check the chain and the contract address against official documentation. Confirm the token being traded is the token you meant, by contract address rather than symbol. Read the approval request and understand whether it is unlimited. Verify the spender is the protocol’s own contract. Confirm the network matches the one the official documentation describes for that action.

Each of those checks has a failure mode that domain verification neutralizes: a correct contract address on a fraudulent site is still a fraudulent site’s contract. A real token symbol on a fake site is still fake. Domain verification does not replace these checks, but it removes the category of attack in which all of them would have passed anyway because the user was on hostile ground.

The limit of what a domain check can do

Honest scope matters. A verified domain does not mean a safe interaction — a genuine protocol can have a bug, a governance capture, a compromised admin key, or a front-end that was itself altered. Domain verification tells you who is asking, not whether the request is sound. It is a precondition for meaningful verification, not a substitute for it.

It also fails in a specific case worth naming: an official domain that is genuinely hijacked, or an official social account taken over and used to announce a real-looking migration. This happens, and it is the strongest argument for the deepest item on any checklist — verify the contract, and prefer interacting with a protocol whose on-chain governance and deployment history you can inspect.

The habit worth building is small and specific: before any signature, the domain comes first, read character by character, reached by a route you chose rather than one you were given. Everything else in a safety checklist assumes you got that right.

Sources