Fixed Fee Swap: How Splitting Yield From Principal can Help Reduce Risk for Uniswap v4 LPs
March 11, 2026 / Alex Keating
(Special thanks to Zachary Feinstein and Fayçal Drissi. This work was inspired and directed by both of them and without their ideas and contributions, we would not have undertaken the task of building and completing this proof of concept.)
Actively managing liquidity positions on Uniswap can be a challenging task. There are many risks, such as impermanent loss and fee volatility. Liquidity providers need to decide whether to realize their impermanent loss and rebalance or wait for the price to move into their positions tick range. Currently, there is no clean way to unbundle these risks. We built and open sourced a proof-of-concept, called a Fixed Fee Swap, to demonstrate a way to do so.
A Fixed Fee Swap allows liquidity providers to lock in their fees over a period of time, thereby removing their risk of fee volatility. In our system, this means liquidity providers are allowed to sell their future fees today and lock in cash flow for their position. Yield swapping protocols like Pendle already exist to provide markets for yield-bearing assets. We wanted to provide a solution integrated into the Uniswap ecosystem that uses a different market mechanism.

Before diving into our system, we will give a brief overview of how Pendle works to help highlight how an existing system works. At a high level, Pendle splits yield-bearing assets into a principal and a yield token. The principal token claims the full principal at maturity, and the yield token accrues all yield before maturity. By splitting the yield and principal into two assets, a user can sell future fees today and mitigate yield volatility.
Pendle provides two mechanisms for a user to exit their principal and yield positions: an orderbook and a Pendle-specific AMM. We will focus on the latter. Pendle's AMM allows swapping between the principal token and what is essentially the yield-bearing asset. The current market price creates an implied yield because the principal can claim the underlying asset at maturity, allowing Pendle to route yield token buys and sells through the same token pool.
The market AMM uses a special time-aware curve that is flatter around the price and steeper at the edges, concentrating liquidity around the market's current implied yield and adjusting as we get closer to maturity. These properties are nice because the market adjusts over time and is more capital-efficient than other yield-aware curves like YieldSpace.
Our proof of concept leverages a lot of these same concepts while focusing on the Uniswap LP use case, and aims to provide a more capital-efficient market mechanism.
Our system
To use our system, a prospective liquidity provider would need to deposit into a liquidity vault to receive vault shares, rather than create a liquidity position with the Uniswap v4 pool manager. This vault would wrap a static position or a group of positions and distribute liquidity according to a predefined distribution. By depositing in the vault, we have turned what is typically a non-fungible liquidity position into a fungible one.
Holders of vault shares have a claim to the liquidity provider fees earned by the vault, and if a liquidity provider wants to rebalance, they can move their capital to a liquidity provider vault that wraps different positions. To keep the vault simple, we rely on liquidity providers to manage their capital allocations rather than the vault. With fungible liquidity positions, providers can use a Fixed Fee Swap to sell their future fees.
Vault shareholders can convert their shares into a Fixed Fee swap by depositing their shares into a contract that splits underlying liquidity (principal) from their fees (yield). A Fixed Fee Swap has a maturity date and uses a single type of vault share; shares from different vaults cannot be mixed in the same Fixed Fee Swap. In a production environment, we expect these markets to be short, maybe a few days, due to the static positions in the LP vault.
After receiving a principal and yield token, the depositor can choose to sell either or redeem their vault shares before maturity. If a depositor chooses to sell their principal, they would do so directly in our Fixed Fee Swap market. If a depositor chooses to sell their yield token, they'd have to do so indirectly, using our Zapper contract. Let's discuss each case in more detail.
The Fixed Fee Swap market is an AMM that uses the principal token and the vault share token as the market tokens. It is a concentrated liquidity AMM, and instead of using price for ticks (like in Uniswap v4), it uses yield as the tick: 1 bip is 1 tick. The price of the principal token in the market can be thought of as 1 vault share token discounted by the current market yield.
As more principal tokens are swapped into the AMM, the yield decreases, and the price relative to vault share tokens increases. Once the market reaches maturity, the price of a principal token will be equal to a vault share token. The gap between the discounted price of the principal token for one vault share token before maturity is the expected future fees that will accrue to the yield token until maturity. From this gap, we can derive the price of the yield token, which we can swap using a Zapper contract.
Our Zapper contract allows vault share token holders to buy or sell only the yield portion of the Fixed Fee Swap before maturity. When buying yield tokens, a vault share token holder will send their tokens to the Zapper contract, which will flash loan some principal tokens, then split the vault share tokens into principal tokens and yield tokens using the split principal tokens to pay back the flash loan and send the yield tokens to the buyer. The sell flow is similar, but in reverse. These flows round out our fixed fee swap system. The diagram below provides a visual explanation of the user flows and components.
flowchart TD
A((Prospective LP)) --->|Deposits token 0 and 1| B(LP Vault):::redBorder
B --->|Mints Vault Share| A
A -->|Deposits Vault Share| C(Fixed Fee Swap):::redBorder
C ----> |Mint PT and YT| A
D(FixedFeeSwapMarket):::redBorder
E((YT Buyer)) --> |Swap VST for YT| H(Token Zapper):::redBorder
J((YT Seller)) --> |Swap YT for VST| H(Token Zapper):::redBorder
H --> |Flash swap PT for YT or YT for VST | F
F(PoolManager) --> |Route Swap| D
I(PT/Vault Share holder) --> |Provides liquidity| D
classDef redBorder stroke:#e63946,stroke-width:3px,stroke-opacity:1;
Figure Notes
- VST: Is shorthand for vault share token
- YT: Is shorthand for yield token
- PT: Is shorthand for principal token
Areas for improvement
We aimed to validate the idea of Fixed Fee Swaps with a yield-based, concentrated liquidity system. While our proof-of-concept system is complete, we have identified additional features that could be added, and recognized other areas for improvement. These include:
- The vault only handles static liquidity positions. It would be interesting to explore the limits of position automation so users do not have to rebalance between vaults.
- The Fixed Fee Swap market lacks several features which would be ideal to have in a production system, especially exact out swapping, and a system for distributing vault share token fees to liquidity providers.
- We did not consider gas cost in our implementation, and there are likely meaningful gas optimizations that could be pursued.
- The Zapper contract only supports converting from the yield token to the vault share token. A potential UX improvement would be to support zapping from vaults' token 0 or token 1 to yield tokens.
Conclusion
We wanted to provide a system to make managing liquidity positions easier. By tackling this problem, we created a new yield market that could serve as the basis for other yield-concentrated liquidity products. We hope to continue refining the current system and getting it into production. Thank you to the Uniswap Foundation for supporting this work; without their support, we would have been unable to undertake this endeavor.