On-Chain Forensics · Investigative Desk
← Back to Investigations
Investigation

Anatomy of a Rug Pull: Reading Malicious Tokenomics On-Chain

Reverse Death Intel|
Anatomy of a Rug Pull: Reading Malicious Tokenomics On-Chain
Forensic Dossier

Smart Contract Forensic Audit

Tokenomics Assessment

Illustrative teardown shows uncapped owner-mint paths and asymmetric transfer logic are the load-bearing flaws in honeypot tokenomics.

Liquidity Pool Status

Teaching example: unlocked or short-locked LP with a large out-of-lock team allocation signals an exit-ready liquidity rug.

Contract Mechanisms

Generic finding: owner-adjustable sell taxes with no hard-coded cap can be raised toward 99% to silently disable exits.

Burn Verification

Representative review: claimed burns are meaningless when a proxy or post-deploy mint can re-inflate supply at will.

Most retail losses in crypto are not the result of a sophisticated hack. They are the result of investors signing transactions that hand a stranger full control over their money. The contract told them the truth the whole time — they just did not know how to read it. This article is a technical teardown of how malicious tokens are engineered, and how to read those mechanics directly on a block explorer before you ever click Buy.

Smart contract source code on a dark screen

1. What a "Rug Pull" Actually Means On-Chain

The phrase covers two distinct mechanisms that often appear together. A liquidity rug is the dramatic version: the deployer removes the paired asset (ETH, BNB, USDT) from the trading pool, leaving holders with a token that has no buyer. A honeypot is the quieter version: the contract lets you buy but, by design, prevents you from selling. In both cases the code contained the trap from deployment — there was no later "exploit." The deployer simply waited for liquidity to arrive.

If a contract can decide who is allowed to sell, it is not a market. It is a trap with a price tag.

2. The Hidden Mint Function

A legitimate fixed-supply token mints once, in the constructor, and exposes no further way to create tokens. A malicious token hides a mint path behind an owner check. When the price is healthy, the owner prints a colossal supply and dumps it into the pool, draining the paired asset and crushing the price to zero. Watch for any externally callable function that increases totalSupply or calls _mint after deployment.

// RED FLAG: owner can mint unlimited supply at any time
function ownerMint(uint256 amount) external {
    require(msg.sender == owner, "not owner");
    _mint(owner, amount);            // dilutes every holder instantly
    totalSupply += amount;
}

On a block explorer, open the Contract > Read/Write tabs. If you see a write method named mint, setSupply, rebase, or anything that an owner can call to change balances, treat the token as uncapped regardless of what the marketing says.

3. Owner-Only Blacklists and Transfer Gating

This is the canonical honeypot. The transfer logic contains a condition that the owner controls. Anyone can buy, but the moment a wallet tries to sell, a flag blocks the transaction. Because the buy path works perfectly, the chart looks like a clean uptrend — every green candle is a victim who can never exit.

mapping(address => bool) public canSell;

function _transfer(address from, address to, uint256 amount) internal {
    // sells route to the pair address; block them unless whitelisted
    if (to == pairAddress) {
        require(canSell[from], "trading paused");
    }
    balances[from] -= amount;
    balances[to]   += amount;
}

The tell is asymmetry: logic that treats the buy direction and the sell direction differently, keyed on an owner-controlled mapping. A free honeypot detector or a tiny test-sell from a throwaway wallet will surface this in seconds.

A green chart that no one can sell into is not demand. It is a queue of people who have already lost.

4. Dynamic Sell Taxes

Some contracts do not block selling outright — they tax it into oblivion. A setSellTax function lets the owner raise the sell fee to 99% after liquidity is deep, so any exit returns almost nothing. Modest, fixed, immutable taxes (2–5%) are common and benign. The red flag is an owner-adjustable tax with no hard cap in the code.

uint256 public sellTax = 3;             // looks harmless today

function setSellTax(uint256 t) external {
    require(msg.sender == owner);
    sellTax = t;                        // no upper bound — can become 99
}

5. Fake and Unlocked Liquidity

Liquidity is the paired asset that lets people sell. "Locked liquidity" means the LP tokens are held by a time-lock contract so the deployer cannot withdraw them. Scammers fake this in three ways: they never lock at all, they lock for a trivial period (24–72 hours), or they hold a large team allocation outside the lock that they dump separately. Always verify the lock on-chain — read the lock contract, confirm the unlock timestamp, and confirm the locked amount is a meaningful share of total LP.

Abstract visualization of draining liquidity

6. Proxy Upgradeability — The Silent Backdoor

The most dangerous pattern of all is the upgradeable proxy. The token you audited today can be quietly swapped for malicious logic tomorrow. A clean audit of the current implementation is worthless if an owner can call upgradeTo(newAddress) and replace the entire contract. On the explorer, a proxy is flagged as such; look for an admin address and an implementation slot. If a single externally-owned wallet can upgrade the contract, the trust assumption is total.

7. Reentrancy, Hidden Fees, and the "Approve" Trap

Beyond outright honeypots, several quieter mechanics drain wallets after the fact. A malicious token can abuse the ERC-20 approve pattern: a fake "claim airdrop" or "migrate tokens" button asks you to approve an unlimited allowance, after which the contract sweeps your balance whenever it likes. The approval is the signature that costs you everything, and it can sit dormant for weeks before being used. Treat any request for unlimited approval as hostile, and revoke stale allowances periodically using an allowance-checker tool.

A second pattern is the disguised fee on transfer. The marketing claims a 2% tax, but the _transfer function silently routes a far larger cut to a "marketing wallet" controlled by the deployer. Because the math is buried in the code rather than the documentation, holders only notice when the received amount does not match the sent amount. The defense is the same discipline as everywhere else: read the transfer function itself, not the whitepaper that describes it.

The whitepaper is what they want you to read. The transfer function is what you will actually live with.

Reentrancy and oracle manipulation are more advanced, but the retail-relevant version is simple: any contract that lets an owner call an arbitrary external address during a transfer has handed itself a loaded weapon. You do not need to understand every line of assembly to spot the structural danger — you need to find the owner levers and assume each one will eventually be pulled.

8. Reading It All on a Block Explorer

  • Verified source. Unverified bytecode is an automatic stop. You cannot audit what you cannot read.
  • Holder distribution. If the top 1–3 wallets hold most of the supply, one sell ends the token.
  • Owner / renounced. Check whether ownership is renounced to the zero address — and whether a proxy makes that meaningless.
  • Write methods. Enumerate every owner-only function. Mint, tax, blacklist, pause, upgrade — each is a lever.
  • Contract age & liquidity lock. A token hours old with unlocked liquidity is a coin flip you will lose.

Red-Flag Matrix

MechanicWhere to lookSeverity
Post-deploy mint functionWrite tab / _mint callsCritical
Owner-controlled blacklist_transfer conditionalsCritical
Adjustable sell tax, no capsetSellTaxHigh
Unlocked / short-lock LPLP lock contract timestampCritical
Upgradeable proxyProxy admin / implementation slotCritical
Unverified source codeExplorer "Contract" tabHigh
Concentrated holdersHolders tab top-10High

A Practical Checklist Before You Buy

  • Is the source code verified? If not, walk away.
  • Run a free honeypot simulator and, ideally, a tiny test-sell from a fresh wallet.
  • List every owner-only write function and ask: "What is the worst this lever can do?"
  • Confirm liquidity is locked, for how long, and for what share of LP.
  • Check holder concentration and contract age.
  • Determine whether it is a proxy that can be upgraded.
  • If you cannot answer all of the above, you are not investing — you are donating.

How Legitimate Tokens Differ

It is worth stating the inverse, because not every owner function is sinister and fear is not a strategy. Legitimate projects typically renounce ownership or move control to a multi-signature wallet or a time-locked governance contract, so that no single person can act unilaterally. Their supply is capped in code, their liquidity is locked for years through a reputable locker, and their contract is a non-upgradeable, audited, verified deployment. When a project hides none of these levers and can demonstrate each one on-chain, the asymmetry that defines a scam simply is not present. The goal of this teardown is not to make you reject every token — it is to make the difference between the two legible to you in minutes.

The recurring lesson of adjudicated cases — from the public-record OneCoin prosecution to numerous SEC and DOJ token actions — is that the warning signs were legible in advance. The discipline that protects you is not predicting the market. It is reading the contract, enumerating who holds power over your money, and refusing to sign until you know exactly what every owner-only function can do to your balance. A token cannot lie to a reader who insists on the source code.

Advertisement

Community Intelligence

0 Reports

Secure Intelligence Submission

Identity verification required to mitigate Sybil attacks and verify intel provenance. Choose a secure gateway below.

No reports filed yet. Be the first to share your findings.