MerkleAirdrop declares event MerkleRootUpdated(bytes32 newMerkleRoot). The existence of this event signals to integrators and auditors that a function exists to update the Merkle root — a critical parameter that determines which addresses are eligible to claim.
No function in MerkleAirdrop emits MerkleRootUpdated. The merkle root is stored in bytes32 private immutable i_merkleRoot, which is set at construction and can never change. The event is unreachable dead code that misleads every reader about the contract's actual capabilities.
Likelihood:
Every reader of the contract sees the event and reasonably concludes an update path exists.
Impact:
Integrators building dashboards or monitoring that listen for MerkleRootUpdated will never receive it, causing silent failures in their off-chain systems.
The presence of the event creates false confidence that the Merkle root can be corrected if errors are found in the airdrop list — in reality, any correction requires a full redeployment.
The test records all logs emitted during a full claim cycle and confirms that no event with the MerkleRootUpdated topic is ever produced. It also reads i_merkleRoot before and after the claim to confirm the value is unchanged — proving the root is immutable and the event can never fire.
No log with the MerkleRootUpdated topic appears across the entire lifecycle, confirming the event is unreachable dead code.
Remove the unused event, or replace immutable with a state variable and implement the setter the event implies:
If root mutability is not desired, simply delete the event declaration to eliminate the misleading signal.
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.