The LikeRegistry contract maintains an implicit invariant:
```
contract.balance == sum(userBalances) + totalFees + pending_multisig_transfers
```
Using selfdestruct to force ETH is a known EVM behavior, not a hypothetical attack. The invariant violation is real and permanent. However, the practical impact is mild—the contract continues functioning, just with untracked ETH sitting idle. It's more of an accounting hygiene issue than an active exploit.
Leaving untracked ETH in a contract creates technical debt and potential future vulnerabilities. The fix is trivial:
Likelihood:
An attacker can send ETH directly to the contract using selfdestruct:
This ETH bypasses all accounting:
It's not added to any userBalances
It's not added to totalFees
It cannot be withdrawn via withdrawFees()
It remains in the contract indefinitely
Impact:
After forced ETH injection:
Contract balance no longer reflects tracked values
Accounting assumptions are permanently violated
Future features relying on balance correctness become unsafe
Protocol enters an irrecoverable inconsistent state
While no funds are directly stolen, the contract loses accounting integrity, which auditors and integrators rely on.
This invariant can be permanently violated through forced ETH injection via selfdestruct, creating untracked funds that cannot be withdrawn or redistributed.
Block direct ETH transfers:
Alternatively, track donations explicitly:
Then allow owner withdrawal:
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.