0x927c…959c

All memos sent from and to 0x927c…959c.

# Activate v4 Protocol Fees (Part 1/2) ## Summary This proposal continues the protocol fee rollout approved in UNIfication, following proposals [#93](https://vote.uniswapfoundation.org/proposals/93), [#94](https://vote.uniswapfoundation.org/proposals/94), [#95](https://vote.uniswapfoundation.org/proposals/95), and [#96](https://vote.uniswapfoundation.org/proposals/96). It uses the expedited governance process where fee parameter update proposals go directly to a five-day Snapshot followed by an onchain vote. Protocol fees are now live across all v2 and v3 pools on 11 chains - Ethereum, Arbitrum, Base, Celo, OP Mainnet, Soneium, X Layer, Worldchain, Zora, BNB Chain, and Polygon. Last month, the protocol set a record burning [186,000 UNI in one day](https://x.com/UNIBurnBot/status/2063252718043459633). Below we introduce a system for v4 protocol fees and propose to activate it on a subset of v4 pools on these same chains. This onchain vote will specifically activate v4 fees on Ethereum, Arbitrum, Base, BNB Chain, Polygon, Optimism, and Robinhood Chain. Please note that because of GovernorBravo's limit of 10 actions per proposal, there will be two separate onchain votes to accommodate all chains. The remaining five chains (Celo, Soneium, Worldchain, X Layer, Zora) will be addressed in a subsequent proposal. --- ## Implementation Details v4's hook architecture requires a different approach to fee activation than v2 or v3. v2 pools have a single LP fee tier and are charged a static fee. v3 has several LP fee tiers, each charged a static fee. Hooks mean v4 has potentially infinite distinct LP fee tiers, and a pool's fees can change dynamically from one block to the next. To manage this, we propose a V4 Fee Controller system where governance sets rules that let a dedicated contract compute the fee for any pool on demand, rather than setting a fee on each individual pool. The system splits across two contracts: * **V4FeePolicy**. Given any pool, it computes the fee from rules defined by governance. This is the contract governance calls to enable and adjust the protocol fee, and it can be swapped out later if the logic for setting fees needs to evolve. * **V4FeeAdapter**. Enforces governance overrides, so if governance has set a per-pool override, that override wins and the policy is skipped. Otherwise the adapter applies the policy's fee, pushes it to the pool, and collects the proceeds to the TokenJar. `V4FeePolicy` determines a pool's fee in two steps. First it sorts the pool into a **family**. A pool's family is determined by its characteristics, e.g. whether it has a hook, whether it uses the `PoolManager`'s native swap math, whether it charges dynamic swap fees, et cetera. A pool's family is identified by a flag, which is stored on the hook smart contract. Hook developers can opt their pools into a family via assigning it a specific flag. Governance can also assign a hook to a family directly via a vote. Once it determines the pool's family, the policy then resolves the fee, applying the rules below, going in order from most specific to least: 1. a per-pair fee, if governance has set one for that token pair in that family 2. otherwise the family's own fee (defined by governance as a default or curve) 3. otherwise a global default for anything still unclassified With this system, governance manages a handful of rules and overrides instead of an unbounded list of pools, any fee is computed deterministically and can be inspected onchain, and the policy itself is replaceable if governance later wants to change how pools are categorized. This proposal activates fees on three pool families: * **Static fee pools:** These are pools without hooks. The protocol fee for these pools is set via a curve targeting a proportion of each pool's LP fee. For a description of this curve, please see the appendix below. * **CCA Pools**: These are pools launched after a Continuous Clearing Auction. The LBPHook and pools resulting from previous auctions will be opted into the same curve as static pools. * **Aggregator hook pools:** These are pools whose hooks integrate external liquidity venues into the v4 routing graph. The protocol fee for the aggregator hook family is a flat fee with overrides for specific pair types. To maintain the option of charging more on this external flow than the v4 PoolManager's hard cap of 10bps, aggregator hooks will multiply their assigned fees by 25, allowing for a cap of 250bps. After the multiplier is applied, the resulting fee for aggregator hooks will be: * For all chains other than Base: * Family Default: 10bp * Select Stable Pairs: 3bp * For Base: * Family Default: 3bp * Select Stable Pairs: 1bp **This proposal does not enable the protocol fee for any pools other than those in the Families mentioned above.** Fees will flow to TokenJar on each chain. UNI burned on L2s and alt-L1s will be bridged back to Ethereum mainnet and sent to `0xdead`. --- ## Onchain Proposal Spec **Pre-proposal** (to be completed by Uniswap Labs prior to an onchain vote) * Deploy V4FeeAdapter and V4FeePolicy contracts on the chains where the v2 and v3 protocol fees are currently enabled (Ethereum, Arbitrum, Base, Celo, OP Mainnet, Soneium, X Layer, Worldchain, Zora, BNB Chain, and Polygon). * Configure V4FeePolicy contracts with the native math protocol fee curve, CCA Hook and aggregator hook family fee logic described above These contracts can be found [here](https://github.com/Uniswap/protocol-fees/tree/main/src/feeAdapters), and this post will be updated with addresses and explorer links when they have been deployed. **In this proposal** (executed if the vote passes): * Set the `V4FeeAdapter` as the `ProtocolFeeController` on the PoolManager on each chain --- ## Next Steps / Timeline **Snapshot:** July 11-16, 2026 **Onchain vote:** July 19-26, 2026 --- ## Appendix - Static Fee Curve The V4 Fee Controller allows fee setting using discrete LP fee tier ranges. Each range has a floor, and the next range sets the ceiling. For each range, governance sets two inputs: * `alpha` which is the constant. This is the starting fee for that range. * `beta` which is the scaling factor. This is how fast the fee grows within that range. The growth always starts from the floor of the range. * Inside any range, the fee is: `alpha + beta * (lpFee - floor)`.The output is floored to the nearest 0.01bp increment, consistent with v4's minimum fee resolution. | *Range (bps)* | *Floor* | *Alpha (bps)* | *Beta (bps)* | | :---- | :---- | :---- | :---- | | *0 - 0.03* | *0* | *0.01* | *0* | | *0.03 - 0.75* | *0.03* | *0.01* | *19/72* | | *0.75 - 1* | *0.75* | *0.2* | *0.2* | | *1 - 3.75* | *1* | *0.25* | *3/11* | | *3.75 - 5* | *3.75* | *1* | *0.2* | | *5 - 25* | *5* | *1.25* | *11/80* | | *25 - 55* | *25* | *4* | *0.2* | | *> 55* | *55* | *10* | *0* | This results in the following fees at the following points. | LP Fee (bps) | Protocol Fee (bps) | | :---- | :---- | | 0.03 | 0.01 | | .75 | 0.20 | | 1 | 0.25 | | 3.75 | 1 | | 5 | 1.25 | | 25 | 4 | | 30 | 5 | | 83.34 | 10 | | 100 | 10 |
# [RFC] Update Crosschain Governance Parameters for Avalanche, MegaETH, Soneium, and X Layer ## Summary Secure crosschain messaging is an integral part of Uniswap's governance model. Governance votes like protocol fee adjustments are executed by UNI holders on Ethereum Mainnet and must subsequently be relayed to destination chains. This proposal updates Uniswap's crosschain governance system to accommodate the latest best practices. Specifically, we propose to: * Transition ownership of the Uniswap v2 and v4 contracts on Soneium and X Layer to CrossChainAccount contracts, which we consider to be the current best practice for executing messages from Ethereum Mainnet on the OP Stack * Migrate the entire messaging system for the Avalanche and MegaETH deployments from LayerZero v1 (part of which is [being deprecated](https://layerzero.network/blog/ongoing-security-updates)) to Wormhole Note that because Uniswap v3 on both Soneium and X Layer is owned by the `v3OpenFeeAdapter`, which is owned by the CrossChainAccount, we do not need to change the parameter on v3 on these chains. --- ## Specification ### Current Configuration - Avalanche and MegaETH Both chains currently use LayerZero v1 for governance messaging. The OmnichainProposalSender contract exists on Ethereum and sends messages to OmnichainGovernanceExecutor on remote chains. Additionally, there exists a second OmnichainGovernanceExecutor on MegaETH which owns the ProxyAdmin contract administering the PositionDescriptor periphery contract responsible for rendering LP positions as NFT's. | Contract | Chain | Address | | :---- | :---- | :---- | | OmnichainProposalSender | Ethereum | [0xeb0BCF27D1Fb4b25e708fBB815c421Aeb51eA9fc](https://etherscan.io/address/0xeb0BCF27D1Fb4b25e708fBB815c421Aeb51eA9fc) | | OmnichainGovernanceExecutor | Avalanche | [0xeb0BCF27D1Fb4b25e708fBB815c421Aeb51eA9fc](https://snowtrace.io/address/0xeb0BCF27D1Fb4b25e708fBB815c421Aeb51eA9fc) | | OmnichainGovernanceExecutor | MegaETH | [0x8819b86ddF592c3aaAa6f9ec7cE1A0f99FC4322c](https://mega.etherscan.io/address/0x8819b86ddF592c3aaAa6f9ec7cE1A0f99FC4322c) | | OmnichainGovernanceExecutor | MegaETH | [0x51F9629C1e75aF07421E662DBEb2B7dc8deDefd9](https://mega.etherscan.io/address/0x51F9629C1e75aF07421E662DBEb2B7dc8deDefd9) | ### Proposed Configuration - Avalanche and MegaETH The LayerZero contracts are replaced with the Wormhole bridge infrastructure from [uniswapfoundation/Uniswap-Wormhole-Bridge](https://github.com/uniswapfoundation/Uniswap-Wormhole-Bridge): **UniswapWormholeSender (Ethereum):** The existing sender contract already deployed on mainnet will be reused — no new deployment required. **UniswapWormholeReceiver (Avalanche and MegaETH):** Uniswap Labs has deployed new UniswapWormholeReceiver contracts on both chains. This proposal will authorize them as the trusted governance executors for each chain. Additionally, the ProxyAdmin owned by the second OmnichainGovernanceExecutor will be unified with under the authority of the UniswapWormholeReceiver on MegaETH. | Contract | Chain | Address | | :---- | :---- | :---- | | UniswapWormholeSender | Ethereum | [0xf5F4496219F31CDCBa6130B5402873624585615a](https://etherscan.io/address/0xf5F4496219F31CDCBa6130B5402873624585615a) | | UniswapWormholeReceiver | Avalanche | [0x47eB0Cf11a1626462Da3C830bCDe64c3F582B5a6](https://snowtrace.io/address/0x47eB0Cf11a1626462Da3C830bCDe64c3F582B5a6) | | UniswapWormholeReceiver | MegaETH | [0xa107580F73BD797Bd8b87Ff24e98346D99F93DdB](https://mega.etherscan.io/address/0xa107580F73BD797Bd8b87Ff24e98346D99F93DdB) | For a detailed discussion of how Wormhole works, please see [this report](https://uniswap.notion.site/Assessment-dac583c6db1240c7b9d294afd7f18035) by the Uniswap Foundation's Bridge Assessment Committee. ### Current Configuration - Soneium and X Layer On both chains, the UniswapV2Factory's feeToSetter parameter and the v4 PoolManager's owner parameter are configured as the mainnet Timelock's alias address. | Account | Chain | Address | | :---- | :---- | :---- | | Alias Address | X Layer | [0x2BAD8182C09F50c8318d769245beA52C32Be46CD](https://www.oklink.com/x-layer/evm/address/0x2bad8182c09f50c8318d769245bea52c32be46cd) | | Alias Address | Soneium | [0x2BAD8182C09F50c8318d769245beA52C32Be46CD](https://soneium.blockscout.com/address/0x2BAD8182C09F50c8318d769245beA52C32Be46CD) | ### Proposed Configuration - Soneium and X Layer This proposal will change those parameters to a CrossChainAccount contract deployed by Uniswap Labs. | Contract | Chain | Address | | :---- | :---- | :---- | | CrossChainAccount | X Layer | [0x044aAF330d7fD6AE683EEc5c1C1d1fFf5196B6b7](https://www.oklink.com/x-layer/evm/address/0x044aAF330d7fD6AE683EEc5c1C1d1fFf5196B6b7) | | CrossChainAccount | Soneium | [0x044aAF330d7fD6AE683EEc5c1C1d1fFf5196B6b7](https://soneium.blockscout.com/address/0x044aAF330d7fD6AE683EEc5c1C1d1fFf5196B6b7?tab=contract) | ### Onchain Proposal Spec **Pre-proposal** (already completed by Uniswap Labs): * Deploy `UniswapWormholeReceiver` on Avalanche C-Chain, configured with the Wormhole Core Bridge address for Avalanche and the address of the existing UniswapWormholeSender. * Deploy `UniswapWormholeReceiver` on MegaETH, configured with the Wormhole Core Bridge address for MegaETH and the address of the existing UniswapWormholeSender. * Deploy `CrossChainAccount` contracts on Soneium and X Layer **In this proposal** (executed if the vote passes): Execute nine actions: 1. (Ethereum) Set Layer Zero "trusted remote" to the OmnichainGovernanceExecutor on MegaETH 2. (MegaETH) Transfer ownership of the protocol from OmnichainGovernanceExecutor to UniswapWormholeReceiver 3. (Avalanche) Transfer ownership of the protocol from OmnichainGovernanceExecutor to UniswapWormholeReceiver 4. (Soneium) Transfer V2 ownership from the aliased Timelock to CrossChainAccount 5. (Soneium) Transfer V4 ownership from the aliased Timelock to CrossChainAccount 6. (XLayer) Transfer V2 ownership from aliased Timelock to CrossChainAccount 7. (XLayer) Transfer V4 ownership from the aliased Timelock to CrossChainAccount 8. (Ethereum) Set Layer Zero "trusted remote" to the second OmnichainGovernanceExecutor on MegaETH 9. (MegaETH) Transfer ProxyAdmin ownership from the second OmnichainGovernanceExecutor to UniswapWormholeReceiver Notable Implementation Details: Regarding MegaETH "trusted remote" configurations: The OmnichainProposalSender on Ethereum must be configured to send messages to the OmnichainGovernanceExecutor on MegaETH, but not the OmnichainGovernanceExecutor on Avalanche. This is due to our OmnichainProposalSender's configuration on initial deployment. The "trusted remote" is Layer Zero's means of defining which sender contracts may interact with which receiver contracts. Regarding ProxyAdmin: There exists two ProxyAdmin contracts per chain, one for the NonfungiblePositionDescriptor (V3 NFT renderer) and one for the PositionDescriptor (V4 NFT renderer). The ProxyAdmin of the V3 descriptor is owned a different OmnichainGovernanceExecutor than the OmnichainGovernanceExecutor which owns the rest of the protocol (including the V4 descriptor). We are transferring ownership of all of them to the same WormholeReceiver, which necessitates two separate "setTrustedRemote" actions (one for each governance executor) and two separate ownership transfer actions. Regarding CrossChainAccount: The low level OP-stack chain bridge uses OptimismPortal2. In short, OptimismPortal2's internal details means the protocol on Soneium and X Layer are owned by an "aliased" form of the Timelock address on Ethereum; this alias is derived from adding a standard offset to the Ethereum address. This is an unintuitive system and increases user-error in ownership transitions, so we are migrating to the higher level of abstraction defined by the CrosChainAccount system. This ensures the protocol on Soneium and X Layer are owned by a concrete contract with limits and authority checks from the messages bridged from Ethereum. We already use this system on other OP-stack chains, so this is to update more chains to use it as well. --- ## Next Steps / Timeline * **RFC:** Jun 26, 2026 * **Snapshot:** ~1 week after RFC * **Onchain vote:** Following Snapshot, per standard governance cadence --- ## Supporting Documents * [Uniswap Foundation Bridge Assessment Report](https://uniswap.notion.site/Bridge-Assessment-Report-0c8477afadce425abac9c0bd175ca382) * [Uniswap-Wormhole-Bridge GitHub](https://github.com/uniswapfoundation/Uniswap-Wormhole-Bridge) * [LayerZero v1 deprecation announcement](https://layerzero.network/blog/ongoing-security-updates) * [Original Avalanche deployment proposal](https://gov.uniswap.org/t/deploy-uniswap-v3-on-avalanche/20587)
# Return 12.5M Delegated Tokens to the Governance Timelock ## Background & Motivation These UNI were delegated from the treasury in 2022 and 2023 – 2.5M to the Uniswap Foundation and 10M to a group of active delegates - during periods of low governance participation. The delegations aimed to establish an active delegate base when quorum faced risks. The governance landscape has transformed significantly. Token holders actively delegate voting power, and since DUNI's establishment, passed proposals have averaged roughly 75 million votes in turnout, exceeding quorum by approximately 88%. Over 50 delegates now hold more than 1M UNI in voting power. Undelegating these tokens addresses potential misalignment created by the Franchiser mechanism itself. While selected delegates participated actively in governance, the Franchiser didn't ensure structural alignment between voting power and economic exposure. This misalignment should not persist when the original implementation rationale no longer applies. ## Specification This proposal invokes `recallMany` on the FranchiserFactory contract (0xf754A7E347F81cFdc70AF9FbCCe9Df3D826360FA) to retrieve all UNI currently delegated through the Franchiser system, returning the recalled tokens to the Governance Timelock (0x1a9C8182C09F50C8318d769245beA52c32BE35BC). Eight Franchiser delegations are targeted for undelegation, totaling ~12.5M UNI: | **Recipient** | **Address** | **Votes** | | --- | --- | --- | | Uniswap Foundation | [`0xA37131410A76791f4A0210e91EDD554d85aFb4d4`](https://etherscan.io/address/0xA37131410A76791f4A0210e91EDD554d85aFb4d4) | 2,500,001.19 | | Anode | [`0xECC2a9240268BC7a26386ecB49E1Befca2706AC9`](https://etherscan.io/address/0xECC2a9240268BC7a26386ecB49E1Befca2706AC9) | 2,499,858 | | Axia Network | [`0xE93D59CC0bcECFD4ac204827eF67c5266079E2b5`](https://etherscan.io/address/0xE93D59CC0bcECFD4ac204827eF67c5266079E2b5) | 2.25M | | PGov | [`0x3fb19771947072629c8eee7995a2ef23b72d4c8a`](https://etherscan.io/address/0x3fb19771947072629c8eee7995a2ef23b72d4c8a) | 2.25M | | Wintermute | [`0xB933AEe47C438f22DE0747D57fc239FE37878Dd1`](https://etherscan.io/address/0xB933AEe47C438f22DE0747D57fc239FE37878Dd1) | 1.9M | | Keyrock | [`0x1855f41B8A86e701E33199DE7C25d3e3830698ba`](https://etherscan.io/address/0x1855f41B8A86e701E33199DE7C25d3e3830698ba) | 494K | | KPK | [`0x8787FC2De4De95c53e5E3a4e5459247D9773ea52`](https://etherscan.io/address/0x8787FC2De4De95c53e5E3a4e5459247D9773ea52) | 453K | | Atiselsts.eth | [`0xAac35d953Ef23aE2E61a866ab93deA6eC0050bcD`](https://etherscan.io/address/0xAac35d953Ef23aE2E61a866ab93deA6eC0050bcD) | 154K | The UF Franchiser has accumulated ~1.19 UNI of unrelated inbound transfers from third parties since it was funded. `recall` always sweeps the full balance (the Franchiser contract has no partial-recall option), so those stray amounts will return to the Treasury along with the original 2.5M.
# Protocol Fee Expansion: Vote 1 ## Proposal Spec If this proposal passes, it will execute ten transactions: ``` /// Transition to v3OpenFeeAdapter on Mainnet /// Change the owner on UniswapV3Factory to v3OpenFeeAdapter V3_FEE_ADAPTER.setFactoryOwner(address(v3OpenFeeAdapter)); /// Enable fees on Arbitrum, Base, and OP Mainnet. For each chain: /// Set the owner of the V3 Factory to the V3OpenFeeAdapter V3_FACTORY.setOwner(address(v3OpenFeeAdapter)); /// Set the recipient of V2 protocol fees to the TokenJar V2_FACTORY.setFeeTo(address(tokenJar)); /// Transition to CrossChainAccount ownership on Celo /// Transfer v2 setFeeToSetter role V2_FACTORY.setFeeToSetter(CrossChainAccount) /// Transfer UniswapV3Factory owner role V3_FACTORY.setOwner(CrossChainAccount) // Transfer Uniswap v4 PoolManager owner role POOL_MANAGER.transferOwnership(CrossChainAccount) ``` Because these transactions are crosschain, governance front ends may not decode them correctly. We recommend reviewing the [Seatbelt simulation report](https://github.com/uniswapfoundation/governance-seatbelt/actions) to confirm their validity. ### Relevant Addresses **Mainnet** | **Contract** | **Address** | | --- | --- | | V3OpenFeeAdapter | [`0x3e40DB80450f025b01E45c58b0aF763C7A29a8bd`](https://etherscan.io/address/0x3e40DB80450f025b01E45c58b0aF763C7A29a8bd) | | V3FeeAdapter | [`0x5E74C9f42EEd283bFf3744fBD1889d398d40867d`](https://etherscan.io/address/0x5E74C9f42EEd283bFf3744fBD1889d398d40867d) | **Arbitrum** | **Contract** | **Address** | | --- | --- | | TokenJar | [`0x95E337C5B155385945D407f5396387D0c2a3A263`](https://arbiscan.io/address/0x95E337C5B155385945D407f5396387D0c2a3A263) | | Releaser (ArbitrumBridgedResourceFirepit) | [`0xB8018422bcE25D82E70cB98FdA96a4f502D89427`](https://arbiscan.io/address/0xB8018422bcE25D82E70cB98FdA96a4f502D89427) | | V3OpenFeeAdapter | [`0xFF7aD5dA31fECdC678796c88B05926dB896b0699`](https://arbiscan.io/address/0xFF7aD5dA31fECdC678796c88B05926dB896b0699) | | UniswapV3Factory | [`0x1F98431c8aD98523631AE4a59f267346ea31F984`](https://arbiscan.io/address/0x1F98431c8aD98523631AE4a59f267346ea31F984) | | UniswapV2Factory | [`0xf1D7CC64Fb4452F05c498126312eBE29f30Fbcf9`](https://arbiscan.io/address/0xf1D7CC64Fb4452F05c498126312eBE29f30Fbcf9) | **OP Mainnet** | **Contract** | **Address** | | --- | --- | | TokenJar | [`0xb13285DF724ea75f3f1E9912010B7e491dCd5EE3`](https://optimistic.etherscan.io/address/0xb13285DF724ea75f3f1E9912010B7e491dCd5EE3) | | Releaser (OptimismBridgedResourceFirepit) | [`0x94460443Ca27FFC1baeCa61165fde18346C91AbD`](https://optimistic.etherscan.io/address/0x94460443Ca27FFC1baeCa61165fde18346C91AbD) | | V3OpenFeeAdapter | [`0xec23Cf5A1db3dcC6595385D28B2a4D9B52503Be4`](https://optimistic.etherscan.io/address/0xec23Cf5A1db3dcC6595385D28B2a4D9B52503Be4) | | UniswapV3Factory | [`0x1F98431c8aD98523631AE4a59f267346ea31F984`](https://optimistic.etherscan.io/address/0x1F98431c8aD98523631AE4a59f267346ea31F984) | | UniswapV2Factory | [`0x0c3c1c532F1e39EdF36BE9Fe0bE1410313E074Bf`](https://optimistic.etherscan.io/address/0x0c3c1c532F1e39EdF36BE9Fe0bE1410313E074Bf#readContract) | **Base** | **Contract** | **Address** | | --- | --- | | TokenJar | [`0x9bD25e67bF390437C8fAF480AC735a27BcF6168c`](https://basescan.org/address/0x9bD25e67bF390437C8fAF480AC735a27BcF6168c) | | Releaser (OptimismBridgedResourceFirepit) | [`0xFf77c0ED0B6b13A20446969107E5867abc46f53a`](https://basescan.org/address/0xFf77c0ED0B6b13A20446969107E5867abc46f53a) | | V3OpenFeeAdapter | [`0xaBEA76658b205696d49B5F91b2a03536cB8A3bE1`](https://basescan.org/address/0xaBEA76658b205696d49B5F91b2a03536cB8A3bE1) | | UniswapV3Factory | [`0x33128a8fC17869897dcE68Ed026d694621f6FDfD`](https://basescan.org/address/0x33128a8fC17869897dcE68Ed026d694621f6FDfD) | | UniswapV2Factory | [`0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6`](https://basescan.org/address/0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6) | **Celo** | **Contract** | **Address** | | --- | --- | | CrossChainAccount | [`0x044aAF330d7fD6AE683EEc5c1C1d1fFf5196B6b7`](https://celoscan.io/address/0x044aAF330d7fD6AE683EEc5c1C1d1fFf5196B6b7) | | UniswapV3Factory | [`0xAfE208a311B21f13EF87E33A90049fC17A7acDEc`](https://celoscan.io/address/0xAfE208a311B21f13EF87E33A90049fC17A7acDEc) | | UniswapV2Factory | [`0x114A43DF6C5f54EBB8A9d70Cd1951D3dD68004c7`](https://celoscan.io/address/0x114a43df6c5f54ebb8a9d70cd1951d3dd68004c7#code) | ## Proposal *This is the first proposal to use the new governance process [approved](https://gov.uniswap.org/t/unification-proposal/25881#p-57882-protocol-fee-rollout-4) in UNIfication. The new process only applies to fee parameter updates, where proposals can bypass the RFC stage and go directly to a five-day Snapshot followed by an onchain vote. This allows for faster updates to protocol fees, while retaining the security of onchain governance.* Snapshot vote [here](https://snapshot.box/#/s:uniswapgovernance.eth/proposal/0x0242a914c60945d25873d2a98c6abd9f69cb889c6616e27f3c0ab759f9e8d783). Since UNIfication went live in late December we have been monitoring protocol fees, which were rolled out gradually to ensure protocol health. This started with v2 and select v3 pools on Ethereum mainnet. This rollout has gone well, with market-adjusted TVL [up](https://defillama.com/protocol/uniswap?fees=false&events=false&denomination=ETH) on Ethereum mainnet since December. The burn system is working as expected, permissionlessly converting fees in [many different tokens](https://dune.com/queries/6711845) into UNI burns. Now, we propose to: - Expand protocol fees on v2 and v3 to Arbitrum, Base, Celo, OP Mainnet, Soneium, X Layer, Worldchain, and Zora - Enable protocol fees on all v3 pools via a new tier-based [v3OpenFeeAdapter](https://github.com/Uniswap/protocol-fees/blob/main/src/feeAdapters/V3OpenFeeAdapter.sol) on mainnet and the above L2s ### **Implementation Details** **Expand protocol fees to L2s and burn UNI on mainnet** This proposal introduces v2 and v3 protocol fees on eight chains. Fees on each chain will be routed to the TokenJar on that respective chain. UNI burned on L2s doesn't stay on L2s - it is bridged back to mainnet and sent to 0xdead. This uses the same infrastructure used for burning Unichain sequencer fees ([OptimismBridgedResourceFirepit](https://github.com/Uniswap/protocol-fees/blob/main/src/releasers/OptimismBridgedResourceFirepit.sol) for OP Stack chains, and [ArbitrumBridgedResourceFirepit](https://github.com/Uniswap/protocol-fees/blob/main/src/releasers/ArbitrumBridgedResourceFirepit.sol) for Arbitrum). **Enable fees on all v3 pools** The current v3FeeAdapter manages protocol fees pool by pool and governance maintains a list of individual pools and their fee levels. Today, those pools account for a significant majority of v3 volume on Ethereum mainnet. v3OpenFeeAdapter replaces this with a tier-based system. Protocol fees are set uniformly across all pools sharing the same LP fee tier. For example, all 1bps LP fee pools could have protocol fees set to 25%. Any pool automatically gets the default protocol fee for its tier, no governance action is needed. This means if this proposal passes, protocol fees will be active on every v3 pool. Governance retains the ability to override fees on individual pools. ### **Governance Process** Please note that because of GovernorBravo’s limit of 10 actions per proposal, there will be two separate onchain votes posted in parallel. One proposal will include the change to mainnet’s fee controller and turn on fees on Base, OP Mainnet, and Arbitrum, the other will turn on fees on Celo, Soneium, Worldchain, X Layer, and Zora.