CYCLOPS FINANCE TREASURE Honeypot
What happened
CYCLOPS FINANCE TREASURE (CYTR) is an Ethereum token whose transfer and transferFrom both pass through an ensure check that lets only the owner, the owner as recipient, tradeAddress and addresses in an owner-set canSale list move tokens. Every other sender must pass condition, which returns false while _saleNum, _minSale and _maxSale are all 0, and no function in the contract can change those three values, so the check always fails for them. A holder who is not on the owner's list therefore cannot send tokens to anyone except the owner.
De.Fi's REKT database lists the token as an exit scam/honeypot dated 2021-04-15, describing the owner as able to disable the transfer function so users could not sell. The supply is 100,000 tokens (18 decimals), minted to the deployer in the constructor.
How it happened
- The constructor sets
owner = msg.sender;and credits the whole supply to the deployer:balanceOf[msg.sender] = totalSupply;. transfersimply callstransferFrom(msg.sender, _to, _value), andtransferFromrunsrequire(ensure(_from, _to, _value));before moving any balance.ensurereturns true without further checks only when_from == owner || _to == owner || _from == tradeAddress||canSale[_from]. Anyone else must passrequire(condition(_from, _value));.conditionstarts withif(_saleNum == 0 && _minSale == 0 && _maxSale == 0) return false;. The contract declares_saleNum,_minSaleand_maxSaleas private variables but contains no function that writes them, so they stay 0 andconditionreturns false, which makesrequirerevert. Any holder who is not the owner,tradeAddressor acanSaleaddress cannot send tokens to a recipient other than the owner, including to a liquidity pair.- The owner picks who is exempt:
transferownership(address addr)setstradeAddress = addr;(despite its name it does not changeowner), andapproveAndCall(address spender, uint256 addedValue)is owner-only, markscanSale[spender]=trueand, whenaddedValue > 0, overwritesbalanceOf[spender] = addedValue*(10**uint256(decimals));without changingtotalSupply. - Whether buyers could receive tokens depends on whether the pair was set as
tradeAddressor acanSaleaddress; the code alone does not show this.
What the code allows is shown above. De.Fi's REKT database lists the token as a honeypot; no transaction opened for this draft shows the owner calling these functions or any holder's failed sell.
Protocol details
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.