{
"badges": [],
"description": "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 2-day timelock, holds two bounded control powers over v3 pools: enabling new fee tiers and setting a protocol fee capped at 1/4 of LP fees per side. Under the current UNIfication configuration, collected protocol fees are exchanged by the Firepit for UNI sent permanently to 0xdead; governance can change this disposal path after the timelock.",
"detailedDescription": "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 operator 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.\n\nUNI 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.\n\n### Pools and concentrated liquidity\n\nEach 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.\n\nThe 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.\n\nPool creation is permissionless: 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).\n\n### Providing liquidity\n\nLiquidity 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.\n\n### Swapping\n\nSwaps 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.\n\n### The built-in oracle\n\nEvery 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 gas cost to grow the observation buffer, lengthening the window the pool can serve.\n\n### Governance and the fee switch\n\nProtocol 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 blocks 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.\n\nOver 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.\n\nThe 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.\n\nUnder 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.\n\nGovernance 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.",
"links": {
"websites": [
"https://app.uniswap.org/"
],
"documentation": [
"https://docs.uniswap.org/contracts/v3/overview"
],
"repositories": [
"https://github.com/Uniswap/v3-core"
],
"socialMedia": [
"https://x.com/Uniswap"
]
},
"references": [
{
"title": "Uniswap v3 Core Whitepaper",
"url": "https://app.uniswap.org/whitepaper-v3.pdf"
},
{
"title": "UNIfication proposal (protocol fees & UNI burn)",
"url": "https://vote.uniswapfoundation.org/proposals/93"
}
]
}
colors+1-0
null
ecosystemColors+1-0
null
milestones+1-0
null
chainConfig+1-0
null
escrows+1-0
null
bridgeInfo+1-0
null
bridgeRisks+1-0
null
bridgeTechnology+1-0
null
scalingInfo+1-0
null
scalingStage+1-0
null
scalingRisks+1-0
null
scalingDa+1-0
null
scalingTechnology+1-0
null
daLayer+1-0
null
daBridge+1-0
null
customDa+1-0
null
zkCatalogInfo+1-0
null
interopConfig+1-0
null
privacyInfo+1-0
null
defiInfo+3-0
{
"category": "DEX"
}
externalDependencies+1-0
[]
tvsInfo+1-0
null
tvsConfig+1-0
null
activityConfig+1-0
null
livenessInfo+1-0
null
livenessConfig+1-0
null
costsInfo+1-0
null
trackedTxsConfig+1-0
null
daTrackingConfig+1-0
null
ecosystemInfo+1-0
null
ecosystemConfig+1-0
null
permissions+23-0
{
"ethereum": {
"roles": [],
"actors": [
{
"id": "GovernorBravo",
"name": "GovernorBravo",
"accounts": [
{
"address": "eth:0x408ED6354d4973f66138C91495F2f2FCbd8724C3",
"type": "Contract",
"isVerified": true,
"name": "0x408E…24C3",
"url": "https://etherscan.io/address/0x408ED6354d4973f66138C91495F2f2FCbd8724C3"
}
],
"chain": "ethereum",
"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.\n* Can upgrade **with 2d delay**\n * GovernorBravo [via: Timelock with 2d delay]\n* Can interact with Firepit\n * can change the burn-token amount required per token-jar release **with 2d delay** [via: Timelock with 2d delay]\n * can replace the thresholdSetter **with 2d delay** [via: Timelock with 2d delay]\n* Can interact with Timelock\n * can queue, cancel, and execute timelocked transactions, and change the delay or admin (through the timelock itself) \n* Can interact with UNIToken\n * can mint up to 2% of the token supply per mint after the minimum 1y interval, and set a new minter **with 2d delay** [via: Timelock with 2d delay]\n* Can interact with UniswapV3Factory\n * 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** [via: Timelock with 2d delay → V3OpenFeeAdapter]\n* Can interact with GovernorBravo\n * can set the voting delay, the voting period, and the proposal threshold **with 2d delay** [via: Timelock with 2d delay]\n* Can interact with V3OpenFeeAdapter\n * can enable new fee tiers, change the feeSetter, and transfer UniswapV3Factory ownership to a new contract **with 2d delay** [via: Timelock with 2d delay]\n * sets the protocol fee schedule (global default, per-tier defaults, per-pool overrides) that anyone can then apply to pools **with 2d delay** [via: Timelock with 2d delay]\n* Can interact with TokenJar\n * can replace the releaser and thereby redirect all held and future token balances **with 2d delay** [via: Timelock with 2d delay]",
"discoveryDrivenData": true
}
]
}
}
contracts+202-0
{
"addresses": {
"ethereum": [
{
"name": "Permit2",
"isVerified": true,
"address": "eth:0x000000000022D473030F116dDEE9F6B43aC78BA3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x000000000022D473030F116dDEE9F6B43aC78BA3#code"
},
{
"name": "Firepit",
"isVerified": true,
"address": "eth:0x0D5Cd355e2aBEB8fb1552F56c965B867346d6721",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n* Roles:\n * **owner**: Timelock; ultimately GovernorBravo\n * **thresholdSetter**: Timelock; ultimately GovernorBravo",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0D5Cd355e2aBEB8fb1552F56c965B867346d6721#code"
},
{
"name": "Timelock",
"isVerified": true,
"address": "eth:0x1a9C8182C09F50C8318d769245beA52c32BE35BC",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n* Roles:\n * **admin**: GovernorBravo",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1a9C8182C09F50C8318d769245beA52c32BE35BC#code"
},
{
"name": "UNIToken",
"isVerified": true,
"address": "eth:0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n* Roles:\n * **minter**: Timelock; ultimately GovernorBravo",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984#code"
},
{
"name": "UniswapV3Factory",
"isVerified": true,
"address": "eth:0x1F98431c8aD98523631AE4a59f267346ea31F984",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n* Roles:\n * **owner**: V3OpenFeeAdapter; ultimately GovernorBravo",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1F98431c8aD98523631AE4a59f267346ea31F984#code"
},
{
"name": "UniversalRouter",
"isVerified": true,
"address": "eth:0x66a9893cC07D91D95644AEDD05D03f95e1dBA8Af",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x66a9893cC07D91D95644AEDD05D03f95e1dBA8Af#code"
},
{
"name": "SwapRouter02",
"isVerified": true,
"address": "eth:0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45#code"
},
{
"name": "UniswapV3Pool_USDC_WETH_005",
"isVerified": true,
"address": "eth:0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640#code"
},
{
"name": "NonfungiblePositionManager",
"isVerified": true,
"address": "eth:0xC36442b4a4522E871399CD717aBDD847Ab11FE88",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC36442b4a4522E871399CD717aBDD847Ab11FE88#code"
},
{
"name": "UniswapV3Pool_WBTC_WETH_03",
"isVerified": true,
"address": "eth:0xCBCdF9626bC03E24f779434178A73a0B4bad62eD",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCBCdF9626bC03E24f779434178A73a0B4bad62eD#code"
},
{
"name": "SwapRouter",
"isVerified": true,
"address": "eth:0xE592427A0AEce92De3Edee1F18E0157C05861564",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE592427A0AEce92De3Edee1F18E0157C05861564#code"
},
{
"name": "V3OpenFeeAdapter",
"isVerified": true,
"address": "eth:0xf2371551Fe3937Db7c750f4DfABe5c2fFFdcBf5A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n* Roles:\n * **feeSetter**: Timelock; ultimately GovernorBravo\n * **owner**: Timelock; ultimately GovernorBravo",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf2371551Fe3937Db7c750f4DfABe5c2fFFdcBf5A#code"
},
{
"name": "TokenJar",
"isVerified": true,
"address": "eth:0xf38521f130fcCF29dB1961597bc5d2B60F995f85",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Token escrow whose releaser can transfer held balances. The owner can replace the releaser, changing who controls accumulated and future deposits.\n* Roles:\n * **owner**: Timelock; ultimately GovernorBravo",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf38521f130fcCF29dB1961597bc5d2B60F995f85#code"
}
]
},
"risks": []
}