★ Reinitializable implementation (no _disableInitializers)
Uniswap (v2 + v3)'s assessment for RD-F-143 — scored not_applicable on the v1.7.0 rubric. The evidence below is the curator's reasoning for this score.
Evidence summary #
V2: not applicable (direct constructors, no proxy-initializer pattern). V3: not applicable (Factory/Pool use direct constructors; GovernorBravoDelegator uses EIP-897 delegation to immutable GovernorBravoDelegate; Permit2 and UniversalRouter are immutable stateless contracts). Combined: not_applicable.
Detail #
V2 Factory (0x5C69bEe7): Solidity 0.5.16, direct constructor — no Initializable pattern. V3 Factory (0x1F98431): Solidity 0.7.6, direct constructor — no Initializable pattern. V3 Pools: each pool deployed with constructor(address _factory, address _token0, address _token1, uint24 _fee, int24 _tickSpacing) — direct constructor. GovernorBravoDelegator (0x408ED6): EIP-897 delegate proxy with fixed implementation (0x53a328F4) — implementation is an immutable GovernorBravoDelegate, not a reinitializable proxy-style implementation. Permit2 (0x000000002): immutable stateless contract. UniversalRouter (0x66a9893c): immutable stateless contract. None of these use OZ Initializable or proxy-initializer patterns that _disableInitializers() is designed to protect against.
Sources #
- GitHubUniswapV3Factory sourceUniswapV3Factory.sol: direct constructor, no Initializable patternretrieved 2026-04-29
- Permit2 source on EtherscanPermit2 and UniversalRouter: no initializer pattern; confirmed immutable statelessretrieved 2026-04-29
Methodology #
Determine whether the implementation contract does not call `_disableInitializers()` in its constructor, leaving re-initialization possible.
See the full factor methodology and distribution across all protocols →