A new incentivization mechanism for Uniswap V3 liquidity
Liquidity providers on Uniswap V3 do not get an ERC-20 when providing liquidity but rather an ERC-721 token which makes it harder for protocols to incentivize liquidity on the protocol. In this article, we explain how Angle recently came up with a solution to efficiently incentivize Uniswap liquidity while leaving Liquidity Providers a maximum flexibility in terms of how they provide their liquidity.
Since the protocol launch in November 2021, Angle has been incentivizing agEUR liquidity on exchanges with ANGLE rewards. The biggest pools on Uniswap V3 are notably agEUR-USDC and agEUR-ETH.
While we used for a long time an incentivization system based on Gelato/Arrakis, following this governance discussion and vote, we recently switched to a new system.
In this post, we present the issues we faced with the original incentives mechanism, the solutions and trade-offs the new system brings, and how it is valuable for the protocol and LPs.
Problems with the old incentivization system
Because Uniswap V3 positions are ER721 tokens, they cannot easily be incentivized. Solution we originally used was Gelato/Arrakis which allows to wrap UniV3 positions into ERC20.
While this makes incentivization super convenient (you can use traditional staking contracts to reward ERC-20 liquidity), this comes with several issues: incentivization of idle liquidity, no custom range management, dependency on centralized wrappers.
Below we breakdown these issues.
Incentivization of inactive liquidity
The main goal of governance tokens emissions is to reward users for their useful participation in the protocol. In Angle’s case, distributing ANGLE should reward users who hold agEUR and provide liquidity on the token, as it grows Angle TVL and improves the robustness and the peg of the stablecoin.
One issue with UniV3 positions is that they can move out of range, in which case the liquidity in the position becomes inactive. As long as this liquidity remains out of range, it can’t be used to trade and doesn’t help Angle or the token in any way.
With centralized wrappers like Gelato, you may sometimes be stuck with positions receiving governance tokens while bringing 0 liquidity whatsoever to the token, actually wasting governance tokens.
For example, if we had stick with this solution for our agEUR-USDC pool, we would have been periodically incentivizing LPs providing 0 useful liquidity.
Limited choices for LPs
A second and more fundamental issue is that with the classic staking system, we’re considerably reducing the possibilities offered by Uniswap V3. Uniswap V3 is a universal AMM, and the possibilities as an LP are endless. By requiring a specific range from LPs to wrap their tokens and receive incentives, we’re reducing the possibilities of Uniswap V3 and making LPing significantly less attractive or capital-efficient.
Summary of the issues with incentivizing UniV3 positions through ERC20 wrappers:
- Waste token incentives when position is out of range
- Limits choices for LPs
- Prevent the capital-efficiency of Uniswap V3 concentrated liquidity
An ideal incentivization solution should allow power users and professional hedge funds to manage their positions as they wish (with potentially a super tight range) while still being rewarded for their utility. Only an off-chain reward computation system can offer this maximal flexiblity and this is the system we have adopted.
Solution
Our solution was designed to maximize the efficiency of the governance token distribution. In our case, this translates to incentivizing the most useful liquidity on agEUR positions, increasing peg (capital-efficiency), and TVL.
How does it work in practice?
A script looks into each pool directly, and sees which addresses held the liquidity as well as the amount agEUR in the position at each swap. Practically speaking, a “reward” is computed from every swap for each address with in range liquidity based on the following parameters:
- The share of fees earned by the LP, telling us the virtual liquidity provided
- The share of agEUR they hold compared to the total pool size
- The share of the other token they hold compared to the total pool size
These parameters are then adjusted by a boost according to the veANGLE balance of the LP. The exact formula applied to each swap happening on a pool is:
Note that this allows us to eliminate inactive liquidity from the rewards distribution altogether such that out-of-range liquidity cannot receive rewards. This granular computation for each swap is something that can easily be done off-chain.
At the end of each week, rewards are added, normalized and an ANGLE reward amount is computed for each address. Then, a merkle root of the distribution is published on-chain, allowing LPs to claim their tokens from a contract as usual.
As this solution looks at the addresses holding the pool liquidity directly, any UniV3 wrapper can be plugged on-top of this system, and profit from the improved distribution while managing the position for its users, like Gamma does. Thanks to this, LPs now have the possibility, but not the obligation, to have their positions manage by third parties. On the other side, if the third-party leaves its users positions out of range, Angle won’t incentivize this liquidity. Because of this, we would advise LP to carefully choose their UniV3 liquidity position managers and see how they plan on rebalancing the liquidity.
Off-chain rewards computation
What is being computed off-chain is the distribution of tokens between a specific pool LPs. The quantity of tokens distributed to the different pools is still decided on-chain by veANGLE holders.
Though this introduces some trust in the process, we believe it is a worthy price to pay for a big improvement in the rewards distribution of the protocol. Additionally, the script used for the weekly distribution computations has been published publicly here.
What do I need to do if I’m currently providing liquidity?
If you are an individual LP not relying on any liquidity manager, you are now eligible to receive ANGLE rewards as long as your liquidity is in-range!
If you were providing liquidity through Arrakis/Gelato by staking G-Uni tokens on Angle, you will keep receiving rewards according to the new formula shown above if the range from Arrakis is including the current price. If it isn’t, then your position won’t be accruing any ANGLE rewards.
In this case, you can now provide liquidity yourself directly, or choose another UniV3 liquidity manager like Gamma.
All available ANGLE rewards can be claimed directly from the Angle App, or the the MerkleRoot Distributor contract directly. The distribution of rewards from the past week are updated directly to this contract every Thursday at 4am CET.
Conclusion
Up until now, there was no ideal solution to incentivize Uniswap V3 liquidity in an efficient way. We believe this solution makes the necessary trade-offs to let most protocols incentivize Uniswap V3 pools in much more efficient ways.
In general, we hope this solution is a first step forward in the generalization of more elaborated Uniswap V3 strategies, that could be incentivized as well.
If you are a DAO losing on Uniswap V3 efficiency because of a similar situation or a user looking to provide agEUR liquidity, feel free to reach out in our Discord and we will be happy to give you a hand!
Disclaimers
This announcement is not intended to provide legal, financial or investment, or other advice and we recommend that you do not rely on, and do not make any financial or other decision based, on this announcement.