PROTOCOL PENA Honeypot
What happened
PROTOCOL PENA (PENA) is a BEP-20 token on BNB Smart Chain at 0xd74c5846…02a1d6, deployed in transaction 0x60c17e91…42c982. De.Fi's REKT database lists it as an Exit Scam/Honeypot and says the contract owner could disable the transfer function, which restricted users from selling. In the verified source the restriction is a single stored address, newun: both transfer and transferFrom revert when the recipient equals it, and the first transferFrom made while it is still unset writes that call's recipient into it.
The owner can also repoint it with transfernewun. The sources opened do not include a transaction showing holders being blocked.
How it happened
- The constructor mints the whole supply (
_totalSupply = 20000000000000000000000, 20,000 tokens at 18 decimals) to the deployer, who becomesowner, and leavesnewunas the zero address. transferFrombegins withif(from != address(0) && newun == address(0)) newun = to; else require(to != newun, "please wait");. The first call with a non-zerofromwhilenewunis unset does not revert and stores its own recipient innewun. Liquidity added through a router pulls tokens withtransferFrom, so the recipient of that first call would be whatever address receives the tokens; the source does not say which address that was for this token.- From then on
transferrunsrequire(to != newun, "please wait");andtransferFromruns the same check, so any movement of tokens to the stored address reverts for every sender, including holders. A holder's balance is only debited after these checks, so a blocked transfer leaves the balance in place but unsellable to that address. - A swap that sells the token into a pool sends the holder's tokens to the pool through
transferFrom. If the pool is the storednewun, that sale reverts with "please wait". Buying is a transfer out of the pool, which the check does not touch. - The owner can call
transfernewun(address _newun)at any time. Pointing it at an unused address lifts the block; setting it back to the zero address lets the nexttransferFromwith a non-zerofromcapture a new recipient. Nothing in the source removes this power, and the contract hastransferOwnership/acceptOwnershipbut no renounce function. - Separately,
clearCNDAO()lets the owner send the token contract's own BNB balance to themselves. That is the contract's balance, not a liquidity pool's.
Protocol details
Evidence
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.