Skip to main content

Deployments

Ethereum Mainnet

ContractAddress
MainnetDeployer0xd3Aa12B99892b7D95BBAA27AEf222A8E2a038C0C
TokenJar (AssetSink)0xf38521f130fcCF29dB1961597bc5d2B60F995f85
Releaser (Firepit)0x0D5Cd355e2aBEB8fb1552F56c965B867346d6721
V3FeeAdapter0x5E74C9f42EEd283bFf3744fBD1889d398d40867d
UNI0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984

Unichain

ContractAddress
UnichainDeployer0xD16c47bf3ae22e0B2BAc5925D990b81416f18dea
TokenJar0xD576BDF6b560079a4c204f7644e556DbB19140b5
Releaser (OptimismBridgedResourceFirepit)0xe0A780E9105aC10Ee304448224Eb4A2b11A77eeB

Deployment Process

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