MAINNETBETA

uniswap.org

3.7LOWmedium
6 sectionsrun #2
Findings1 critical7 high19 medium3 low
DEPGOVTKNAUDCTR
Last analyzed 2mo ago runs

Summary

Uniswap is the largest decentralized exchange by usage, with ~$2.9B TVL across 50+ chains and a seven-year track record of zero confirmed exploits in core v2/v3/v4 AMM contracts despite $2T+ cumulative volume. Ethereum mainnet admin actions route through UNI token voting, GovernorBravo, and a verified 2-day Timelock; core swap logic is immutable and heavily audited, including six tier-1 v4 reviews and a $15.5M Cantina bug bounty. The primary gap between marketing and on-chain reality is cross-chain governance: L2 v3/v4 factory and PoolManager admins do not answer to UNI holders—most critically, Arbitrum v4 is controlled by a single EOA with no timelock or multisig. Overall risk is low-to-moderate (3.7/10), driven by governance centralization on L2s, not by core contract fragility on Ethereum.

Trust Assumptions

Users must trust that (1) immutable core swap contracts on each chain match audited source and have not been replaced by unverified bytecode—two in-scope contracts (Ethereum SwapRouter02, Arbitrum V3Factory) currently block that assurance; (2) on Ethereum, UNI governance and the 2-day Timelock will not pass proposals that harm LPs or redirect fees maliciously, despite ~272M UNI (~27% of max supply) sitting in the Timelock treasury; (3) on Arbitrum, Base, Optimism, and Polygon, chain-local admins—especially the Arbitrum EOA 0x2BAD…46CD—will not abuse owner privileges over v3 fee tiers and v4 protocol-fee controllers; (4) swappers verify pool hook contracts before interacting with v4 pools, since permissionless hooks can alter swap amounts; and (5) users manage Permit2 and router approvals carefully, as phishing and third-party router abuse have caused ~$8M+ in user-side losses without compromising Uniswap core.

What Could Go Wrong

Compromise or misuse of the Arbitrum admin EOA could immediately reassign v4 PoolManager ownership or protocol-fee controllers on a chain holding significant liquidity—no UNI vote, no 2-day delay, no multisig co-signing required. A user swapping through a v4 pool with a malicious or buggy third-party hook could lose funds even though PoolManager core math is audited; Cork Protocol lost ~$12M via a hook exploit in May 2025. UNI governance capture or aggressive treasury deployment (~272M UNI in Timelock, top-10 holders at ~52%) could approve unfavorable fee changes, a 20M UNI/year growth budget that outpaces programmatic burns, or governance-logic upgrades via the GovernorBravo delegator proxy—each affecting value accrual and LP economics. Finally, unverified SwapRouter02 bytecode on Ethereum and unaudited per-chain deployments across 46+ networks create a deployment-equivalence blind spot where deployed logic may diverge from audited repositories.

Recommendation

Uniswap is suitable for substantial swap and LP exposure on Ethereum mainnet, where admin paths are Timelock-gated and core contracts are battle-tested. Treat Arbitrum and other L2 deployments as materially higher governance risk until admins are verified multisigs or bridged to Ethereum Timelock control—avoid large LP positions on Arbitrum v4 specifically while a single EOA holds PoolManager owner. Never interact with v4 pools without independently verifying hook contract source and behavior; prefer established pools with no hooks or audited hook implementations. Monitor UNI governance proposals (fee switches, treasury spend, GovernorBravo implementation changes), Certora M-02 status in v4, and Etherscan verification of SwapRouter02 and Arbitrum V3Factory. UNI holders should be cautious about treasury concentration and modest net inflation from the 2026 growth budget. Retail users should treat all Uniswap-branded airdrops and approval prompts as phishing until verified on official channels.

Key Findings (30)

critical
Arbitrum v4 PoolManager Owned by EOAaccess-control
high
Arbitrum V3Factory Admin Controlled by EOAaccess-control
high
Unverified SwapRouter02 on Ethereumverification
high
Unverified UniswapV3Factory on Arbitrumverification
high
L2 Deployments Not Controlled by Ethereum UNI Timelockcross-chain
high
Arbitrum Admin Is a Single EOAcentralization
high
v4 Permissionless Hooks Alter Swap Behaviorprotocol
high
Two In-Scope Contracts Are Unverified and Cannot Be Auditedverification-gap
medium
Cross-Chain Governance Divergenceaccess-control
medium
GovernorBravo Delegator Proxy Patternupgradability
medium
v4 PoolManager Owner Can Set Protocol Fee Controlleraccess-control
medium
v4 Flash Accounting Requires External Reentrancy Disciplinearchitecture
medium
GovernorBravo Implementation Is Upgradeableupgradeability
medium
High Holder and Treasury Concentrationconcentration
medium
Net Inflation After UNIfication Growth Budgetemission
medium
Governance Power Concentrated Among Few Delegatesgovernance
medium
Value Accrual Improved but Still Governance-Heavyutility
medium
LP Revenue Share Reduced by Protocol Feesincentives
medium
Internal TWAP Oracle Exposed to External Integratorsoracle
medium
Permit2 Shared Approval Layerprotocol
medium
Multi-Chain Admin Fragmentationgovernance
medium
Non-Standard Token Integration Risktoken
medium
Certora M-02 Tick/Price Invariant Acknowledged but Not Fixedaudit-gap
medium
Multi-Chain Deployments Lack Per-Chain Bytecode Verificationaudit-gap
medium
Draft v4 Audit Reports with Incomplete Fix Verificationaudit-gap
medium
April 2020 — Uniswap v1 ERC777/imBTC Reentrancy (~$1.1M)incident
medium
July 2022 — Phishing Campaign Impersonating Uniswap (~$8M)incident
low
V2Factory feeToSetter Held by Timelockaccess-control
low
Undeployed Contract Addresses on Several Chainsdeployment
low
v4 Protocol Fee Controller Unset on Mainnetconfiguration

Analysis Sections

Ethereum mainnet Uniswap is governed by on-chain UNI token voting through GovernorBravo and a 2-day Timelock (verified on-chain). Core v2/v3 pool contracts are immutable after deployment; v4 PoolManager ownership on mainnet sits with the Timelock. However, cross-chain governance is materially weaker: L2 v3/v4 factory and PoolManager admins are chain-specific addresses that do not route through Ethereum UNI governance—most critically, Arbitrum v3/v4 admin is an EOA (0x2BAD…46CD). Permit2 and Universal Router are immutable with no admin. Overall: credible DAO on mainnet, but L2 admin centralization is the primary governance risk.

Findings (8)

highL2 Deployments Not Controlled by Ethereum UNI Timelock

Uniswap v3 Factory and v4 PoolManager ownership on Arbitrum, Base, and Optimism uses chain-local admin addresses rather than the Ethereum Timelock (0x1a9C…35BC). On Arbitrum, both V3OpenFeeAdapter.owner and V4 PoolManager.owner resolve to EOA 0x2BAD8182C09F50c8318d769245beA52C32Be46CD (code length 0, nonce 8). On Base and Optimism, admins are small unverified contracts (~2840 bytes) with no Gnosis Safe interface. These admins can call owner-only functions such as enableFeeAmount (v3) and setProtocolFeeController/transferOwnership (v4) without UNI holder votes or a timelock delay.

on-chain RPC (Arbitrum)V3Factory.owner()=0xFF7aD5dA31fECdC678796c88B05926dB896b0699 → V3OpenFeeAdapter.owner()=0x2BAD8182C09F50c8318d769245beA52C32Be46CD (EOA); V4 PoolManager.owner()=0x2BAD8182C09F50c8318d769245beA52C32Be46CD
on-chain RPC (Base)V3OpenFeeAdapter.owner()=0x31FAfd4889FA1269F7a13A66eE0fB458f27D72A9; V4 PoolManager.owner()=0x31FAfd4889FA1269F7a13A66eE0fB458f27D72A9 (contract, not Timelock)
on-chain RPC (Optimism)V3OpenFeeAdapter.owner()=0xa1dD330d602c32622AA270Ea73d078B803Cb3518; V4 PoolManager.owner()=0xa1dD330d602c32622AA270Ea73d078B803Cb3518 (contract, not Timelock)
highArbitrum Admin Is a Single EOA

The Arbitrum deployment admin 0x2BAD8182C09F50c8318d769245beA52C32Be46CD has no contract code, is not a Gnosis Safe (getOwners/getThreshold revert), and holds owner privileges over both v3 fee-tier configuration (via V3OpenFeeAdapter) and v4 PoolManager ownership. Compromise of this key enables immediate admin actions with no on-chain delay or multisig co-signing.

on-chain RPC (Arbitrum)0x2BAD8182C09F50c8318d769245beA52C32Be46CD: code=0, nonce=8, Safe calls revert
mediumGovernorBravo Implementation Is Upgradeable

GovernorBravo uses a delegator/proxy pattern. _setImplementation is restricted to admin (the Timelock), meaning governance logic can be swapped via a successful UNI vote + timelock execution. Current implementation: 0x53a328F4086d7C0F1Fa19e594c9b842125263026. This is expected for Compound-style governors but represents a governance-controlled upgrade surface.

contract sourcerequire(msg.sender == admin) on _setImplementation; admin set to Timelock
on-chain RPC (Ethereum)GovernorBravo.implementation()=0x53a328F4086d7C0F1Fa19e594c9b842125263026, admin()=Timelock
lowv4 Protocol Fee Controller Unset on Mainnet

Ethereum v4 PoolManager.protocolFeeController() returns address(0). Protocol fee collection on v4 is not yet activated; when set, only the PoolManager owner (Timelock on mainnet) can assign the controller.

on-chain RPC (Ethereum)PoolManager.protocolFeeController()=0x0000000000000000000000000000000000000000
infoVerified 2-Day Timelock on Ethereum Mainnet

The Uniswap Timelock (0x1a9C8182C09F50C8318d769245beA52c32BE35BC) has delay=172800 seconds (2 days), GRACE_PERIOD=14 days, MINIMUM_DELAY=2 days, MAXIMUM_DELAY=30 days. Timelock.admin is GovernorBravo; pendingAdmin is zero. Governance-proposed actions queue through this delay before execution.

on-chain RPC (Ethereum)Timelock.delay()=172800, admin()=0x408ED6354d4973f66138C91495F2f2FCbd8724C3, GRACE_PERIOD=1209600
contract sourceTimelock MINIMUM_DELAY=2 days, MAXIMUM_DELAY=30 days, GRACE_PERIOD=14 days
infoOn-Chain GovernorBravo with UNI Token Voting

GovernorBravo (0x408ED6354d4973f66138C91495F2f2FCbd8724C3) is wired to the Timelock and UNI token. Verified parameters: votingDelay=13140 blocks (~1.8 days), votingPeriod=40320 blocks (~5.6 days), proposalThreshold=1,000,000 UNI, quorumVotes=40,000,000 UNI. Governor.admin is the Timelock (mutual admin pattern with Compound-style governance).

on-chain RPC (Ethereum)votingDelay=13140, votingPeriod=40320, proposalThreshold=1e24, quorumVotes=4e25, timelock()=0x1a9C8182C09F50C8318d769245beA52c32BE35BC, admin()=0x1a9C8182C09F50C8318d769245beA52c32BE35BC
infoMainnet Core Admin Roles Route to Timelock

On Ethereum, v2 Factory feeToSetter, v4 PoolManager owner, and UNI minter all resolve to the Timelock. V3 Factory owner is V3OpenFeeAdapter (0xf2371551Fe3937Db7c750f4DfABe5c2fFFdcBf5A), whose owner() is the Timelock—adding an indirection layer but preserving DAO control for fee-tier enablement.

on-chain RPC (Ethereum)V2 feeToSetter=0x1a9C…35BC; V4 owner=0x1a9C…35BC; UNI minter=0x1a9C…35BC; V3OpenFeeAdapter.owner()=0x1a9C…35BC
Etherscan0xf2371551Fe3937Db7c750f4DfABe5c2fFFdcBf5A verified as V3OpenFeeAdapter
infoIndividual Pool Contracts Are Immutable After Deployment

Uniswap v2 pairs and v3 pools have no admin keys after creation—liquidity cannot be seized via factory ownership. Factory owners can only enable new fee tiers (v3) or set protocol fee recipients (v2). v4 uses a singleton PoolManager where owner controls protocol fee settings but not existing LP balances. Permit2 and Universal Router have no owner/admin functions.

contract sourceV3 enableFeeAmount requires msg.sender == owner; individual UniswapV3Pool has no owner/admin

Governance Checklist

On-chain token voting (UNI + GovernorBravo)40M UNI quorum, 1M UNI proposal threshold
Timelock on mainnet admin actions2-day delay, 14-day grace period (verified on-chain)
Multisig (not EOA) for admin keysNo Gnosis Safe detected; Arbitrum admin is EOA
Consistent cross-chain governanceL2 admins differ from Ethereum Timelock
Core pool contracts immutablev2/v3 pools have no post-deploy admin
Governance only on EthereumUNI/Timelock/GovernorBravo exist only on mainnet

Key Governance Entities (Ethereum Mainnet)

tokenethereumUNI Token
governanceethereumGovernorBravo
timelockethereumTimelock
adapterethereumV3OpenFeeAdapter

Cross-Chain Admin Comparison

ChainV3 AdminV4 PoolManager OwnerMatches ETH Timelock
EthereumV3OpenFeeAdapter → TimelockTimelock (0x1a9C…35BC)Yes
ArbitrumV3OpenFeeAdapter → EOA 0x2BAD…46CDEOA 0x2BAD…46CDNo
BaseV3OpenFeeAdapter → 0x31FA…72A90x31FA…72A9 (contract)No
OptimismV3OpenFeeAdapter → 0xa1dD…35180xa1dD…3518 (contract)No
Loading dependency graph…