FLOUR FINANCIAL Honeypot
What happened
FLOUR FINANCIAL (FLR) is a BNB Smart Chain token whose compiled code stores an address in a public variable called newun. The first transferFrom call with a non-zero from while newun is empty sets newun = to, and after that every transfer or transferFrom whose recipient is newun reverts with "please wait". When newun is a liquidity pair, that stops holders from sending tokens into it, which is how a sale on a DEX is executed, while buys and liquidity removal are not covered by the check.
De.Fi's REKT database lists the token as an Exit Scam/Honeypot, describing a contract whose owner could disable the transfer function, which restricted users in selling their tokens.
How it happened
- The compiled
TokenBEP20constructor setssymbol = "FLR",name = "FLOUR FINANCIAL",decimals = 9and gives the whole supply toowner. A public variableaddress public newun;starts empty. transferFrombegins withif(from != address(0) && newun == address(0)) newun = to; else require(to != newun, "please wait");. The first call with a non-zerofromtherefore records its recipient innewunwithout any check. If that call is the router moving tokens into a new liquidity pair during the first liquidity deposit, the pair address is the one captured.- From then on,
transferFromtakes theelsebranch andrequire(to != newun, "please wait")reverts any transfer whose recipient isnewun.transferhas the same guard unconditionally:require(to != newun, "please wait");. - A holder selling through a router calls
transferFrom(holder, pair, amount). Withnewunset to the pair,to == newunand the call reverts, so the sale cannot go through. The check is on the recipient only, so a transfer fromnewunto another address, which is what a purchase from the pair is, is not blocked by it, and neither is the pair paying out to the address removing liquidity. - The owner can change the guard.
transfernewun(address _newun)isonlyOwnerand overwritesnewun. Pointing it at an address nobody uses lifts the block, while setting it toaddress(0)re-arms capture, so the nexttransferFromcall with a non-zerofromrecords its recipient as the new blocked address. flourfinancialalso exposesclearCNDAO(), restricted byonlyOwner, which sends the contract's own BNB balance to the owner. This is a separate power from the transfer guard.- This describes what the code allows. The supplied source does not show which address
newunheld, whether it was ever changed, or whether any liquidity was removed on this deployment. The same capture-then-block pattern is described in an analysis of other BSC tokens, which gives it as a pool captured at setup and then blocked withrequire(to != newun, "please wait").
Protocol details
Evidence
- report De.Fi REKT database listing for FLR (proof link: Token Sniffer tweet, returned 404) twitter.com
- report FLOUR FINANCIAL (FLR) source on Sourcify repo.sourcify.dev
- address FLOUR FINANCIAL (FLR) verified source on BscScan bscscan.com
- analysis Scam explained: BSC stealthy LP block (cryptot3ddybear blog) cryptot3ddybear.gitlab.io
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.