Neoteric Finance Rug Pull
What happened
Neoteric (NTRC) is a BEP-20 token on BNB Smart Chain with a fixed supply of 500,000,000 tokens minted once to the deployer. Its contract leaves the owner() account uncapped, unilateral switches over who can sell: a blacklist, per-direction fee setters, a maximum-sell setter and a trading start time. The contract has no function that withdraws pool liquidity.
De.Fi's REKT database lists the project as rug pulled by its team, with a profit of about 67 BNB. It describes the project as having a Telegram group, a Twitter account and a simple website, and says that a day after the NTRC/BNB pair was created on PancakeSwap it posted about a successful capitalization. According to the listing, the token creator received 100 BNB from address B (transaction 0xc965f8c0…dd176b) and then, once the price had risen, removed liquidity for a profit of about 67 WBNB in two transactions, 0xf3a2bd56…059c1d and 0x2add9377…1d0221. The listing adds that the same team ran the same scheme with the $PEECAT token.
Addresses and transactions named by the listing: token creator (address A) 0x8f0d9acb…2387e4; address B 0x6e9afd53…2209b1; pair creation transaction 0x574679ed…8fd93a; deployment transaction 0x8b26c3e8…742c18.
How it happened
- The constructor mints the whole supply to the deployer with
_mint(owner(), 500000000 * (10**decimals()));and creates the PancakeSwap pair withcreatePair(address(this), _uniswapV2Router.WETH()). It also setsexcludeFromFees(owner(), true);, so the owner pays no fees on its own transfers. This is the only mint of NTRC itself. - What the code allows on the sell side:
updateSellFees(...)takes six percentages with no upper bound. On a sell into the pair the transfer computesuint256 feeAmount = amount.mul(calcFee).div(100);and thenamount = amount.sub(feeAmount).sub(burnAmount);, so a combined sell fee above 100 reverts every sale by a non-excluded seller.updateMaxSellTx(0)makesrequire(amount + sellnumber[from] <= maxSellTransactionAmountfail for any non-zero sale by a seller who is neither the owner (from != owner()) nor in_isExcludedFromLimits. All sell fees and limits start at 0 or at the full supply. - What the code allows on trading start:
updateTradingEnabledTimesetstradingEnabledTimestamp = newTimeInEpoch;. While the current time is earlier than that value,require(canTransferBeforeTradingIsEnabled[from]rejects every sender not on that list, which includes the pair when it sends tokens to a buyer and holders when they sell. - What the code allows with the blacklist:
blacklistAddress(address account, bool excluded)sets_isBlacklisted[account] = excluded;, and_transferbegins withrequire(!_isBlacklisted[from]and the same check onto. A listed holder can neither send nor receive; listing the pair address would stop all buys and sells. - The owner role is transferable (
transferOwnership) and can be given up (renounceOwnership). A current-state read on 2026-09-30 returned 0x9b28e5a3…f29e91 asowner(), which is not the deployer, but that read does not show who held the role at the time of the incident. - What happened, per De.Fi's REKT database: the token creator removed liquidity after the price rose in the two transactions listed above, taking about 67 WBNB. No opened source shows that any of the switches in steps 2 to 4 was used.
Protocol details
Evidence
- report Report isthiscoinascam.com
- report NTRC source on Sourcify repo.sourcify.dev
- transaction bscscan.com transaction 0x2add…0221 bscscan.com
- transaction bscscan.com transaction 0x5746…d93a bscscan.com
- transaction bscscan.com transaction 0x8b26…2c18 bscscan.com
- transaction bscscan.com transaction 0xc965…176b bscscan.com
- transaction bscscan.com transaction 0xf3a2…9c1d bscscan.com
- address NTRC verified source on BscScan bscscan.com
- address bscscan.com address 0x6e9a…09b1 bscscan.com
- address bscscan.com address 0x8f0d…87e4 bscscan.com
- analysis Web Archive web.archive.org
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.