Search

Search for projects and tokens by name or address

Uniswap V3 logo
Uniswap V3

About

Uniswap v3 is a concentrated-liquidity AMM where anyone can deploy an immutable, adminless pool for any token pair at an enabled fee tier. User funds sit only in the pools, which no one can upgrade or pause. UNI tokenholder governance, acting through a...


About

Uniswap v3 is a concentrated-liquidity AMM where anyone can deploy an immutable, adminless pool for any token pair at an enabled fee tier. User funds sit only in the pools, which no one can upgrade or pause. UNI tokenholder governance, acting through a...

Uniswap v3 is a concentrated-liquidity automated market maker: a set of immutable pool contracts on Ethereum where anyone can swap one ERC-20 token for another against liquidity other users have deposited. There is no operatorAn operator is the entity charged with managing a rollup and progressing its state. A rollup operator can be a centralized sequencer, proposer, prover, challenger, pauser of admin that is able to perform upgrades. in the trading path and user funds sit only in the pools, which have no admin, no pause switch, and no upgrade path. The periphery contracts most users interact with, the routers and the position manager, are conveniences that hold no user funds: any contract that implements the pools’ payment callbacks can trade and provide liquidity without them.

UNI tokenholder governance exists alongside the pools rather than above them. Acting through a 2-day timelock, it can enable new fee tiers and set a protocol fee that pool code hard-caps at one quarter of LP fees; it cannot upgrade or pause a pool, move liquidity providers’ funds, or censor swaps or pool creation.

Pools and concentrated liquidity

Each pool trades one pair of tokens at one fee tier. The price axis is divided into ticks, discrete points spaced 0.01% apart, and a liquidity provider concentrates capital into a chosen tick range instead of spreading it from zero to infinity as in earlier AMM designs. While the market price is inside the range, the position earns fees like a leveraged-up constant-product position; outside it, the position sits idle, fully converted into one of the two tokens. Internally the pool tracks the current price as sqrtPriceX96, the square root of the token1/token0 price in Q64.96 fixed-point form.

The factory currently has 4 swap fee tiers enabled: 0.01%, 0.05%, 0.3%, and 1% of each swap. Those fees accrue to in-range liquidity after any protocol-fee share. Each tier fixes which ticks are usable via a tick spacing, coarser at higher tiers: the 0.05% USDC/WETH pool can use every 10th tick, the 0.3% WBTC/WETH pool every 60th.

Pool creation is permissionlessAnyone willing should be able to join and leave the network at any time, without causing significant disturbance to the network or being detrimental to the party in question. No single entity should have the power to allowlist or blocklist participants.: anyone can have the factory deploy a pool for any token pair at any enabled tier, one pool per pair and tier. Pools are deployed with CREATE2, so a pool’s address is computable in advance from the factory address, the pair, and the fee. Once deployed, a pool never changes: its tokens, fee, and tick spacing are fixed. The only things anyone can later adjust are its oracle buffer size (permissionlessly, described below) and its protocol-fee share (governance-set, described below).

Providing liquidity

Liquidity providers commonly mint through the NonfungiblePositionManager, which wraps each position as a transferable ERC-721 NFT and does the fee accounting per token ID. For positions minted this way, the NFT holder uses the manager to add or remove liquidity and collect fees. The manager is a convenience, not a gatekeeper: a pool’s mint function is open to any contract that pays for the deposit in the pool’s callback, and the owner of a direct pool position can withdraw liquidity and collect fees by calling the pool’s burn and collect functions directly.

Swapping

Swaps normally go through a router: SwapRouter, SwapRouter02 (which also reaches Uniswap v2 pools), or the UniversalRouter, which can pull tokens through Permit2 instead of direct ERC-20 allowances to the router. Which pools a trade crosses is computed off-chain by the interface or a routing API, and the chain never verifies that the chosen route was the best one. Router swap calls encode a minimum output or maximum input, but deadline protection depends on the entrypoint: the original SwapRouter includes a deadline, while SwapRouter02 and UniversalRouter provide deadline-bearing wrappers or overloads alongside paths with no deadline. A transaction sent through a no-deadline path can execute later as long as its amount bound still passes. A bad route can therefore execute anywhere down to the signed minimum, so the slippage tolerance, not the quote, is the real protection; anything below it reverts. Swapping without any router is equally possible for a contract that pays the pool in its swap callback.

The built-in oracle

Every pool doubles as a price oracle: it records cumulative-tick observations from which anyone can read a time-weighted average price over a chosen window, without any off-chain reporter. A pool starts with a single observation slot, and anyone can pay a one-time gasA virtual fuel used to execute smart contracts on a rollup. The EVM (or other VM within the rollup) uses an accounting mechanism to correspond the consumption of gas to the consumption of computing resources, and to limit the consumption of computing resources. cost to grow the observation buffer, lengthening the window the pool can serve.

Governance and the fee switch

Protocol control sits with UNI holders. An address with more than 1,000,000 UNI of delegated votes can submit a proposal to GovernorBravo; voting starts 13,140 blocksAn ordered list of transactions and chain-related metadata that gets bundled together and published to the L1/DA layer. Nodes execute the transactions contained within blocks to change the rollup chain’s state. Protocol rules dictate what constitutes a valid block, and invalid blocks are skipped over. later and runs for 40,320 blocks. Passing takes more for- than against-votes and at least 40,000,000 UNI voting for. A passed proposal is queued in the Timelock and executable 2 days later. The same Timelock is the UNI token’s minter, with new issuance capped at 2% per mint and a minimum interval of 1 year.

Over pool behavior, governance holds exactly two control knobs, both exercised through the factory owner role. It can enable new fee tiers, each permanently bound to its tick spacing and never removable. And it can switch on the protocol fee: pool code requires each side’s share to be zero or between 1/10 and 1/4 of that side’s LP fees, so at most a quarter of swap fees, and never principal, can be diverted.

The protocol fee is switched on: since the UNIfication proposal the factory owner role sits with the V3OpenFeeAdapter, where governance sets the fee schedule (currently 1/4 of LP fees per side by default and 1/6 of LP fees per side on the 0.3% tier). Anyone can apply the scheduled fee to pools and, while the adapter remains factory owner, sweep accrued protocol fees to its hardcoded TokenJar.

Under the current configuration, the Firepit is the TokenJar’s releaser. Anyone can burn the configured threshold of UNI by sending it permanently to 0xdead, then release up to 20 selected TokenJar balances to a chosen recipient. This disposal path is governed rather than immutable: after the timelock, governance can replace the TokenJar releaser, change the Firepit threshold (including to zero), or transfer factory ownership so a new owner can collect accrued protocol fees to another recipient. These controls apply only to protocol-fee accounting and cannot withdraw liquidity providers’ principal.

Governance cannot upgrade, pause, or drain a pool, change a live pool’s swap fee or tick spacing, block a swap, or stop anyone from creating a pool at an enabled tier.

  1. Uniswap v3 Core Whitepaper
  2. UNIfication proposal (protocol fees & UNI burn)
Data source: DeFiLlama · Tracked chains: Ethereum

This project has no external dependencies: no oracle, bridge, or other third-party contract is required for its contracts to operate.

Ossification

Contracts our research team classifies as critical form the project's critical perimeter. Its clock starts at the ossification genesis, and every critical change resets it (changes within 24 hours count as one). The ossification score is the share of recorded code-bug exploits whose exploited code was younger than this perimeter is today. Battle-tested exposure is the value secured, summed over that unchanged period.

Ossification %
98since 4 May 2021
TVL & changes (1Y)
Battle-tested exposure
$12.25 B·yearsTVL (source: DefiLlama)
Critical changes / year
0across 4 contracts
Exit window
N/A

Discovery updates

14changes

Discovery rerun on the same block number with only config-related changes.

Initial discovery

+ Status: CREATED
contract Permit2 (eth:0x000000000022D473030F116dDEE9F6B43aC78BA3) [uniswapv3/Permit2]
+++ description: Signature-based token approval hub. Users grant it one ERC20 approval per token, then authorize spenders via time- and amount-bounded signed permits, revocable via lockdown. Immutable and ownerless; any spender with a valid permit can pull the permitted amount.
+ Status: CREATED
contract Firepit (eth:0x0D5Cd355e2aBEB8fb1552F56c965B867346d6721) [uniswapv3/Firepit]
+++ description: Burn-and-release contract: anyone can transfer the configured threshold (currently 4,000 UNI) to a fixed burn address and release selected balances from its token jar to a chosen recipient. The threshold setter can change the threshold, including to zero, and the owner can replace the threshold setter.
+ Status: CREATED
contract Timelock (eth:0x1a9C8182C09F50C8318d769245beA52c32BE35BC) [uniswapv3/Timelock]
+++ description: Compound-style timelock. Its admin can queue, cancel, and execute transactions. A queued transaction becomes executable after 2d and remains executable for a 14d grace period. The delay can be changed only through the timelock itself and must remain between 2d and 1mo. After the one-time admin initialization path has been used, changing the admin requires a timelocked self-call; there is no emergency bypass.
+ Status: CREATED
contract UNIToken (eth:0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984) [uniswapv3/Uni]
+++ description: ERC20 governance token with checkpoint voting. Its constructor mints a fixed initial supply; the minter can mint at most 2% of supply per mint, with a minimum interval of 1y. Votes count only when delegated.
+ Status: CREATED
contract UniswapV3Factory (eth:0x1F98431c8aD98523631AE4a59f267346ea31F984) [uniswapv3/UniswapV3Factory]
+++ description: Deploys Uniswap v3 pools: anyone can create one pool per token pair and enabled fee tier, at a CREATE2 address deterministic in (token0, token1, fee). Immutable. Its owner holds exactly three powers: enable new fee tiers (irreversible), call setFeeProtocol/collectProtocol on pools, and transfer the owner role. It cannot modify, pause, or upgrade deployed pools.
+ Status: CREATED
contract GovernorBravo (eth:0x408ED6354d4973f66138C91495F2f2FCbd8724C3) [uniswapv3/GovernorBravoDelegate]
+++ description: Upgradeable Governor Bravo governance proxy. Holders with more than the current proposal threshold of 1,000,000 UNI can create proposals. Voting begins 13,140 blocks after proposal creation and lasts 40,320 blocks; success requires more for-votes than against-votes and at least 40,000,000 UNI voting for. Successful proposals are queued in the configured timelock. The proxy admin can replace the implementation or nominate a new admin.
+ Status: CREATED
contract UniversalRouter (eth:0x66a9893cC07D91D95644AEDD05D03f95e1dBA8Af) [uniswapv3/UniversalRouter]
+++ description: Command-based router that executes caller-supplied operations such as v2/v3/v4 swaps, Permit2 transfers, WETH wrapping, and token sweeps in one transaction. Immutable and unprivileged; routes are computed off-chain by the caller.
+ Status: CREATED
contract SwapRouter02 (eth:0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45) [uniswapv3/SwapRouter02]
+++ description: Swap router covering both v2 and v3 pools with multicall batching. Immutable and unprivileged: it only moves funds of callers who approved it, along routes the caller encodes.
+ Status: CREATED
contract UniswapV3Pool_USDC_WETH_005 (eth:0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640) [uniswapv3/UniswapV3Pool]
+++ description: A concentrated-liquidity AMM pool for one token pair at one fee tier, deployed by the factory and fully immutable: no owner, no pause, no upgrade path. LPs provide liquidity on tick ranges; swap fees accrue to in-range positions. The factory owner can divert up to 1/4 of the swap fee per side as protocol fee. Also a TWAP oracle whose observation buffer anyone can grow.
+ Status: CREATED
contract NonfungiblePositionManager (eth:0xC36442b4a4522E871399CD717aBDD847Ab11FE88) [uniswapv3/NonfungiblePositionManager]
+++ description: Wraps pool positions into ERC721 NFTs: it is the pool-level owner of the wrapped positions and tracks each tokenId's range, liquidity, and fees, so NFT holders manage and collect through it. Immutable and unprivileged: no special rights in the pools, which can equally be used directly.
+ Status: CREATED
contract UniswapV3Pool_WBTC_WETH_03 (eth:0xCBCdF9626bC03E24f779434178A73a0B4bad62eD) [uniswapv3/UniswapV3Pool]
+++ description: A concentrated-liquidity AMM pool for one token pair at one fee tier, deployed by the factory and fully immutable: no owner, no pause, no upgrade path. LPs provide liquidity on tick ranges; swap fees accrue to in-range positions. The factory owner can divert up to 1/4 of the swap fee per side as protocol fee. Also a TWAP oracle whose observation buffer anyone can grow.
+ Status: CREATED
contract SwapRouter (eth:0xE592427A0AEce92De3Edee1F18E0157C05861564) [uniswapv3/SwapRouter]
+++ description: V3 swap router supporting single- and multi-hop exact-input and exact-output swaps. Immutable and unprivileged; it executes the route encoded by the caller.
+ Status: CREATED
contract V3OpenFeeAdapter (eth:0xf2371551Fe3937Db7c750f4DfABe5c2fFFdcBf5A) [uniswapv3/V3OpenFeeAdapter]
+++ description: Adapter for administering a configured Uniswap v3 factory. While it holds the factory owner role, anyone can ask it to apply configured protocol fees to pools or collect accrued fees to its fixed recipient. The fee setter controls global, per-tier, and per-pool fee settings; the owner can replace the fee setter, enable factory fee tiers, or transfer factory ownership.
+ Status: CREATED
contract TokenJar (eth:0xf38521f130fcCF29dB1961597bc5d2B60F995f85) [uniswapv3/TokenJar]
+++ description: Token escrow whose releaser can transfer held balances. The owner can replace the releaser, changing who controls accumulated and future deposits.
A dashboard to explore contracts and permissions
Go to Disco
Disco UI Banner

Ethereum

Actors:

GovernorBravo0x408E…24C3

Upgradeable Governor Bravo governance proxy. Holders with more than the current proposal threshold of 1,000,000 UNI can create proposals. Voting begins 13,140 blocksAn ordered list of transactions and chain-related metadata that gets bundled together and published to the L1/DA layer. Nodes execute the transactions contained within blocks to change the rollup chain’s state. Protocol rules dictate what constitutes a valid block, and invalid blocks are skipped over. after proposal creation and lasts 40,320 blocks; success requires more for-votes than against-votes and at least 40,000,000 UNI voting for. Successful proposals are queued in the configured timelock. The proxy admin can replace the implementation or nominate a new admin.

  • Can upgrade with 2d delay
    • GovernorBravo
  • Can interact with Firepit
    • can change the burn-token amount required per token-jar release with 2d delay
    • can replace the thresholdSetter with 2d delay
  • Can interact with Timelock
    • can queue, cancel, and execute timelocked transactions, and change the delay or admin (through the timelock itself)
  • Can interact with UNIToken
    • can mint up to 2% of the token supply per mint after the minimum 1y interval, and set a new minter with 2d delay
  • Can interact with UniswapV3Factory
    • can enable new fee tiers, set the protocol fee share (up to 1/4 of LP fees per side) on any pool, collect accrued protocol fees, and transfer factory ownership with 2d delay
  • Can interact with GovernorBravo
    • can set the voting delay, the voting period, and the proposal threshold with 2d delay
  • Can interact with V3OpenFeeAdapter
    • can enable new fee tiers, change the feeSetter, and transfer UniswapV3Factory ownership to a new contract with 2d delay
    • sets the protocol fee schedule (global default, per-tier defaults, per-pool overrides) that anyone can then apply to pools with 2d delay
  • Can interact with TokenJar
    • can replace the releaser and thereby redirect all held and future token balances with 2d delay
Used in:
A dashboard to explore contracts and permissions
Go to Disco
Disco UI Banner
A diagram of the smart contract architecture
A diagram of the smart contract architecture

Ethereum

Signature-based token approval hub. Users grant it one ERC20 approval per token, then authorize spenders via time- and amount-bounded signed permits, revocable via lockdown. Immutable and ownerless; any spender with a valid permit can pull the permitted amount.

Implementation used in:

Burn-and-release contract: anyone can transfer the configured threshold (currently 4,000 UNI) to a fixed burn address and release selected balances from its token jar to a chosen recipient. The threshold setter can change the threshold, including to zero, and the owner can replace the threshold setter.

  • Roles:
    • owner: Timelock; ultimately GovernorBravo
    • thresholdSetter: Timelock; ultimately GovernorBravo
Implementation used in:

Compound-style timelock. Its admin can queue, cancel, and execute transactions. A queued transaction becomes executable after 2d and remains executable for a 14d grace period. The delay can be changed only through the timelock itself and must remain between 2d and 1mo. After the one-time admin initialization path has been used, changing the admin requires a timelocked self-call; there is no emergency bypass.

  • Roles:
    • admin: GovernorBravo
Implementation used in:

ERC20 governance token with checkpoint voting. Its constructor mints a fixed initial supply; the minter can mint at most 2% of supply per mint, with a minimum interval of 1y. Votes count only when delegated.

  • Roles:
    • minter: Timelock; ultimately GovernorBravo
Implementation used in:
UniswapV3Factory0x1F98…F984

Deploys Uniswap v3 pools: anyone can create one pool per token pair and enabled fee tier, at a CREATE2 address deterministic in (token0, token1, fee). Immutable. Its owner holds exactly three powers: enable new fee tiers (irreversible), call setFeeProtocol/collectProtocol on pools, and transfer the owner role. It cannot modify, pause, or upgrade deployed pools.

  • Roles:
    • owner: V3OpenFeeAdapter; ultimately GovernorBravo
UniversalRouter0x66a9…A8Af

Command-based router that executes caller-supplied operations such as v2/v3/v4 swaps, Permit2 transfers, WETH wrapping, and token sweeps in one transaction. Immutable and unprivileged; routes are computed off-chain by the caller.

Implementation used in:
SwapRouter020x68b3…Fc45

Swap router covering both v2 and v3 pools with multicall batching. Immutable and unprivileged: it only moves funds of callers who approved it, along routes the caller encodes.

UniswapV3Pool_USDC_WETH_0050x88e6…5640

A concentrated-liquidity AMM pool for one token pair at one fee tier, deployed by the factory and fully immutable: no owner, no pause, no upgrade path. LPs provide liquidity on tick ranges; swap fees accrue to in-range positions. The factory owner can divert up to 1/4 of the swap fee per side as protocol fee. Also a TWAP oracle whose observation buffer anyone can grow.

NonfungiblePositionManager0xC364…FE88

Wraps pool positions into ERC721 NFTs: it is the pool-level owner of the wrapped positions and tracks each tokenId’s range, liquidity, and fees, so NFT holders manage and collect through it. Immutable and unprivileged: no special rights in the pools, which can equally be used directly.

UniswapV3Pool_WBTC_WETH_030xCBCd…62eD

A concentrated-liquidity AMM pool for one token pair at one fee tier, deployed by the factory and fully immutable: no owner, no pause, no upgrade path. LPs provide liquidity on tick ranges; swap fees accrue to in-range positions. The factory owner can divert up to 1/4 of the swap fee per side as protocol fee. Also a TWAP oracle whose observation buffer anyone can grow.

SwapRouter0xE592…1564

V3 swap router supporting single- and multi-hop exact-input and exact-output swaps. Immutable and unprivileged; it executes the route encoded by the caller.

V3OpenFeeAdapter0xf237…Bf5A

Adapter for administering a configured Uniswap v3 factory. While it holds the factory owner role, anyone can ask it to apply configured protocol fees to pools or collect accrued fees to its fixed recipient. The fee setter controls global, per-tier, and per-pool fee settings; the owner can replace the fee setter, enable factory fee tiers, or transfer factory ownership.

  • Roles:
    • feeSetter: Timelock; ultimately GovernorBravo
    • owner: Timelock; ultimately GovernorBravo

Token escrow whose releaser can transfer held balances. The owner can replace the releaser, changing who controls accumulated and future deposits.

  • Roles:
    • owner: Timelock; ultimately GovernorBravo
Implementation used in: