SnowmanAirdrop declares a private storage array s_claimers with a comment indicating it should track the
addresses of all claimers. No code path in the contract ever writes to this array — claimSnowman() sets
s_hasClaimedSnowman[receiver] = true and emits SnowmanClaimedSuccessfully, but never calls
s_claimers.push(receiver). The array is permanently empty.
Any off-chain integrations, dashboards, or future contract logic that depends on s_claimers to enumerate claim
recipients will silently receive an empty list. The slot occupies a storage position, paying deployment gas for
functionality that does not exist.
There is also no public getter for s_claimers, making it entirely unreachable from outside the contract even if
it were populated.
Likelihood:
When any developer or integrator queries the list of claimers expecting a populated array
When a future contract upgrade or airdrop phase attempts to iterate s_claimers to check prior recipients
When off-chain tooling reads contract storage slots expecting claimer data
Impact:
Off-chain systems relying on s_claimers receive an empty list — claimer history is silently incomplete
Any future contract logic gating on s_claimers.length > 0 or iterating the array will malfunction
Wasted storage slot and deployment gas with no functional benefit
The absence is statically verifiable. A grep for any write to s_claimers in the contract returns no results:
Either populate the array on each successful claim, or remove it entirely in favor of the event log (which
already provides an enumerable claimer history off-chain via SnowmanClaimedSuccessfully).
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.