The initialize function can lead to a state where the contract becomes partially initialized and unable to be re-initialized.
The onlyInit
modifier sets the implementation as initialized (_initializedImpls[impl] = true
) before the actual initialization code in the initialize
function is executed.
If the initialize
function fails or reverts after the modifier has run but before completing all initialization steps, the contract will be left in a partially initialized state and cannot be re-initialized.
Denial of service as it becomes impossible to properly initialize the contract after a failed initialization attempt.
Manual review
Modify the onlyInit
modifier to only check if the implementation is initialized, without setting it as initialized.
Move the initialization flag setting to the end of the initialize
function:
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.