Asset Risk Assessment: Liquity Chicken Bonds
Chicken Bonds direct amplified yields to bLUSD. This report addresses risks to users who utilise bLUSD through bonding and/or providing liquidity in the Curve bLUSD-LUSD3CRV pool.
The research was spearheaded by @DiligentDeer.
Index
Liquity protocol overview
LUSD peg stability
Hard peg stability
Soft peg stability
Chicken Bonds
Yield generation for bLUSD
bLUSD accrual mechanism
A consequence of lowering the accrual parameter
Risks to LPs of bLUSD-LUSD3CRV
Impermanent Loss
The risk associated with the bLUSD price
The risk associated with the LUSD price
The risk associated with the yield generation
B.Protocol - stability pool
Yearn LUSD vault
Opportunity cost
Conclusion
Liquity Protocol Overview
Useful Links
Official Liquity Documentation (Docs)
Liquity: Decentralized Borrowing Platform (Whitepaper)
Trail of Bits Security Assessment (Audit)
Audit by Coinspect (Audit)
Trail of Bits Liquity Protocol and Stability Pool Final Report (Audit)
Liquity is a decentralized borrowing protocol that allows interest-free loans against ETH as collateral.
Loans are subjected to Borrowing and Redemption fees, both functions of the redemption rate. The borrowing fee is paid in LUSD and ranges from 0.5% to 5%, and the redemption fee is in ETH (ranging from 0.5% to infinity). As the redemption volume of LUSD increases, suggesting LUSD is trading below its peg, borrowing fees begin to increase to discourage borrowing. The redemption fee regulates redemption velocity by increasing when redemptions take place, and decreasing over time since a fee event. On top of the Borrowing fees, 200 LUSD is charged as a Liquidation Reserve to be returned when the debt is repaid. Liquity requires a minimum debt of 2,000 LUSD.
Source: Defisaver
To avoid liquidations, the debt holder needs to maintain their "Trove" (similar concept to a CPD or vault) at a minimum collateral ratio (CR) of 110% during normal conditions, or 150% in the case when recovery mode is active (Recovery mode is further explained at the end of this section). The loans are secured by a Stability Pool containing LUSD that handles the liquidations.
The Stability Pool is a liquidity source used to repay debt from liquidated Troves. When any Trove is liquidated, an amount of LUSD corresponding to the remaining debt of the Trove is burned from the Stability Pool's balance to repay the Trove's debt. In exchange, the entire collateral from the Trove is transferred to the Stability Pool.
In an undesirable scenario where the Stability Pool has no funds to facilitate the liquidations, the debt obligation from a Trove that is deemed to be liquidated might get transferred to other LUSD debt holders. Transferring this debt obligation will reduce the remaining Troves' health factor (collateral ratio), making them vulnerable to liquidation if the ETH price drops further.
Source: Liquity whitepaper
The redistribution of the collateral and debt is done proportionally to the recipient Trove's collateral amount. Troves with higher collateralization receive more debt and collateral from liquidated positions. This distribution design ensures that the system does not create cascading liquidations.
Liquity Whitepaper
Recovery Mode is activated when the protocol's Total Collateral Ratio (TCR) falls below 150%. In this event, the protocol liquidates troves with collateralization ratios between the current TCR and 110%.
These liquidations are carried at 110% CR, and the borrower can reclaim excess collateral. Recovery Mode generates more liquidations with a capped discount. A lack of sufficient funds in the Stability Pool prevents liquidations, potentially leading to the market stress testing LUSD's peg.
The motivation for designing Chicken Bonds was to ensure that the Stability Pool has sufficient liquidity to facilitate liquidation and to ensure the LUSD peg in harsh conditions.
LUSD Peg Stability
Source: Liquity
Hard Peg Stability
Any LUSD holder has the ability to redeem LUSD for ETH at face value (i.e. 1 LUSD for $1 of ETH). The system will use the LUSD to pay off debt and draw collateral from the riskiest Troves. Direct arbitrage creates a price floor for LUSD at $1.
A minimum collateral ratio of 110% sets an upper price of LUSD at $1.10. Above that price, arbs can deposit $110 worth of ETH and sell 100 LUSD (worth >$110) at a profit.
Soft Peg Stability
If the price of LUSD goes above $1, borrowing is more attractive as the user expects to repay at a lower rate or arbitrage it on some DEXs.
Higher redemption volume implies higher Borrowing fees which make new loans less attractive, thus limiting the supply.
As LUSD moves close to $1.10, the gains from liquidations on the stability pool will taper off; users would remove LUSD from the stability pool, increasing its circulating supply.
In practice, LUSD has typically remained rangebound, as predicted, between the $1 - $1.10 "hard peg".
Source: Coingecko
Chicken Bonds
Useful Links
Chicken Bonds: Self-Bootstrapping Liquidity (Whitepaper)
Chicken Bond Docs (Docs)
A Game Theoretic Model of Chicken Bonds Dynamic (Technical paper)
Coinspect - Smart Contract Audit (Audit)
Coinspect - Smart Contract Audit v2 (Audit)
Coinspect - Smart Contract Audit v3 (Audit)
Dedaub - Smart Contract Audit (Audit)
B.AMM Protocol Liquity Integration Assessment(Audit)
Chicken Bonds are a novel mechanism for projects to bootstrap protocol-owned liquidity at no cost while boosting yield opportunities for end users.
Users may deposit LUSD in exchange for an accruing balance of bLUSD. At any time, bond-holders retain the right to retrieve their principal and forego the accrued amount ("chicken out"), or trade it in for the accrued bLUSD ("chicken in"). Here, a portion of the LUSD acquired by the system backs the bLUSD supply, and this portion depends on the time of chicken in.
The protocol operates a Treasury consisting of three logical parts, termed "buckets": Pending Bucket, Reserve Bucket, and Permanent Bucket.
The Pending Bucket (protocol-controlled vault) stores LUSD for the depositors who have yet to chicken in/out. The funds are invested into B.Protocol, which then immediately deposits into the Liquity Stability Pool.
The Reserve Bucket (protocol-controlled vault) stores a portion of the LUSD gathered from the former bondholders after a "chicken in" event. Yields generated with the funds in every bucket are directed here, which supports bLUSD's supply.
The Permanent Bucket (protocol-owned vault) stores the other portion of the LUSD gathered from the former bondholders.
This schematic shows the protocol's behaviour and the user's choices when 1000 LUSD are bonded and chicken in at time t1.
The Reserve bucket backs the bLUSD supply, and thus bLUSD has a growing hard price floor.
... the bonding rules guarantee that the price floor can only increase over time.
Chicken bond Whitepaper
Yield Generation
The yield is generated by investing the funds in two sources:
The funds in the Pending bucket are always invested through B.protocol.
A portion of the Reserve and the Permanent bucket will also be invested here.
The funds in B.Protocol are deposited in the stability pool and facilitate liquidations. ETH and LQTY generated are sold at a discount for LUSD and are redeposited in the stability pool. The LUSD quantity will increase provided liquidations are executed with more than a 100% collateral ratio.
LUSD in the Yearn vault is deposited into LUSD3CRV-f, and the LP tokens will be supplied to Convex Finance to earn CRV and CVX (and any other available tokens). Earned tokens are harvested and sold for more LUSD3CRV-f, which is deposited back into the strategy.
The transfer of LUSD to the LUSD3CRV Curve pool can be used as a peg reinforcing mechanism by moving funds in the Reserve bucket and Permanent bucket to Yearn vaults to balance the demand and supply of LUSD in the LUSD3CRV pool. Funds deposited in Curve would never exceed the quantity of LUSD present in the Permanent bucket. Learn more about the shifter function here. E.g. if there are 900 in Reserve and 100 in Permanent, up to 100 LUSD can be invested in Yearn. If 100 LUSD is invested, there will be 90 from Reserve and ten from Permanent in Yearn vault.
bLUSD Accrual Mechanism
A user who bonds LUSD will get nothing but a promise of redeeming accrued bLUSD at the time of chicken-in, foregoing the bonded LUSD. This accrual of bLUSD depends on the variables like time, bonded amount, chicken in fees, accrual parameter (alpha), and redemption price of bLUSD.
The amount of LUSD bonded is considered after accounting for the 3% chicken in fees from the actual bond value for the calculation of bLUSD accrual. The accrual rate might vary based on the current redemption price (LUSD in the Reserve bucket / bLUSD supply).
Moreover, there is a function where alpha is reduced to accelerate the bLUSD accrual rate. When the current weighted average bond age is greater than the target age of 15 days, the controller will lower the alpha. A major reason for greater average bond age is bond holders unwilling to Chicken in or Chicken out; in other words, people aren't convinced that the bLUSD accrued so far is profitable enough to chicken in.
Source: Controller logic for triggering the accrual parameter
This is how a change in accrual parameter looks on a graph:
Lowering the alpha would cause the accrual of bLUSD to speed up, thus speeding up arrival at the break-even point and the optimal rebonding time.
A Consequence of Lowering the Alpha
Lowering the alpha will increase the bLUSD accrual rate, i.e. granting a higher share of the funds in the Reserve bucket plus the yield.
It is assumed that a self-interested person would exit after the break-even point or hold the bond until they consider the chicken in trade to be profitable to them (here a "profitable trade" should not be considered literal, but subjective to the user's intellect).
This accelerated bLUSD accrual will change the non-profitable or a low-profit chicken in trade to a profitable or a high-profit one by accelerating the bLUSD accrual. When they chicken in, the extra profit (which otherwise would not be generated if α was not lowered) will come from the bLUSD inflation, i.e. bLUSD market price.
A technical paper by The Risk DAO focused on estimating a fair price for bLUSD assuming fully self-centric, rational agents (players) and a fully liquid world. They concluded with a simple equilibrium state for the game of chicken bonds.
They claim that over time, lowering
might produce a situation where bonding gets less attractive due to non-profitability.
Source: Technical paper by The Risk DAO
Risks to LPs of bLUSD-LUSD3CRV
Besides smart contract risk, LPs might face a risk associated with bLUSD price fluctuation, LUSD peg, risks at the point of yield generation, and other assets in the liquidity pool.
Impermanent Loss
Impermanent loss refers to the opportunity cost incurred when providing liquidity to a pool due to the price shift of one asset versus holding the assets. It depends on the ratio in which the liquidity was provided, the amount of liquidity, and the depth of that liquidity pool. Note that the bLUSD Curve pool is a V2 pool, which seeks to mitigate the effects of impermananet loss by only updating price scale when it has offset losses by trading fees earned.
The following cases can lead to IL:
Based on the claim that bLUSD's floor would always rise, the change in the price of bLUSD, w.r.t LUSD would generate IL.
Variation in bLUSD and LUSD's price gap.
bLUSD Price Risk
Low liquidity on bLUSD-LUSD3CRV will cause a higher price impact. A higher price impact will lead to a higher bLUSD price drop when selling bLUSD.
With ever-increasing floor price, the gap between bLUSD's market price and the floor price would increase if:
Bonding volume is greater than the chicken in volume.
More users bond, i.e. more funds in pending bucket, thus high amplification.
Users chicken out after bonding for a considerable time.
Users chicken in early.
If these factors are not true, it is likely that the market price of bLUSD will drop and trade near the floor price in the long run. When the market price trades near the floor price, trading activity between bLUSD & LUSD will slow down, resulting in an opportunity cost for the LPs.
It is important to note that lowering the accrual parameter will lower the market price of the bLUSD near the floor price due to the high supply in the system.
The Risk Associated with the LUSD Price
When people are not confident in holding ETH in a flash crash, there exists a chance that LUSD might get depegged. Though LUSD has historically traded at or above its peg, this can't be ignored.
The Risk Associated with the Yield-Generating Protocols
bLUSD is exposed to the risks at B.Protocol and Yearn used for generating yield. Loss of funds from these protocols/vaults for any reason can severely impact the bLUSD floor price.
B.Protocol
Useful Links
B.AMM Protocol Liquity Integration Assessment (Audit)
Dedaub - B.protocol Chicken Bond integration (Audit)
The B.Protocol's integration with Liquity was audited in July 2021 and currently has an ongoing Immunefi bounty of $100k. Moreover, the integration has been live on the main net since Aug 2021.
The LUSD Chicken Bonds Protocol makes use of B.Protocol to store funds in the stability pool whilst generating yield.
In extreme market conditions, it is theoretically possible that stability pool investments (B.Protocol) could incur a loss from liquidation when the ETH price crashes heavily and liquidations happen below a 100% collateral ratio.
Moreover, since liquidations are driven by the price of collateral, the oracle pricefeed is a key point to consider. The audit report points out this risk vector that might affect the liquidation process as a whole.
Here is the audit report to learn more: B.AMM Protocol Liquity Integration Assessment.
Source: B.AMM Protocol Liquity Integration Assessment.
Yearn LUSD vault
Stacking different protocols for yield generation can increase the risk surface as well. The vault contract has been live for more than five months. Though Yearn has suffered a hack in the past, it has since been patched and is now reasonably battle tested. However, there always exists the possiblity of smart contract bugs that can lead to losses.
Only funds residing in the Permanent Bucket can be deposited into the Yearn vault, so the risk posed by Yearn is contained and represents a small proportion of overall TVL. As of November 2022, Chicken Bonds TVL is around 50m LUSD, with only 500k LUSD exposed to the Permanent Bucket.
Opportunity Cost
The technical paper by The Risk DAO concluded that the system might reach a state where bonding will not be profitable. Assuming negligible chicken in fees, halting bonding-rebonding, trades between bLUSD-LUSD may stagnate, resulting in negligible vAPY.
Conclusion
Chicken bonds and Liquity integration heavily rely on the Curve protocol when it comes to yield generation and price discovery of bLUSD.
Impermanent loss resulting from the price volatility of bLUSD, and the opportunity cost resulting from negligible trading activities are risks that shouldn't be overlooked.
Risks associated with stability pool investment into B.Protocol and LUSD price can be considered as black swan events but cannot be ignored. B.Protocol has been extensively audited, including the integration with Liquity, however there exists the possibility of economic black swan (liquidation failure leading to losses) or technical black swan (smart contract bug).
Overall, Chicken Bonds accomplish a high degree of trustlessness, given the complexity of the product. This should be a consolation to users who surely have the egregious failures of CeFi trust assumptions fresh in their minds. This is, nevertheless, an experimental product, and users should take time to understand the Chicken Bond mechanics, and the risks involved.
The core purpose of this report is to make users aware of the product/services and its risks. This should not, in any way, be treated as financial/investment advice.