How to verify a token contract yourself
The Editor·9 min read·Updated 31 Aug 2026
How to check a token contract without code: what verified source really means, the six functions to search for, ownership checks, and the Solana version.
Open the contract address on the chain's block explorer, confirm the source code is verified, then search that source for six things: a mint function, a tax setter, a blacklist or pause, a transfer restriction, a proxy pattern, and the current owner. You do not need to read Solidity to do this. You need to know what to search for and what each answer means.
This takes about five minutes per token. It does not make you safe. It makes you informed, which is a different and more achievable goal.
Step 1: get the right address first
Everything below is worthless if you are inspecting the wrong contract, and inspecting the wrong contract is the most common expensive mistake in this category. Take the address from the trading pool you are about to trade in, or from the launchpad's own token page — never from a social post, a Telegram message, a search result or a screenshot. Tickers are not unique and anyone can deploy a token with the same name in seconds. What a contract address is and where to find it safely covers the sourcing rules in full.
Then use the official explorer for the chain. Etherscan for Ethereum, Basescan for Base, BscScan for BNB Chain, robinhoodchain.blockscout.com for Robinhood Chain (chain ID 4663), Solscan for Solana. Third-party explorers exist for most chains — robinscan.io and hoodscan.pro on Robinhood Chain, for instance — and are unvetted. The entire point of the exercise is verification, so verify somewhere you have a reason to trust.
Step 2: check whether the source is verified — and understand what that means
On the explorer's contract page there is a Contract tab. If the source is verified, you will see human-readable Solidity and a green check or equivalent marker. If it is not, you will see bytecode.
Here is the part people get wrong. Verified source means the published code compiles to the deployed bytecode. That is all it means. It is a proof of correspondence, not a proof of quality, safety, honesty or audit. Nobody at the explorer read the code. Nobody vouched for it. A verified contract can contain an owner-only mint, a 99% sell tax setter and a blacklist, and the verification badge will look exactly the same as on a clean one.
What unverified means is more useful: it means no tool and no person can tell you what the contract does. Automated scanners fall back on bytecode heuristics and get less reliable. Treat unverified as unreadable, and unreadable as a hard stop for anything you are not prepared to lose in full. Plenty of launchpad deployments sit unverified briefly after launch, so unverified is not evidence of fraud — it is evidence that you cannot check.
Step 3: search the source for six things
Use your browser's find function on the Contract tab. You are pattern-matching, not reading.
1. Mint capability. Search mint. You are looking for any function that increases total supply and for who can call it. If a mint function exists with an onlyOwner modifier on a token that presents itself as fixed-supply, the supply is not fixed — it is fixed until the owner decides otherwise. A _mint call inside the constructor only is normal and fine; that is the initial supply being created once at deployment.
2. Tax setters. Search setTax, setFee, Fees, Tax. The question is not what the current tax is. It is whether the owner can change it and whether there is a hard cap in the code — a require statement that rejects values above some ceiling. An uncapped, owner-adjustable sell tax is the most common soft honeypot on EVM chains: nothing is blocked, your sell just returns nearly nothing. How honeypot tokens block your sell covers this class of trap in detail.
3. Blacklist and pause. Search blacklist, blocked, isBot, pause, enableTrading. Any owner-controlled mechanism that can stop specific addresses transferring, or stop all transfers, is a mechanism that can be pointed at you after you buy. Anti-bot blacklists have a genuine use at launch; the risk is that they are almost never removed afterwards.
4. Transfer restrictions. Search maxTx, maxWallet, cooldown, _transfer. Caps on transaction size and wallet size are common and often benign. What matters is whether they are mutable and who controls them. A maxTx the owner can set to one wei is a sell block with a different name.
5. Proxy pattern. Search implementation, upgradeTo, Proxy, or look for a "Read as Proxy" tab on the explorer. If the token is behind a proxy, the code you just read can be replaced entirely by the proxy admin. Everything above becomes provisional. Find who the admin is before you draw any conclusion.
6. The owner. Covered in the next step, because it is the field most often misread.
Step 4: check ownership properly
Go to the Read Contract tab and call owner() — no wallet connection needed, these are free view calls. The address that comes back is the answer to "who can do all the things you just found".
Three possible outcomes:
Zero address (0x000...000). Ownership is renounced. Owner-only functions can no longer be called by anyone. This is a real and permanent constraint, and it is verifiable — check the OwnershipTransferred event in the transaction history to see when it happened.
A contract address. Ownership sits with a multisig, a timelock or a launchpad's own contract. This can be stronger than renouncement or weaker, depending entirely on what that contract is. Open it and find out.
A normal wallet address. Ownership is live and held by a person. Every owner-only function found in step 3 is available to them right now.
The trap: "renounced" is often claimed and rarely checked, and transferring ownership to a second wallet the same person controls looks identical on-chain to a genuine handover. You cannot distinguish those two from the transfer transaction alone. What you can do is look at where the new owner address was funded from — if it traces back to the deployer's funding source, treat the renouncement as cosmetic.
Also check the order of events. Ownership renounced before the tax was set to a favourable number is meaningful. Ownership renounced after a blacklist was populated leaves the blacklist in place permanently.
Step 5: the Solana version
Solana tokens do not carry their own transfer code, so there is no Solidity to read. The equivalent checks are about authorities, and they are faster.
Open the token mint address on Solscan and read three fields:
- Mint authority. If set, that address can create new tokens at will. Revoked (shown as null or none) means supply is fixed.
- Freeze authority. If set, that address can freeze individual token accounts, which stops that holder transferring or selling while everybody else trades normally. This is the closest Solana analogue to a honeypot.
- Update authority on the token metadata, which governs whether the name, symbol and image can be changed after launch.
What mint authority and freeze authority actually control covers what each one can and cannot do. For pool-level checks — LP status, holder concentration, authority state in one view — RugCheck is the standard first pass in the Solana workflow, and Meme Central runs it on Solana tokens directly.
One Solana-specific caution: a token created under the Token-2022 standard can carry extensions that change transfer behaviour, including transfer fees and transfer hooks. Check which token program the mint belongs to before assuming standard behaviour.
Step 6: read the contract's transaction history, not just its code
Code tells you what is possible. History tells you what has happened. On the explorer's transaction list for the token contract, look for calls to the owner-only functions you identified — a setFee call three hours after launch, an addToBlacklist call, an ownership transfer. Deployers who have used a capability once will use it again.
Then look at the holders tab for supply concentration, which is a separate discipline covered in how to read holder distribution on a token.
What this doesn't tell you
Contract verification answers mechanical questions and none of the important ones.
It cannot tell you what the deployer intends. Every check above is compatible with a creator who holds a third of the supply and plans to sell it on Friday. That is not a contract flaw and it will empty the pool just as effectively.
It cannot tell you who the holders are. Ten wallets funded from the same source in the same block look like ten holders on the holders tab. Cluster analysis is a different tool — Bubblemaps is the standard for it, and nothing substitutes for it.
It is a point-in-time reading. Proxy implementations get upgraded, ownership gets transferred, locks expire. A check from last week is a historical record. Re-check before a second buy.
It cannot detect a rug executed through entirely legitimate transactions, which is what most modern rugs are. No function is abused; supply is simply sold.
And it does not change the base rate. Most memecoins go to zero with clean contracts. A verified contract with revoked authorities and a renounced owner is a token that failed one specific set of tests, not a good investment. If you would rather have the automated version of this pass as a first filter, how RugCheck, TokenSniffer and GoPlus compare sets out what each tool covers and misses.
Frequently asked questions
Does "verified contract" mean a token is safe?
No. Verification only proves the published source code compiles to the deployed bytecode. No human reviewed it and no audit is implied. A verified contract can contain an owner-callable mint, an uncapped sell tax and a blacklist. What verification gives you is the ability to check those things yourself.
How do I check if a contract owner has renounced ownership?
Open the Read Contract tab on the block explorer and call owner(). A zero address means renounced. Then check the OwnershipTransferred events in the transaction history for when it happened and what came before it. Ownership transferred to another wallet is not renouncement, however it is described.
Can I check a token contract without knowing how to code?
Yes. Use the explorer's find function to search the verified source for mint, setTax, blacklist, pause, maxTx and Proxy, then call owner() on the Read Contract tab. You are looking for the existence of capabilities and who controls them, which requires no ability to trace program logic.
What is the Solana equivalent of reading a contract?
Checking authorities on Solscan rather than reading code. Look at whether mint authority and freeze authority are revoked, who holds metadata update authority, and which token program the mint uses. Token-2022 mints can carry transfer fees and transfer hooks that standard SPL tokens cannot.
Why does an unverified contract matter if I use a scanner anyway?
Because scanners work considerably better on verified source. Without it they fall back on bytecode heuristics, which raises both false positives and false negatives. An unverified contract means neither you nor the tool can say what the code does — only what it appears to do.
Verification is the buyer's job; removing the doubt is the launcher's
Everything in this article is a buyer working out what a creator can still do to them. If you are the creator, the shortest route to a clean read is to give up the capabilities before anyone has to ask. Team Finance's LP locking — built by TrustSwap, which also builds Meme Central — locks LP tokens for a fixed term on Ethereum, Robinhood Chain, Polygon, Base and BNB and displays as a verified badge on your token's page in the Meme Central token feed. It says nothing about your token contract's permissions, which is exactly what a buyer will check next.
Nothing here is financial, legal or tax advice. Memecoins are extremely high-risk: most lose most of their value, and the majority of tokens launched never reach a decentralised exchange at all. Never spend money you cannot afford to lose entirely. Meme Central does not recommend any specific token. Data described as Meme Central's own reflects tokens indexed by Meme Central and is not whole-market data.