SAFEOXYGEN Token Honeypot
What happened
De.Fi's REKT database lists SAFEOXYGEN Token (OXYGN) on BNB Smart Chain as an exit scam / honeypot, stating that the contract owner could disable the transfer function, which restricted users in selling their tokens. The verified source at 0x0ca49468…50d15e shows how: _transfer reverts any transfer between two non-owner addresses unless the sender equals the pancake address, and the private TIME flag that enables this check starts as true. A holder selling into a liquidity pair is such a transfer, so the sell reverts, while sending tokens to the owner still passes.
Only the owner can turn the check off with setTIME. The deployment transaction is 0xe00ff783…91098f, sent by 0x25740791…8a8369, which is also the owner address the contract reported when read on 2026-09-30.
How it happened
- The constructor mints the whole supply to the deployer with
_mint(msg.sender, 1000000000000000e18), and the base contract declaresbool private TIME = true;, so the transfer gate is active from deployment. - In
_transfer, any transfer sent by the owner executesif(sender == owner()){ pancake = recipient; }, sopancakeis whichever address the owner last sent tokens to. An owner transfer into a liquidity pair would therefore record that pair aspancake;addPancakecan also set it directly. - The gate is
if(sender != owner() && recipient != owner() && sender != pancake && TIME == true){ revert("FOR VALUE PROTECTION, YOU CAN ONLY SELL 1 Sale PER 30 MIN"); }. A holder who sells moves tokens from the holder to a pair, so neither side is the owner and the sender is notpancake, and the call reverts. Transfers that pass are those from the owner, to the owner, or from the address stored inpancake. The revert message mentions a 30-minute limit, but the timestamp comparison is commented out (//&& timeNow < transData[sender] + 10 minutes), so the code enforces no timing rule. - The owner holds the switch:
setTIME(bool _bool)isonlyOwnerand flipsTIME. Further owner-only controls areGTYA(address, bool), which makes_transferrevert for a flagged sender (if(bot[sender] == true){ require(amount <=0, "bots......"); }), andfire,POOLandsetBAR, which set a per-transfer cap (require(amount <= MAX, ...)) on transfers to flagged recipients.setFeeaccepts values up to 100, whichfee = amount.mul(txFee).div(1000)turns into at most 10% (the code comment says 1%);txFeestarts at 0.renounceOwnershipexists, so the owner could give these controls up, but the source does not show whether it was called. - What the code allows is separate from what happened: no transaction was opened showing who sold, who held
pancake, or whethersetTIMEwas ever called, so the page relies on De.Fi's listing for the outcome.
Protocol details
Evidence
- report De.Fi REKT database listing for OXYGN (proof link: Token Sniffer post, returned 404) twitter.com
- address BscScan verified source for 0x0ca494682767e62a26ae4f175aec3bbaae50d15e bscscan.com
- analysis Sourcify match for chain 56 contract 0x0ca494682767e62a26ae4f175aec3bbaae50d15e repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.