When two users match, matchRewards() deploys a new MultiSigWallet and sends reward ETH to it. The address of that wallet is the only way the two matched users can interact with their funds.
The deployed address is assigned to a local variable multiSigWallet but is never stored in any mapping and no event is emitted containing it. Users have no on-chain mechanism to look up which MultiSig belongs to their match.
The existing Matched event is emitted in likeUser before matchRewards is called and contains only the two user addresses — not the wallet address.
Likelihood:
Every match deployment loses its wallet address. Every matched pair is affected.
Impact:
Matched users must scan historical transaction data off-chain to find their MultiSig. Wallets without a frontend index (block explorer, dedicated subgraph) cannot surface the address to users at all, effectively hiding their funds.
A static grep of the source confirms the issue. Matched is emitted before matchRewards is called, so the event carries no wallet address. Inside matchRewards, the deployed wallet address is stored only in a local variable that goes out of scope when the function returns.
Matched is emitted on line 44, before matchRewards runs on line 45. The wallet is deployed inside matchRewards on line 62 with no subsequent event emission. Users listening for Matched receive no wallet address.
Store the deployed wallet address in a mapping and extend the Matched event to include it:
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.