The following reflects the views of L2BEAT’s governance team, composed of @kaereste and @Manugotsuka, and it’s based on their combined research, fact-checking, and ideation.
We voted FOR.
We view it as a natural continuation of the UNIfication framework approved in December, extending the existing fee collection and UNI burn architecture to additional chains and replacing the curated v3 allowlist with a universal adapter. Fee parameters remain unchanged. Before voting, we asked our research team to validate the full implementation, including contract behavior and burn mechanics.
For a detailed technical breakdown of what was verified, what remains unpublished, and the associated risks, please see the full analysis below. This review was conducted by the L2BEAT Research Team as part of the independent technical due diligence we require before voting on proposals of this scope.
What happened in December
Proposal #93 “UNIfication” passed in December 2025. It burned 100M UNI, turned on protocol fees for V2 and V3 on Ethereum mainnet, and approved a 40M UNI growth budget for Uniswap Labs over two years. In return, Labs eliminated all interface, wallet, and API fees.
UNIfication deployed three new contracts:
- TokenJar - an immutable sink that collects fee tokens from pools. Only a designated
releasercan withdraw. - Firepit - the releaser on mainnet. A searcher pays a fixed UNI amount (4,000 UNI), receives the accumulated fee tokens, and the UNI paid gets burnt, transferred to
0xdead. - V3FeeAdapter - a Merkle-proof-based adapter that acts as the V3 Factory owner and sets protocol fees only on pools included in a curated allowlist (roughly 80-95% of mainnet volume).
What’s being proposed now
The Temp Check - authored by Hayden Adams - does two things:
1. Expand protocol fees to eight L2s: Arbitrum, Base, Celo, OP Mainnet, Soneium, Worldchain, X Layer, and Zora. Both V2 and V3 pools are on each chain.
2. Replace the curated Merkle adapter with an open one. The new V3OpenFeeAdapter drops the allowlist entirely. Every V3 pool inherits a protocol fee by default. Governance can exempt individual pools, but the default is fees on.
Due to GovernorBravo’s 10-action limit, execution splits into two parallel proposals:
- Proposal A: Mainnet V3OpenFeeAdapter + Base, OP Mainnet, Arbitrum
- Proposal B: Celo, Soneium, Worldchain, X Layer, Zora
How the money flows (and burns)
The fee collection and burn architecture extends the mainnet system to L2s with chain-specific bridging:
Pools (v2/v3) on each chain
│
▼
TokenJar ─── Immutable fee sink. Holds all collected tokens.
│
▼
Releaser ─── Searcher pays UNI threshold, receives fee tokens.
│
├─ Ethereum: Firepit ─── UNI sent to 0xdead directly
├─ OP Stack: OptimismBridgedResourceFirepit ─── bridges UNI to L1 0xdead
└─ Arbitrum: ArbitrumBridgedResourceFirepit ─── bridges UNI to L1 0xdead
The protocol never converts fee tokens into UNI. Instead, it relies on a searcher auction: fee tokens accumulate in the TokenJar until a searcher decides the pot is worth more than the fixed UNI cost. The searcher pays 4,000 UNI (mainnet) or 2,000 UNI (L2s), receives all accumulated tokens, and the UNI is burned. The design avoids DEX routing, slippage management, and oracle dependency - burn frequency depends entirely on searcher competition and accumulated value.
On L2s, UNI doesn’t burn locally. It bridges to Ethereum L1 first, via L2StandardBridge on OP Stack chains, via L2GatewayRouter on Arbitrum - and once the withdrawal finalises, it is burnt by transfer to the 0xdead address.
The V3OpenFeeAdapter: from allowlist to all pools
The old adapter required a Merkle proof to set fees on a pool - governance curated the list, targeting pools where Uniswap held 90%+ market share to minimize LP attrition risk. The new adapter inverts the default:
| Merkle-based (current) | Open adapter (proposed) | |
|---|---|---|
| New pools | No fee unless added to Merkle tree | Fee on - inherits tier default |
| Opt-out | Not in the tree = no fee | Only via governance poolOverride to zero |
| Coverage | ~80-95% of volume | 100% of V3 pools |
The adapter resolves fees through a three-level waterfall: pool-specific override, then fee-tier default, then global default. A ZERO_FEE_SENTINEL (value 255) distinguishes “not configured” from “explicitly exempt.” Anyone can call triggerFeeUpdate() to apply the current fee to any pool - no governance action required.
Fee parameters are identical to December’s UNIfication. No increase:
| LP Fee Tier | Protocol Take | Effective Protocol Fee |
|---|---|---|
| 0.01% | 1/4 of LP fees | ~0.0025% |
| 0.05% | 1/4 of LP fees | ~0.0125% |
| 0.30% | 1/6 of LP fees | ~0.05% |
| 1.00% | 1/6 of LP fees | ~0.167% |
Risks
The shift from allowlist to universal bets that Uniswap’s network effects hold across the full pool spectrum - not just popular pairs. The risk is economic and reversible (governance can exempt pools), not a security concern.
What we verified
We reviewed the source code on the protocol-fees repository (main branch, no pinned commit hash provided)
- TokenJar: Immutable fee sink,
onlyReleaserwithdrawal - confirmed. - Firepit: Constructor hardcodes
RESOURCE_RECIPIENT = address(0xdead)- confirmed. - OptimismBridgedResourceFirepit: Two-stage collect-then-bridge via
L2StandardBridge.withdrawTo()to L10xdead- confirmed. Covers Base, OP Mainnet, Soneium, Worldchain, Zora. - ArbitrumBridgedResourceFirepit: Same pattern via
L2GatewayRouter.outboundTransfer()- confirmed. - V3OpenFeeAdapter: Permissionless waterfall fee resolution with sentinel for explicit zero - confirmed.
- Fee parameters: Packed values (
0x44,0x66) match original UNIfication deployer - confirmed. - Ownership: All contracts transfer ownership to UNI Timelock (L1) or its L2 alias (
0x2BAD...46CD) - confirmed for OP Stack and Arbitrum.
Contracts are immutable (no proxy pattern), but governance retains control: it can swap the releaser on any TokenJar (redirecting fee flow), adjust release thresholds, set per-pool fee overrides, and transfer V3 Factory ownership to a future adapter.
What we could not verify
Several elements remain unpublished ahead of the on-chain vote:
Celo and X Layer have no public implementation. No custom releasers, no deployment scripts, and no bridge contracts were found in the public repo. We cannot assess how UNI gets burned on these chains.
No on-chain proposal scripts are published. The Snapshot body contains pseudocode for Proposals A and B, but the actual FeeExpansionProposal scripts couldn’t be found in the repo. Exact calldata cannot be independently verified.
Audit scope is unclear. OpenZeppelin and Spearbit audited the original UNIfication contracts. Whether the new V3OpenFeeAdapter and L2-specific deployments fall within that audit scope - or require a separate review - has not been confirmed (?).
Bridged UNI addresses for three chains are TBD. Soneium, Worldchain, and Zora don’t yet have confirmed UNI token addresses in the deployment parameters.
Takeaway
Proposal A extends existing rates to new chains without increasing them. The universal fee adapter is a policy shift - from opt-in to opt-out - it’s an economic risk, not a security one.
Proposal B (Celo, Soneium, Worldchain, X Layer, Zora) covers chains whose bridge and burn path cannot be verified from public sources. Until the Celo and X Layer releaser contracts are published, delegates cannot confirm how - or whether - UNI gets burned on those chains.
My recommendation: The direction is sound for both proposals: extending proven fee infrastructure to new chains at unchanged rates.
- Proposal A (Mainnet V3OpenFeeAdapter + Base, OP Mainnet, Arbitrum) - supportable at Temp Check. Implementation is verifiable from public source code.
- Proposal B (Celo, Soneium, Worldchain, X Layer, Zora) - supportable at Temp Check, but the on-chain vote should be conditional on the missing pieces being published first.
Before the on-chain vote, delegates should require the proposer to publish:
- On-chain proposal calldata for both Proposals A and B
- Celo and X Layer bridge/releaser contracts
- Deployment scripts with a pinned commit hash
- Confirmation of audit coverage for the new contracts