<!-- canonical: https://0xsimao.com/findings/mitosis-initializable-constracts-initializers-initializer -->

# Initializable constracts should call _disableInitializers() in the constructor instead of using the initializer modifier

Low/Info · Three Sigma · Cross-chain liquidity layer 1 · 25th June, 2024

Finding 3S-Mitosis-N04 of the Mitosis security review.

- Protocol: https://mitosis.org/
- Report: /reports/mitosis
- Source: https://cdn.sanity.io/files/qoqld077/production/b6b3bd7bb47407d99e76abb7c6dc615c1db5018e.pdf

---

### Description

When locking the implementation contract, the usual behaviour is calling
_disableInitializers().

### Recommendation

For better readability, consider calling _disableInitializers() instead of placing the
initializer modifier in the constructor.

### Status

Addressed in [#70683f0](https://github.com/mitosis-org/evm/pull/195/commits/70683f019c098114e2a0328c671c87edb27227cc).

---

Related findings:

- [Missing `disableInitializers()` call in `StandardIDOPool::constructor()`](https://0xsimao.com/findings/blast-ido-pools-disable-initializers-standard-constructor): Blast IDO Pools
- [Missing disableInitializers() call in the constructor](https://0xsimao.com/findings/ostium-disable-initializers-call-constructor): Ostium
- [Midnight constructor can use `msg.sender` instead of reading `roleSetter` from storage](https://0xsimao.com/findings/morpho-midnight-midnight-reading-setter-storage): Morpho Midnight
- [Use of `address.transfer` instead of the recommended `address.call{value: amount}("")`](https://0xsimao.com/findings/blast-ido-pools-transfer-recommended-call-value): Blast IDO Pools
