Since RamNFT::choosingRamContract cannot be set in the contract constructor (due to a circular dependency), a separate RamNFT::setChoosingRamContract call is required to set choosingRamContract. Therefore, there exists a period where ChoosingRam::increaseValuesOfParticipants calls can revert due to its requirement to update NFT characteristics using RamNFT::updateCharacteristics. During this time, the RamNFT::onlyChoosingRamContract modifier will always revert privileged calls (updateCharacteristics), since choosingRamContract will be the default address type value (the zero address).
increaseValuesOfParticipants executes external calls to the RamNFT contract to both get and update NFT characteristics, however, if choosingRamContract is not set in RamNFT, updateCharacteristics will revert due to the onlyChoosingRamContract modifier.
increaseValuesOfParticipants can fail for a period of time , which is confusing for users and unintended behavior.
Manual Review
Ensure setChoosingRamContract is called immediately after deployment.
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.