In the EggVault::withdrawEgg function, there is a change in state made before an external call EggstravaganzaNFT::transferFrom. This can result in an inconsistent state if the call runs out of gas or reverts after the state is changed but before the external call.
If the call runs out of gas once the state has been changed, but before the call to EggstravaganzaNFT::transferFrom, this can lead to a state inconsistency.
This will result in storedEggs[tokenId] = false and deletion of the mapping eggDepositors[tokenId] but the NFT not being transferred, leading to the loss of the NFT as subsequent calls to EggVault::withdrawEgg will revert on require(storedEggs[tokenId], "Egg not in vault");.
Loss of Player NFT.
Manual review.
Change the state only if the external call is successful:
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.