This proposal continues the protocol fee rollout, following proposals #92, #93, and #94. It uses the expedited governance process approved in UNIfication, where fee parameter update proposals can bypass the RFC stage and go directly to a five-day Snapshot followed by an onchain vote.
Since protocol fees went live on Ethereum mainnet in late December, the rollout has extended to nine additional chains (Arbitrum, Base, OP Mainnet, Soneium, X Layer, Worldchain, and Zora). The burn system is working as designed, with fees accumulating in TokenJars across chains. From there, searchers claim them in exchange for burning UNI by bridging it back to mainnet and sending it to the burn address.
This proposal:
Fees on each chain will be routed to the TokenJar on that respective chain. UNI burned on these chains is bridged back to Ethereum mainnet and sent to 0xdead.
Celo uses the same architecture as other OP-stack chains. On BNB and Polygon, we make use of Wormhole’s Native Token Transfer (NTT) mechanism for multichain token management. The forum post will be updated early the week of May 18, 2026 with links to the repository containing these contracts and a full description of our implementation.
Protocol fee levels are the same on all other chains where fees are live, see breakdown here.
If passed, this proposal will execute three actions: one each for Celo, BNB Chain, and Polygon. Each action contains multiple inner calls.
This action sets the fee collector of UniswapV2Factory to TokenJar, transfers ownership of UniswapV2Factory and PoolManager to Optimism CrossChainAccount, and transfers ownership of UniswapV3Factory to V3OpenFeeAdapter.
RELEVANT ADDRESSES:
| Name | Network | Address | Description |
|---|---|---|---|
| V2_FACTORY | Celo | 0x114A43DF6C5f54EBB8A9d70Cd1951D3dD68004c7 | Uniswap V2 Factory |
| V3_FACTORY | Celo | 0xAfE208a311B21f13EF87E33A90049fC17A7acDEc | Uniswap V3 Factory |
| V4_POOL_MANAGER | Celo | 0x288dc841A52FCA2707c6947B3A777c5E56cd87BC | Uniswap V4 Pool Manager |
| TOKEN_JAR | Celo | 0x190c22c5085640D1cB60CeC88a4F736Acb59bb6B | Fee Collector |
| V3_OPEN_FEE_ADAPTER | Celo | 0xB9952C01830306ea2fAAe1505f6539BD260Bfc48 | Uniswap V3 Fee Adapter |
| UNISWAP_WORMHOLE_MESSAGE_RECEIVER | Celo | 0x0Eb863541278308c3A64F8E908BC646e27BFD071 | Governance Owned Wormhole Receiver |
| CROSS_CHAIN_ACCOUNT | Celo | 0x044aAF330d7fD6AE683EEc5c1C1d1fFf5196B6b7 | Governance-owned OP Bridge Receiver |
| WORMHOLE_SENDER | Ethereum | 0xf5F4496219F31CDCBa6130B5402873624585615a | Wormhole Sender |
WORMHOLE_SENDER.sendMessage(targets, values, datas, UNISWAP_WORMHOLE_MESSAGE_RECEIVER, CELO_CHAIN_ID)
encodes:
V2_FACTORY.setFeeTo(TOKEN_JAR)
V2_FACTORY.setFeeToSetter(CROSS_CHAIN_ACCOUNT)
V3_FACTORY.setOwner(V3_OPEN_FEE_ADAPTER)
V4_POOL_MANAGER.transferOwnership(CROSS_CHAIN_ACCOUNT)
This action sets the fee collector of UniswapV2Factory to TokenJar and transfers ownership of UniswapV3Factory to V3OpenFeeAdapter.
RELEVANT ADDRESSES:
| Name | Network | Address | Description |
|---|---|---|---|
| V2_FACTORY | BNB Chain | 0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6 | Uniswap V2 Factory |
| V3_FACTORY | BNB Chain | 0xdB1d10011AD0Ff90774D0C6Bb92e5C5c8b4461F7 | Uniswap V3 Factory |
| UNISWAP_WORMHOLE_MESSAGE_RECEIVER | BNB Chain | 0x341c1511141022cf8eE20824Ae0fFA3491F1302b | Governance Owned Wormhole Receiver |
| TOKEN_JAR | BNB Chain | 0xc6Ae6373CEcc9e595A6C8b9fe581925a8c84f70A | Fee Collector |
| V3_OPEN_FEE_ADAPTER | BNB Chain | 0x3F07F08b45912dCd6691C5B9412975D5113B2910 | Uniswap V3 Fee Adapter |
| WORMHOLE_SENDER | Ethereum | 0xf5F4496219F31CDCBa6130B5402873624585615a | Wormhole Sender |
WORMHOLE_SENDER.sendMessage(targets, values, datas, UNISWAP_WORMHOLE_MESSAGE_RECEIVER, BNB_CHAIN_ID)
encodes:
V2_FACTORY.setFeeTo(TOKEN_JAR)
V3_FACTORY.setOwner(V3_OPEN_FEE_ADAPTER)
This action sets the fee collector of UniswapV2Factory to TokenJar and transfers ownership of UniswapV3Factory to V3OpenFeeAdapter.
RELEVANT ADDRESSES:
| Name | Network | Address | Description |
|---|---|---|---|
| V2_FACTORY | Polygon | 0x9e5A52f57b3038F1B8EeE45F28b3C1967e22799C | Uniswap V2 Factory |
| V3_FACTORY | Polygon | 0x1F98431c8aD98523631AE4a59f267346ea31F984 | Uniswap V3 Factory |
| ETHEREUM_PROXY | Polygon | 0x8a1B966aC46F42275860f905dbC75EfBfDC12374 | Governance Owned FxChild Receiver |
| TOKEN_JAR | Polygon | 0xc6Ae6373CEcc9e595A6C8b9fe581925a8c84f70A | Fee Collector |
| V3_OPEN_FEE_ADAPTER | Polygon | 0x3F07F08b45912dCd6691C5B9412975D5113B2910 | Uniswap V3 Fee Adapter |
| POLYGON_FX_ROOT | Ethereum | 0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2 | Polygon's Sender (on Ethereum) |
POLYGON_FX_ROOT.sendMessageToChild(ETHEREUM_PROXY, abi.encode(targets, values, datas))
encodes:
V2_FACTORY.setFeeTo(TOKEN_JAR)
V3_FACTORY.setOwner(V3_OPEN_FEE_ADAPTER)