Competitive Audits
First Flights
Leaderboard
Docs
Toggle theme
Sign up
Log in
All First Flights
Puppy Raffle
Submissions
AI First Flight
Puppy Raffle
AI First Flight #1
Beginner Friendly
Foundry
Solidity
NFT
EXP
AI First Flight
EXP
Apr 6th, 2026 → Apr 6th, 2026
View repo
View results
10 / 10
Submissions
Severity
Validity
Tags
Author
#1
refund() sends ETH before zeroing player slot, enabling reentrancy to drain contract
High
Valid
[H-02] Reentrancy Vulnerabi...
virgilbb
#2
selectWinner() uses block.timestamp and block.difficulty for randomness, allowing miners to manipulate winner selection
High
Valid
[H-03] Randomness can be gamed
virgilbb
#3
totalFees cast to uint64 silently overflows when accumulated fees exceed 18.4 ETH, permanently locking fees
High
Valid
[H-05] Typecasting from uin...
virgilbb
#4
selectWinner() can select a refunded address(0) slot as winner, sending prizePool ETH to the zero address permanently
High
Valid
[H-01] Potential Loss of Fu...
virgilbb
#5
PuppyRaffle uses Solidity 0.7.6 which has no built-in overflow/underflow protection, allowing arithmetic in selectWinner() and enterRaffle() to silently produce wrong results
High
Valid
[H-06] Overflow/Underflow v...
virgilbb
#6
selectWinner() and refund() are vulnerable to front-running: a losing player can monitor the mempool and call refund() before selectWinner() confirms, exiting the raffle and stealing the fee pool
High
Valid
[H-07] Potential Front-Runn...
virgilbb
#7
enterRaffle() duplicate check uses O(n²) nested loop, enabling gas-limit DoS with a large players array
Medium
Valid
[M-01] `PuppyRaffle: enterR...
virgilbb
#8
withdrawFees() uses strict balance equality, permanently blocking fee withdrawal if any ETH is sent directly to the contract
Medium
Valid
[M-02] Slightly increasing ...
virgilbb
#9
selectWinner() counts refunded zero-address slots in totalAmountCollected, inflating the prize pool beyond the contract's actual balance
High
Valid
[H-04] `PuppyRaffle::refund...
virgilbb
#10
selectWinner() sends the prize to the winner with a low-level call; if the winner is a smart contract without a payable fallback, the transfer reverts and the raffle is permanently stuck
Low
Invalid
virgilbb
Previous
1
Next
Support
FAQs
Can't find an answer? Chat with us on Discord, Twitter or Linkedin.
What is Cyfrin CodeHawks?
What is a competitive audit?
How can I host a competition on CodeHawks?
How is a contest prize pool determined?
How do I get rewarded?
What is a First Flight?
Give us feedback!