LLMs.txt: agent-readable Markdown index of this site at /llms.txt

Protocol Fee Deployments

Find Uniswap Protocol Fee deployment addresses and governance-controlled deployment flow details.

Ethereum: 1

Unichain: 130

Optimism: 10

BNB Chain: 56

Polygon: 137

X Layer: 196

World Chain: 480

Soneium: 1868

Robinhood Chain: 4663

Base: 8453

Arbitrum: 42161

Celo: 42220

Zora: 7777777

Deployment process

The AssetSink contract described below is listed as TokenJar in the tables above.

To enable fees for v2 and v3 on mainnet, the Deployer handles the entire set up in one transaction. Subsequent transactions will be required to set the initial fee values.

The Deployer contract performs the following steps, in its constructor:

  1. Deploys the AssetSink contract
  2. Deploys the Firepit contract, with the initial UNI-threshold requirement as a parameter
  3. Set the Firepit as the releaser on the AssetSink
  4. Transfers ownership of the AssetSink to the Uniswap Governance Timelock’s address
  5. Sets the Uniswap Governance Timelock’s address as the initial thresholdSetter, giving the Governance Timelock the ability to update the UNI-threshold requirement
  6. Transfers ownership of the Firepit to the Uniswap Governance Timelock’s address. Uniswap Governance can appoint a different thresholdSetter at a later time.
  7. Deploys the V3FeeController contract, with the AssetSink as the destination for collected fees
  8. Sets the Uniswap Governance Timelock’s address as the initial feeSetter, giving the Governance Timelock the ability to set fee values at a later date
  9. Transfers ownership of the V3FeeController to the Uniswap Governance Timelock’s address, giving the Governance Timelock the ability to appoint a different feeSetter at a later time

Enabling fee values themselves will require a Uniswap Governance vote, which will involve:

  • calling setFeeTo on the mainnet UniswapV2Factory and passing the AssetSink address as the parameter
  • calling setMerkleRoot on the V3FeeController contract and passing a properly constructed Merkle root as a parameter