Horse Protocol Honeypot
What happened
De.Fi's REKT database lists Horse Protocol (HRS) on Ethereum as an Exit Scam/Honeypot and describes the contract owner as able to disable the transfer function, which restricted users from selling. In the verified source for 0x88cc09a5…80a53b, every transfer passes through ensure, which lets only the owner, a tradeAddress, or addresses marked canSale move tokens freely. For any other sender, condition returns false because its three limit variables are never assigned anywhere in the contract, so such transfers revert.
How it happened
- The constructor sets
owner = msg.sender;and credits the full supply to the deployer. transferforwards totransferFrom, andtransferFromcallsrequire(ensure(_from, _to, _value));before moving any balance.ensurereturns true early only forif(_from == owner || _to == owner || _from == tradeAddress||canSale[_from]). A holder's sell to the pool, or a transfer to another wallet, matches none of these unless the holder iscanSaleor the recipient is the owner.- For everyone else
ensurerunsrequire(condition(_from, _value));.conditionstarts withif(_saleNum == 0 && _minSale == 0 && _maxSale == 0) return false;. The variables_saleNum,_minSaleand_maxSaleare private and have no setter in the contract, so they stay at zero andconditionalways returns false. - Only the owner can widen the exemptions.
transferownership(addr)setstradeAddress = addr;(it does not changeowner), andapproveAndCall(spender, addedValue)setscanSale[spender]=true;. Buys from the pool work only if the owner has exempted the pool this way; the code does not show whether that was done. approveAndCallalso runsbalanceOf[spender] = addedValue*(10**uint256(decimals));, which overwrites a balance without changingtotalSupply. The owner can use it to create balance for an address; no transaction shown here proves it was used.
Protocol details
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.