A user pays 1 ETH or more for each like. If the like is never returned, or the liked profile is blocked by the owner or burned, the money should not be lost forever.
LikeRegistry has no function that returns ETH to users. Funds only leave through matchRewards (needs a mutual like) or withdrawFees (owner only, limited to totalFees). Likes to someone who never likes back, or who gets blocked / burns their profile (then likeUser towards the liker is impossible because the liked user has no profile), are stuck forever. This remains true after fixing F1 (userBalances would hold the value but nothing lets the user take it back).
Path:
Alice likes Bob with 1 ETH.
The owner blocks Bob (or Bob burns his profile, or simply never likes Alice).
Bob can never like Alice back (Must have a profile NFT), so no match will ever happen.
Alice has no way to get her 1 ETH back; the owner cannot withdraw it either (it is not part of totalFees).
Likelihood:
Most likes in a dating app are not returned; blocks and profile deletions are normal operations.
Impact:
Every unreturned like permanently locks at least 1 ETH of user funds; across the user base this is the majority of all deposits.
Test setup: owner deploys SoulboundProfileNFT and LikeRegistry(address(nft)); alice, bob, carol each get 10 ETH and mint a profile (token ids 1, 2, 3). Full file test/AuditPoC.t.sol, forge test --mc AuditPoC passes.
Let users withdraw unmatched like payments (or refund after a timeout), keeping the pooled amount accounted per user:
If the product requires funds to stay locked until a match, add an expiry after which the liker can reclaim.
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.