Medium
Medium
burnProfile() removes an active profile without resolving its pending like funds, leaving them locked in LikeRegistry.
The expected behavior is that a user who has already paid for a like should either be able to complete the match flow or recover the pending funds before deleting their profile.
Instead, burnProfile() deletes the profile immediately, while LikeRegistry keeps the paid-like state and balance tied to the address. After that, the counterparty can no longer complete the mutual match because the liked user no longer has a profile, and the payer has no refund path to recover the deposited ETH.
Likelihood: Medium
This occurs when a user pays for a like and then burns their profile before the counterparty sends the mutual like.
The state transition is reachable through normal user actions and does not require privileged access or unusual conditions.
Impact: Medium
Pending user funds can become irrecoverable because the mutual match can no longer be completed after the liked profile is deleted.
The protocol loses a valid path to either distribute or refund paid-like ETH, disrupting the intended fund flow.
The following test shows that after wallet_A pays for a like and burns the profile, wallet_B can no longer complete the mutual match because wallet_A no longer has a profile. The paid 1 ether remains credited in LikeRegistry, and no user-accessible recovery path exists.
Prevent profile deletion while the user still has pending funds recorded in LikeRegistry. This ensures a user cannot burn the profile before the paid-like flow has been
resolved.
A corresponding helper can be added to LikeRegistry:
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.