AstroCum Honeypot
What happened
AstroCum (ASCUM, 3 decimals) blocks transfers to one stored address, newun. The first transferFrom call with a non-zero from writes its recipient into newun: if(from != address(0) && newun == address(0)) newun = to;. After that, every transferFrom and transfer whose recipient equals newun reverts with please wait.
A router-based liquidity add or sale calls transferFrom with the pool as recipient, so if the pool is the first recipient captured, selling into it is blocked, while buying (the pool paying out with transfer to a different address) is not. The owner can change newun through transfernewun: setting it to an unused address lifts the block, and setting it to zero makes the next transferFrom capture a new recipient. De.Fi's REKT database lists the token as an Exit Scam/Honeypot and describes it as: the contract owner could disable the transfer function, which restricted users in selling their tokens.
The listing dates the incident 2021-06-13 and gives no loss figure. A write-up by cryptot3ddybear describes this same function pattern in other BSC tokens (SafeRocket, SafeBinance).
How it happened
- The constructor sets
symbol = "ASCUM",name = "AstroCum",decimals = 3and_totalSupply = 5000 * 10**6 * 10**3(5e12 raw units, 5 billion tokens) and credits it withbalances[owner] = _totalSupply;, whereowneris the deployer, 0xFd520a1b…413605.newunstarts as the zero address. transferFromrunsif(from != address(0) && newun == address(0)) newun = to;for the first call that has a non-zerofrom. That call is not restricted and stores its recipient innewun. A router-based liquidity add callstransferFrom(provider, pool, amount), so the pool address is a natural first recipient; the opened source does not show which addressnewunholds on-chain.- On every later
transferFrom, theelsebranch runsrequire(to != newun, "please wait");. A sale through a router istransferFrom(holder, pool, amount), so withnewunequal to the pool it reverts for every sender, the owner included.transferhas the same guard:require(to != newun, "please wait");. - A pool paying out a purchase sends tokens to the buyer, whose address differs from
newun, so buys and wallet-to-wallet sends pass. - The owner can call
transfernewun(address _newun)(onlyOwner) at any time. Pointingnewunat an address nothing uses lifts the block; setting it to zero re-arms capture, and the nexttransferFromstores a new recipient. The reading ofowneron 2026-09-30 is still the deployer, and the source has norenounceOwnership; ownership moves only through the two-steptransferOwnershipandacceptOwnership. - What the code allows: holders can buy but, while
newunis the pool, cannot sell through a router, and the owner controls when that changes. What is documented as having happened: De.Fi's REKT database lists the token as an Exit Scam/Honeypot; no opened transaction shows whatnewunwas set to, any sale, liquidity removal or loss amount.
Protocol details
Evidence
- report De.Fi REKT database listing for ASCUM (fields supplied in meta.json; the Token Sniffer tweet 1381346761566916614 returned HTTP 404 via fxtwitter) twitter.com
- report Sourcify repository entry for the same contract (source, compiler 0.5.17, deployer and deploy block time) repo.sourcify.dev
- address BscScan verified source, AstroCum 0x2f8f4a84344a07f21d7556ccd5eeedeac5c2b500 bscscan.com
- analysis Scam explained: BSC stealthy LP block (cryptot3ddybear) cryptot3ddybear.gitlab.io
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.