The LikeRegistry protocol intends for users to deposit ETH when liking other users, track those deposits in userBalances, and upon mutual match distribute the pooled ETH (minus a 10% fee) to a newly deployed MultiSigWallet.
The likeUser() function accepts ETH via msg.value (requiring >= 1 ETH) but never writes to the userBalances mapping. When matchRewards() is triggered on a mutual match, it reads userBalances[from] and userBalances[to] -- both of which are always 0. This means totalRewards = 0, rewards = 0, and the MultiSig receives nothing. Additionally, totalFees is never incremented, so withdrawFees() always reverts. All ETH deposited by users is permanently locked in the contract with no recovery mechanism.
Likelihood:
This occurs on every single likeUser() call -- the bug is in the core user flow and affects 100% of interactions
Every mutual match triggers matchRewards() which reads the always-zero userBalances
Impact:
All ETH deposited by users via likeUser() is permanently locked in the LikeRegistry contract
The MultiSigWallet deployed on match receives 0 ETH instead of the pooled rewards
withdrawFees() always reverts since totalFees is never incremented, so even the protocol owner cannot extract any funds
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.