AirDropper

AI First Flight #5
Beginner FriendlyDeFiFoundry
EXP
View results
Submission Details
Impact: low
Likelihood: low
Invalid

Claimed event parameters are not indexed, degrading off-chain claim tracking

Unindexed Claimed event makes off-chain filtering by account require a full log scan

Description

The Claimed event declares both parameters without indexed. Off-chain consumers cannot filter logs by account via topics and must scan and decode all Claimed events to find a specific recipient.

event Claimed(address account, uint256 amount); // @> account is not indexed; no topic filter possible

(src/MerkleAirdrop.sol:19)

Risk

Likelihood: Low

This is a non-exploitable interface/observability issue. It always applies to any integrator who wants per-account claim history, but it carries no on-chain security consequence.

Impact: Low

Indexers, dashboards, and front-ends must perform full-log scans and client-side filtering to answer "did account X claim?", increasing query cost and latency. It is an informational/best-practice gap rather than a fund-loss risk.

Proof of Concept

Filtering for a single account's claim cannot use an indexed topic and instead requires iterating all events.

function test_claimedNotIndexed() public {
vm.recordLogs();
airdrop.claim{value: airdrop.getFee()}(account, amount, proof);
Vm.Log[] memory logs = vm.getRecordedLogs();
// logs[0].topics.length == 1 (only the event signature); account is in `data`, not a topic
assertEq(logs[0].topics.length, 1);
}

Recommended Mitigation

Index the account parameter so consumers can filter by topic.

- event Claimed(address account, uint256 amount);
+ event Claimed(address indexed account, uint256 amount);
Updates

Lead Judging Commences

ai-first-flight-judge Lead Judge about 3 hours ago
Submission Judgement Published
Invalidated
Reason: Incorrect statement

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.

Give us feedback!