matchRewards() takes the user's entire userBalances on the first match, not just the 1 ETH associated with that specific like. Users who like multiple people and match with the first one send all their accumulated ETH to that single MultiSig.
A user who likes 5 people (5 ETH total) matches with the first one. That match's MultiSig receives 5 ETH from the user's side instead of 1 ETH. The remaining 4 potential matches deploy MultiSig wallets with 0 ETH from the user's side, even though each of those 4 people paid 1 ETH to like them.
Likelihood:
Any user who likes more than one person and matches with any of them triggers this. Liking multiple people is the expected usage pattern for a dating app. The order of matches is unpredictable, so which match gets the windfall is effectively random.
Impact:
Users who paid 1 ETH to like someone and later match get a MultiSig with 0 ETH from the other side. Their 1 ETH contribution goes to a shared wallet but they receive nothing back from the person they matched with. The first match receives a disproportionate windfall of all accumulated ETH.
The test shows Alice liking three users (3 ETH total). When Bob matches first, the MultiSig receives Alice's entire 3 ETH balance plus Bob's 1 ETH. When Charlie matches second, Alice's balance is already 0, so Charlie's MultiSig only gets Charlie's 1 ETH with nothing from Alice's side.
Track ETH per like pair instead of per user. Each match should only transfer the fixed 1 ETH from each side, so all matches are funded equally regardless of order. This removes the dependency on cumulative balance and ensures each counterparty gets fair value.
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.