The StabilityPool
contract is designed to be upgradeable and inherits from OpenZeppelin’s upgradeable versions of Ownable
, Pausable
and uses Initializable
. However, it imports and uses the non‑upgradeable ReentrancyGuard
.
The StabilityPool
contract imports @openzeppelin/contracts/utils/ReentrancyGuard.sol
the non-upgradable version rather than using @openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol
. The non‑upgradeable ReentrancyGuard
is not designed with storage gaps or initializer patterns necessary for upgradeable contracts. As a result, its storage layout may conflict with that of upgradeable base contracts, leading to unexpected behavior if the contract is upgraded.
There is also another issue in this contract. Its constructor
does not call the _disableInitializers()
function on the implementation contract which is considered a best practice for proxy contracts.
The storage layout of the StabilityPool
contract might be corrupted during upgrading.
Manual review
Import and inherit the upgradable version of ReentrancyGuard contract.
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.