In both _finishGame and _handleTie, the accumulatedFees variable is updated before external ETH transfers are made using .call{value: ...}. If these external calls fail or revert, the entire function reverts — including the accumulatedFees update. This can lead to a situation where:
The protocol fails to retain earned fees.
accumulatedFees does not accurately reflect actual revenue.
An attacker using a malicious fallback (e.g., a Reverter contract) can block fee accumulation and grief the protocol.
_finishGame
_handleTie
Inaccurate accounting of fees collected.
Protocol may lose revenue if transaction reverts.
Griefing vector: A player using a contract with a reverting fallback can deliberately cause call failures, invalidating the fee update and breaking prize distribution.
Reverter joins a game and wins or ties.
call{value: ...} to Reverter fails.
Entire function reverts, including accumulatedFees += fee.
Move accumulatedFees += fee after successful ETH transfer:
For _handleTie, check both calls before updating fees:
Manual review
ETH sent directly to the contract via the receive function or after a canceled game becomes permanently locked
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.