PowerPool introduces first yield harvesting StableSwap pool built using Balancer v2 and Liquity
This pool fully utilizes Balancer v2 architecture and PowerPool automated asset managers offering ~12% APY without any additional rewards
- Hypothetical LUSD-staBAL StableSwap built on top of Balancer v2/Liquity/PowerPool generated ~12% APY without any additional rewards allocated to it;
- Such a result was achieved by depositing LUSD into Liquity Stability Pool and harvesting ETH/LQTY proceeds in the AMM pool. LUSD was used for swaps and contributing to Liquity system stability at the same time;
- StableSwap pools with asset managers potentially could solve secondary market liquidity issue for some other stablecoins independently from Curve/other DEX protocol incentives;
StableSwap AMM — an AMM for swapping stablecoins with low slippage was introduced by Michael Egorov, Curve founder in late 2019. Early 2020 it was launched in mainnet and gained much traction, becoming essential Defi protocol ranked #1 by TVL. Today it is not possible to imagine Defi without StableSwap and Curve.fi. It is officially launched on nine EVM-compatible chains. Many other projects use StableSwap AMM for stablecoin exchange services. Other assets with almost the same value, such as ETH/stETH, WBTC/renBTC, and others, can also be exchanged using StableSwap AMM.
Curve is so essential to the DeFi ecosystem that the governance value of veCRV (vested CRV, the vested version of the Curve protocol native token) is accumulated by third-party DAOs such as Convex. They use veCRV in the treasury to generate income by selling its governance rights accruing meta-governance value to a native token.
It’s happening because StableSwap AMM pool itself can offer only relatively low APY to LPs, often lower than is possible to receive using lending markets.
To fix this, a significant share of yield in Curve AMM pools is generated via liquidity mining programs to make such pools attractive to LPs and users of Vaults, which are built on top of Curve.
The main contributor to the yield in Curve pools is an emission of CRV token. Protocols offering stablecoins must maintain enough yield in Curve pools containing their stablecoin to have enough secondary market liquidity. It is often essential to retain the peg stablecoin since if the yield is too low, users often swap stables to 1-tier stablecoins (DAI, USDT, USDC), exit the pool, and start using other yield opportunities. Since one of the principal functions of the governance process in Curve is decision-making regarding the allocation of these rewards, stablecoin protocols bribe Curve governance by paying DAOs that hold enough veCRV to influence Curve governance. This phenomenon is named Curve Wars,. From our point of view, it’s an excellent example of a meta-governance mechanic and mainstreaming value capturing mechanism for CVX and other similar tokens.
However, there are some other opportunities to generate substantial yield on stablecoins. Examples include, but are not limited to lending markets or mechanics built-in in the protocol itself. And although such options allow to generate yield for stablecoin holders, it’s nothing to do with secondary market liquidity.
Stablecoin token holders can generate yield, comparable to what they can get in Curve pools using other options. But it doesn’t contribute to secondary market liquidity.
However, the main specificity of any stablecoin is its secondary market liquidity, and any source of non-Curve yield doesn’t contribute to this essential metric. It is why 2-tier stablecoins need to use Curve or a similar solution with liquidity mining rewards to have the necessary amount of secondary market liquidity.
But what if we can build a StableSwap pool that will accumulate cash flows associated with staking stablecoins from third-party sources into the AMM itself?
Some time ago, Balancer v2 introduced custom pools — a possibility to launch any AMM invariant on top of Balancer v2 architecture. StableSwap is one of the first examples. It’s worth mentioning that the main innovation of Balancer v2 is an opportunity to use assets locked inside the AMM pool in third-party protocols. Such an approach allows creating asset managers that will “take out” part tokens from the pool (while they are virtually inside), generate yield, harvest it, and compound to the pool’s value. Exploring building opportunities of Balancer v2 we came up with the idea to improve non-incentified StableSwap pool APY using third-party yield options.
We hypothesized that it is possible to fully utilize the value locked in a StableSwap pool, drastically improving APY and retaining the advantages of a regular stable pool by launching it on top of Balancer v2.
For this purpose, we found an example of stablecoin with the “natural” yield options. Natural yield means that yield comes from options built-in in the stablecoin protocol itself, not third-party sources, tokens, and projects. Existing Balancer rewards previously allocated to staBAL (DAI/USDT/USDC) pool are partly “natural” income since LUSD-staBAL does not require any additional rewards from Balancer in this model.
This article will demonstrate results for a hypothetical LUSD-staBAL pool consisting of a nested Balancer’s stable pool LP token (staBAL, containing DAI/USDT/USDC, an analogy for Curve’s 3pool) and a Liquity’s stablecoin LUSD.
Introduction to Balancer v2
Balancer v2 is the brand new version of Balancer v1, pioneering AMM protocol. Balancer v2 was launched in May 2021 and introduced custom AMM pools with asset managers. The asset managers feature is a unique option in Defi. It allows to “take out” assets from an AMM (while virtually they are inside) and stake them in third-party contracts, generating yield for an AMM pool, while preserving the token swap feature at the same time. This option is key for launching a yield-generating AMM pool solution being discussed in this article.
Introduction to Liquity
Liquity is an interest-free borrowing protocol that allows minting LUSD stablecoin using ETH as collateral. Unlike Maker DAO, the debt is repaid by a special Stability Pool rather than by the “permissionless” liquidators. The proceeds from the liquidation (liquidation premium) are distributed among Stability Pool LUSD stakers.
The Stability Pool is a liquidity pool where users can supply their LUSD, used for repaying liquidation. It is a community-owned liquidator in Liquity ecosystem that uses users’ money to repay undercollateralized debts. In return, stakers receive their share of revenue generated by liquidations and LQTY token rewards. This token can be further staked for participating in the distribution of the protocol fee (LUSD minting fee).
Introduction to PowerPool
PowerPool builds structured Defi products with enhanced yield and capital efficiency via smart on-chain automation. The essential part of the protocol is the Power Agent automation network executing all necessary transactions. PowerPool has extensive background with asset managers and automation for Balancer pools.
For the scope of the LUSD-staBAL pool PowerPool is providing two asset managers (for LUSD and staBAL, respectively) and on-chain automation necessary for executing all transactions.
LUSD-staBAL pool design
The proposed pool is LUSD-staBAL, where staBAL is an LP token of StablePool in Balancer v2 containing DAI/USDT/USDC. The staBAL pool is the clear analogy of the well-known Curve 3pool. The pool is equipped by PowerPool-runned asset managers which use both LUSD and staBAL to generate yield for LUSD-staBAL pool LPs.
staBAL asset manager uses staBAL LP token for receiving BAL rewards allocated by Balancer governance to staBAL (DAI/USDT/USDC pool).
LUSD asset manager deposits LUSD into Liquity Stability Pool, converting all proceeds into LUSD (subtracting PowerPool DAO fees).
LUSD-staBAL revenue modeling
For simulating revenue of LUSD-staBAL pool we took on-chain data for 85 days time period (from 1st Oct to 25 Dec 2021) and calculated APY of a hypothetical LUSD-staBAL pool using the following yield options:
- Balancer StableSwap pool fees accumulation
- BAL rewards for staBAL (USDT, USDC, DAI) liquidity providers
- Distribution of liquidated ETH for LUSD stability pool stakers and resulting liquidation profit
- LQTY incentives for LUSD stability pool stakers
Note that BAL rewards for staBAL has nothing to do with LUSD-staBAL pool since it is allocated exclusively to staBAL pool. Using Balancer v2 infrastructure features and asset managers we can redirect this reward flow into LUSD-staBAL pool. It’s the same if LUSD-3CRV pool could somehow capture 3CRV-related CRV rewards.
The principal scheme of LUSD-staBAL pool revenue streams and asset managers operation is presented below:
Figure 1: LUSD-staBAL pool and PowerPool asset managers
BAL rewards were sold to stablecoin, deposited to staBAL pool, and minted staBAL LP token was compounded to the LUSD-staBAL pool. Stability Pool proceeds (LQTY, ETH) were converted to LUSD and compounded as well.
The initial data collection
All data used for the simulations was acquired via public dashboards on dune.xyz and daily price charts on coingecko.com The pool revenue streams simulation was performed in Python.
Initial data files and their sources:
· DEX/CEX daily prices (coingecko.com):
· Liquity (dune.xyz/dani)
· Balancer (dune.xyz/balancerlabs)
The data was collected in the following way:
The main data frame was created with steps of 1 day starting from 01.10.2021 and ending on 25.12.2021.
Data related to the Liquity Stability Pool, LQTY and staBAL total emission and staBAL revenues data points were obtained with a modified SQL request to coincide with the main data frame.
BAL rewards were obtained from this query with a weekly time frame, according to the Balancer’s weekly reward distribution.
Price data was taken from coingecko.com on a daily basis.
Operations gas cost was accounted for staking and withdrawal operations. This was not applied to the staBAL revenue as staBAL gradually accumulates revenues on itself.
The pool is initialized with ~$60M TVL (30M LUSD : 30M staBAL). In the simulation, the swaps are turned off and the threshold is not accounted for.
Python model methodology
To simulate the revenue of the pool, we calculated the rewards from Balancer and Liquity programs at each timestamp (24hrs) taking into account the actual share of staBAL and LUSD in the overall staBAL Liquity Stability Pool, respectively. It means that for every step we calculated our projected share in rewards at actual conditions (taken from on-chain data) at that moment if this pool existed:
It is worth mentioning that in Balancer, the BAL rewards are distributed weekly to all liquidity providers according to their pool share. Rewards were harvested when harvest condition was met (gas cost should be less than 10% of harvested reward amount).
In the case of Liquity Stability pool, we assumed that all LQTY tokens rewards minted between the timesteps are distributed to the Stability Pool liquidity providers proportional to their shares in the pool. ETH liquidations were accounted according to the following:
Where LUSD_In_Pool denotes the current amount of LUSD assets in the pool, and LUSD_In_SP — the amount of LUSD provided in the Stability Pool. For every step we accounted for the share of LUSD from LUSD-staBAL inside Stability Pool based on existing historical on-chain data.
All rewards and liquidation proceeds — BAL, LQTY, and ETH were sold on DEX. Since gas costs are volatile during the day we assumed 1% as loss during selling as a gas+DEX fee.
Gas costs of operations were defined as follows and based on real data:
- Liquity Stable Pool add_liquidity: 300,000
- ETH withdrawal: 500,000
- LQTY withdrawal: 350,000
- BAL withdrawal: 100,000
We used historical gas prices for modeling asset managers' expenses. To simplify the model we assumed costs were paid in the token being withdrawn.
The principal algorithm of PowerPool LUSD and staBAL asset managers is presented below:
> if liquidation:
> calculate current liquidation income (ETH)
> if balancer distribution:
> calculate current BAL rewards
> on every step:
> calculate staBAL revenue
> calculate LQTY rewards
> if accumulated rewards >= threshold:
> #the threshold is to prevent unprofitable trades
> sell rewards (convert to base assets — staBAL, LUSD)
> add base tokens (staBAL, LUSD) to the pool
- Liquity Stability Pool: 0x66017D22b0f8556afDd19FC67041899Eb65a21bb
- Liquidity provision, LQTY and ETH withdrawal
- Balancer Stable Pool: 0x06df3b2bbb68adc8b0e302443692037ed9f91b42
- However, all interactions with Balancer are made via this smart contract: 0x66017D22b0f8556afDd19FC67041899Eb65a21bb (Balancer Vault smart contract)
Results and discussion
The pool composition vs time (including all harvested and compounded rewards on every step) are presented below:
The staBAL part of the pool grows by means of converting BAL rewards and compounding them into staBAL. The staBAL income due to BAL rewards being sold can be seen on the chart as a stair-like increase. The LUSD part of the pool shows a more complex behavior: the balance drops on each liquidation event since LUSD from Liquity Stability Pool is burned to repay the liquidated position. After that, received ETH is sold for LUSD and it is reflected by the growth of the LUSD balance.
We can estimate the APY generated by the pool based on the initial and the final states of the assets:
The total gains for the pool during the experiment are presented in a table below:
PowerPool DAO charges 15% of mined LQTY to cover its expenses for gas and the operation of the pool. Before DAO fees, APY is 11.8% and 10.7%, after which, effectively, DAO fees are only 9%, which is much lesser than in the majority of yield aggregators:
We also decided to see how different reserve ratios influence the total APY of the LUSD-staBLA pool. The reserve ratio is the percentage of LUSD token that is not withdrawn from the MetaPool to be staked in the Stability Pool; instead, it is always present in the pool should a swap in the pool occur. This will prevent excessive gas spendings for small trades. This is not necessary for staBAL as the token passively receives BAL rewards that only require to be withdrawn manually.
Detailed information about pool gains is presented below:
A chart reflecting the input of different LUSD-staBAL income sources is presented below:
As seen from the chart, the main source of income of this pool is LQTY rewards paid to Liquity Stability Pool stakers. This incentive was introduced to attract more LUSD stakers to secure the LUSD collateralization. LUSD asset manager, supplying LUSD from LUSD-staBAL StableSwap pool redirects this yield flow into the AMM pool, benefiting pool LPs. Due to the architecture of this pool, it is possible to supply liquidity at a secondary market and to the Stability Pool simultaneously. We expect that input of ETH liquidations could be much bigger during short periods of market crashes, such as were in January 2022.
Expenses of LUSD and staBAL asset managers are presented below:
This experiment demonstrated that it is possible to generate substantial yield for LPs on StableSwap AMM without additional incentives using Balancer v2 architecture, stablecoin (LUSD) with built-in yield source, and PowerPool asset managers.
Asset managers redirect yield from staBAL liquidity mining program and Liquity Stability Pool liquidation profits and LQTY rewards resulting in 11.8% APY before DAO fees and 10.7% after. This result is better than APY in all stablecoin Curve pools without veCRV boost applied. It’s important to note that LUSD-staBAL LP doesn’t need to own any asset before depositing liquidity into the pool to achieve this 10.7%, so any DAO or user can generate these yield numbers without additional conditions.
Balancer v2 infrastructure offers a unique opportunity to fully utilize Defi composability and yield sources and build competitive investment products on top of AMM. Such solutions can solve multiple tasks: in LUSD-staBAL case, it offers LUSD secondary liquidity and supports the stability of the Liquity system. We consider that Balancer v2 StableSwap pools with asset managers could be a sustainable liquidity solution for other stablecoins with built-in or associated yield sources (for example, lending markets).
This research is open source. Here is the link to the Python model: https://github.com/powerpool-finance/powerpool-research/tree/main/LUSD