DINAR PROTOCOL Honeypot

Reported loss Not disclosed
BNB Chain
Honeypot

What happened

DINAR PROTOCOL (DINAR) is a BNB Chain token whose transfer and transferFrom refuse any transfer to the address stored in newun, with the revert message "please wait". newun starts empty, and the first transferFrom call from a non-zero address sets it to that call's recipient. If that first call is the router moving tokens into a liquidity pair, the pair becomes the blocked address and every later router sell, which is a transferFrom to the pair, reverts.

The owner can reassign newun with transfernewun. De.Fi's REKT database lists DINAR as an exit scam/honeypot dated 2021-03-27 and describes the owner as able to disable the transfer function; it lists no loss figure. The contract was deployed in transaction 0x03bce7dd…9c13b3 on that day.

How it happened

  1. The constructor mints the whole supply (1,700,000 tokens with 18 decimals) to the deployer, who becomes owner, and never sets newun, so it starts as the zero address.
  2. transfer contains require(to != newun, "please wait");, so a direct transfer to the address held in newun reverts for every sender, including the owner.
  3. transferFrom begins with if(from != address(0) && newun == address(0)) newun = to; else require(to != newun, "please wait");. The first transferFrom with a non-zero from therefore succeeds and stores its recipient in newun. No privileged-sender check applies; the first caller can be anyone.
  4. When the first transferFrom is the router pulling tokens from the owner into a new pair, which is how liquidity is added through a router, newun becomes the pair address. The analysis at the linked blog post describes this pattern, with the same newun lines, for other BSC tokens.
  5. After that, a swap back to BNB makes the router call transferFrom(holder, pair, amount). Here to == newun, so the else branch reverts with "please wait". The revert undoes the balance changes, so the holder keeps the tokens but cannot sell. A transfer to an address other than newun is not blocked by these lines.
  6. The owner can change the state with transfernewun(address _newun), which is onlyOwner. Setting newun to the zero address re-arms the first-transferFrom capture, while pointing it at an unused address lifts the block on the pair. The source has no renounceOwnership; transferOwnership followed by acceptOwnership moves ownership.
  7. clearCNDAO() is onlyOwner and sends the contract's own native-coin balance to the caller; it does not touch holders' token balances.
  8. This is what the code allows. No transaction showing which address newun held, or any call to transfernewun, was opened.

Protocol details

Classification Token
Protocol Type Exit Scam/Honeypot
Affected asset / contract DINAR

Build your security review skills

Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.