NFT.Music Honeypot
What happened
De.Fi's REKT database lists NFT.Music (NFT.MUSIC, BNB Smart Chain contract 0x7ae79c56…21b68b) as an exit scam/honeypot, noting that the contract owner could disable the transfer function, which restricted users in selling their tokens. In the verified source the restriction sits in _approve: for every account except one hard-coded address, which is the deployer 0xb991E6EA…1563d0, it stores an allowance of 0 and emits an Approval event showing 2. A DEX router cannot pull a holder's tokens through transferFrom without an allowance, so a router-based sell reverts, while buying from a liquidity pool does not need a holder approval.
The check is keyed to that fixed address rather than to ownership, so renouncing ownership does not lift it. De.Fi gives no loss figure, and the code alone does not show how many holders were affected.
How it happened
- The constructor sets the name and symbol and gives the whole supply to the deployer:
_balances[msg.sender] = _totalSupply;. The deployer address equals the address hard-coded in step 3. - Every allowance write goes through
_approve.approveandincreaseAllowancecall it with_msgSender()as the token owner, andtransferFromcalls it again to reduce the allowance after a transfer. _approvetreats one address differently:if (owner == address(0xb991E6EAe36a388C34fCd48a8eB7b567C71563d0)) { _allowances[owner][spender] = amount; ...} else { _allowances[owner][spender] = 0; emit Approval(owner, spender, 2); }. For any other holder the stored allowance stays 0, while the emitted event reports a value of 2.transferFromcomputes_allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance"). A router that sells for a holder is the caller, and that holder's allowance to it is 0, so every non-zero sell reverts.- Plain
transferhas no such check and_transferonly moves balances, so tokens can still be bought from a pool and sent between wallets; only approval-based spending is blocked for holders. The deployer's own approvals are stored normally, so the deployer is the only account that can give a router a working allowance. - The header comment advertises renounced ownership, burned liquidity and a 5% fee, but
_transferapplies no fee and the contract has no liquidity logic. The owner-onlymint(uint256 amount)mints to the caller. A read ofowner()on 2026-09-30 returned the zero address, which does not show when ownership was renounced.
Protocol details
Evidence
- report @Token_Sniffer incident report twitter.com
- address BscScan verified source for 0x7ae79c56c1535fe4754efce6c653f4bd3121b68b bscscan.com
- analysis BSC-SCAM: PancakeSwap NoApproval Mechanism cryptot3ddybear.gitlab.io
- analysis Sourcify match for 0x7ae79c56c1535fe4754efce6c653f4bd3121b68b repo.sourcify.dev
- analysis De.Fi REKT database listing for NFT.MUSIC (Exit Scam/Honeypot) de.fi
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.