The requestMintWeatherNFT function does not check whether a keeper is already registered before attempting to register them again. If a user calls the function with _registerKeeper = true, and the address has already been registered as a keeper previously, it could result in:
duplicate registrations
LINK token transfer waste
potential overwrites of keeper-related logic or data
This missing check undermines the assumption that each keeper is unique and registered only once.
Likelihood:
A user may repeatedly call requestMintWeatherNFT with _registerKeeper = true, either by accident or maliciously.
The contract currently has no internal check preventing this, so it allows LINK transfers and stores duplicate keeper intents.
Impact:
Keeper registry corruption: if additional logic is built around registeredKeepers, unexpected overwrites may occur.
Wasted LINK: repeated safeTransferFrom calls drain the user's LINK balance.
Inconsistent behavior: contract functions relying on single-registration assumptions may malfunction.
Add a mapping(address => bool) to track registered keepers and a helper function isKeeperRegistered(address) to check the registration status. Then, update the requestMintWeatherNFT function to revert if the caller is already registered before proceeding with the keeper registration logic.
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.