saferipple Honeypot
What happened
saferipple is a BEP-20 token on BNB Smart Chain whose transfer and transferFrom both revert when the recipient equals a stored address called newun. The contract fills newun itself on the first transferFrom call and the owner can reassign it with transfernewun. If newun ends up holding a liquidity pair address, a router-based sell, which calls transferFrom with the pair as recipient, reverts with "please wait".
De.Fi's REKT database lists saferipple as an Exit Scam/Honeypot in which the owner could restrict holders from selling. The code implements this as a recipient block on one address rather than a switch that disables all transfers. A third-party write-up of this code pattern describes newun being set to the pool address when liquidity is first added; it names other tokens, not saferipple.
How it happened
- The constructor mints the whole supply to the deployer (
balances[owner] = _totalSupply;, 1000000000000000000000000000 raw units at 18 decimals).newunis never set in the constructor, so it starts as the zero address. - The first
transferFromcall with a non-zerofromwhilenewunis unset runsif(from != address(0) && newun == address(0)) newun = to;. That call is not checked and completes normally, andnewunnow holds that call's recipient. A liquidity add that pulls tokens into a pair throughtransferFromwould record the pair, as the third-party write-up describes. The code itself does not name the pair. - After that,
transferFromrunselse require(to != newun, "please wait");andtransferrunsrequire(to != newun, "please wait");. A holder's sell through a router callstransferFromwith the pair as recipient, so it reverts whenevernewunis the pair. A buy moves tokens out of the pair to the buyer throughtransfer, which passes unless the buyer isnewun. - The owner can change the target with
transfernewun(address _newun). Pointing it at an unused address lifts the block; setting it to the zero address lets the nexttransferFromcapture its recipient again. The code has no function to renounce ownership;transferOwnershipfollowed byacceptOwnershiphands it to another address. - What actually happened is not established by the code. The record's listing says the token was a honeypot. No transaction showing
newunholding the pair, a failed sell, or a liquidity withdrawal was opened.
Protocol details
Evidence
- report Token Sniffer post listed as De.Fi proof link twitter.com
- address BscScan verified source for saferipple 0x39e2f6bc10176fdbde2173ea7828cb1b366c99a2 bscscan.com
- analysis Scam explained: BSC stealthy LP block cryptot3ddybear.gitlab.io
- analysis Sourcify repository entry for saferipple repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.