Gas inefficient order of loops 'enterRaffle'
Function 'enterRaffle' first stores the input in a state variables (which incurs considerable cost) and after that checks for duplicates which would revert the costly storage but the gas would have already been spent.
Having in minds that there is a mechanism in the contract to leave duplicates (address(0)) in the 'players' array this logic is guaranteed to spend senders gas and never allow them to actually enter the raffle.
Manual review
I would suggest to reconsider the type of structure that is used for storing the players and/or remove the possibility to refund users (which enters duplicate address(0) in the 'players' structure).
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.