RASIM OZAN Honeypot
What happened
RASIM OZAN (ROK, 6 decimals) blocks transferFrom calls to one stored address, newun. The first transferFrom with a non-zero sender writes its recipient into newun: if(sender != address(0) && newun == address(0)) newun = recipient;. Afterwards require(recipient != newun || sender == owner(), "please wait"); reverts every transferFrom into that address unless the sender is the owner.
A router sale is a transferFrom into the pool, so if the pool was the captured recipient, holders cannot sell, while transfer has no such check and buys from the pool are not affected. The owner could also pause() all transfers that do not involve the owner, change newun with transfernewun, and mint new tokens without a cap. The on-chain owner() reads the zero address as of 2026-09-30.
De.Fi's REKT database lists the token as an Exit Scam/Honeypot and describes it as: the contract owner could disable the transfer function, which restricted users in selling their tokens. The listing dates the incident 2021-06-11 and gives no loss figure.
How it happened
- The constructor credits
_totalSupply = 10000000000000 * 10**9;(1e22 raw units, 1e16 tokens at 6 decimals) to_msgSender(), the deployer 0xAA4b91F2…8aCF56.newunstarts as the zero address. transferFromrunsif(sender != address(0) && newun == address(0)) newun = recipient;for the first call with a non-zero sender. That call is not restricted and stores its recipient innewun. A router-based liquidity add callstransferFrom(provider, pool, amount), so the pool is a natural first recipient; the opened source does not show which addressnewunholds on-chain.- Every later
transferFromrunsrequire(recipient != newun || sender == owner(), "please wait");. A holder's router sale istransferFrom(holder, pool, amount), so withnewunequal to the pool it reverts for any sender other thanowner(). transfercalls_transferdirectly with nonewuncheck, so a pool paying out a purchase and wallet-to-wallet sends pass.- Owner powers in the source:
transfernewun(address _newun)(onlyOwner) setsnewunto any address (an unused address lifts the block, zero re-arms capture);pause()setspaused, after which_transferrequires!paused || sender == owner() || recipient == owner(), stopping buys and sells alike;mint(address _to, uint256 _amount)raises_totalSupplyand_balances[_to]with no cap. - Current ownership:
owner()andgetOwner()read the zero address in an eth_call on 2026-09-30. The source has bothrenounceOwnership()andlock(uint256 time), which each set_owner = address(0);lockkeeps_previousOwner, which canunlock()after_lockTime. The read does not show which was used or when. Withowner()at zero,sender == owner()is false for every real sender, so no address is exempt from thenewunblock. - What the code allows: holders can buy, but while
newunis the pool they cannot sell through a router, and the owner controls the block, a pause and minting for as long as it holds ownership. What is documented as having happened: De.Fi's REKT database lists the token as an Exit Scam/Honeypot; no opened transaction shows whatnewunwas, any pause, mint, sale, liquidity removal or loss amount.
Protocol details
Evidence
- report De.Fi REKT database listing for ROK (fields supplied in meta.json), proof link: Token Sniffer tweet 1390015526294810624 twitter.com
- report Sourcify repository entry for the same contract (source, compiler 0.6.12, deployer and deploy block time) repo.sourcify.dev
- address BscScan verified source, ROK (RASIM OZAN) 0xfed7a6958aa81cac07abe6b1ab0391be39bb16f8 bscscan.com
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.