LikeRegistry.sol
matchRewards() deploys a MultiSigWallet via new but never stores the address in any state variable. No event emits the wallet address. Users have no on-chain way to discover their MultiSig wallet address.
Likelihood: High — Applies to every matched pair.
Impact: Medium — Even if H-01 is fixed, matched users cannot interact with their MultiSig (submit/approve/execute transactions) because they don't know its address.
Severity: Medium
SWC: SWC-135 (Code With No Effects — wallet is deployed but unusable)
CWE: CWE-404 (Improper Resource Shutdown or Release)
Evidence Grade: B
Alice and Bob create profiles and mutually like each other, triggering matchRewards(). A new MultiSigWallet(alice, bob) is deployed inside the function. After the transaction completes, neither Alice nor Bob can discover the wallet's address — there is no matchedWallets mapping, no getter function, and the Matched event only logs user addresses, not the wallet address. The only way to find it is by parsing internal transaction traces off-chain.
forge test --match-test test_FINDING006_multisig_not_stored -vvvv → PASS
The deployed wallet address must be persisted so both matched users can discover and interact with it on-chain. A bidirectional mapping (matchedWallets[A][B] and matchedWallets[B][A]) lets either user look up the wallet by providing their match partner's address. An indexed event provides off-chain discoverability for frontends and indexers. Together, these restore the invariant that every deployed MultiSig is reachable by its intended owners.
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.