Your bond accrues bLUSD according to a smooth plateauing curve.
A fresh bond starts accruing bLUSD rapidly, and as time passes, the accrual rate slows down.
The equation for bLUSD accrual is given by:
accrued_bLUSD = (bond_amount / redemption_price) * t / (t + alpha)
The redemption price is given by:
redemption_price = q_r / S
Where q_r is the LUSD in the Reserve, and S is the total bLUSD supply.
Here alpha is a parameter which dictates how fast all bonds accrue bLUSD - i.e. how steep the curve is. An initial value for alpha has been determined via simulations. Alpha is dynamically adjusted by the system’s “controller”, in order to maintain the economic attractiveness of bonding. For more information on the controller, see the system’s technical readme.
Your bLUSD cap is an upper bound on the amount of bLUSD your bond can accrue, based on the accrual curve mentioned above.
When you have an open bond, your accrued bLUSD gets closer and closer to your cap over time without ever reaching it.
Your bLUSD cap is calculated by the following formula:
cap = bond_amount / redemption_price
The cap ensures that the maximum bLUSD obtained via Chicken In can not reduce the redemption price.
The cap also facilitates a non-linear accrual curve, which allows fresh bonders to accrue bLUSD more quickly than older bonds. This helps encourage continued bonding and re-bonding.
bLUSD is expected to trade at a market premium above its redemption price.
This is because bLUSD earns an amplified yield compared to the underlying LUSD that it redeems for.
As a bLUSD holder, your bLUSD is redeemable for a certain amount of LUSD now - let’s say x LUSD. But in the future, the same amount of bLUSD will be redeemable for more than what x LUSD could have grown to by being staked in the best yield source (currently B.Protocol).
This future value boost should be priced into the net present value of bLUSD - leading to a market price premium over the current redemption price.
bLUSD should also have a price floor at the redemption price since it is always possible to redeem bLUSD for a proportional share of the LUSD in the Reserve.
This is a complex and interesting research question. While we expect bLUSD to trade on the open market at a premium over the redemption price, a fair pricing formula for bLUSD is not straightforward to derive.
The Chicken Bonds whitepaper details some initial attempts at deriving a fair price for bLUSD, and we have run a bounty which incentivized external research teams to tackle this topic. Results have been interesting, though so far incomplete - it appears that an accurate expression for the fair price of bLUSD may be difficult to derive. [RiskDAO's paper]
The redemption price is the amount of LUSD that 1 bLUSD redeems for.
The redemption price is calculated based on:
q_r / S where q_r is the total LUSD in the Reserve, and S is the total supply of bLUSD.
Redemptions are proportional: redeeming x% of bLUSD supply returns x% of the LUSD in the Reserve.
The initial redemption price before the first Chicken In is set at 1.0. However, redemptions are only possible, once 30 days after the launch have passed.
The redemption price should almost always increase over time. This is due to the following facts:
- Тhe system guarantees that Chicken Outs, Chicken Ins and redemptions have no impact on the redemption price, preventing any dilution of the bLUSD token. Chicken Ins increase both the Reserve q_r and the bLUSD supply S, but proportionally, i.e. they keep the ratio q_r / S constant. Redemptions deplete both the Reserve q_r and the bLUSD supply S, also maintaining their proportion. Chicken Outs don’t affect the bLUSD supply or the Reserve.
- Yield earned by all system funds flows to the Reserve. When yield is harvested, the LUSD in the Reserve increases with no change to the bLUSD supply.
All bonds accrue bLUSD according to the same equation:
accrued_bLUSD = (bond_amount / redemption_price) * t / (t + alpha)
Since the rate of bLUSD accrual is the change in accrued bLUSD per unit time, then, all else being equal:
- Larger bonds accrue bLUSD faster than smaller bonds
- Younger bonds accrue bLUSD faster than older bonds
The relative accrual rate (bLUSD per unit time per LUSD bonded) does not depend on bond size - therefore, all else being equal, splitting a given LUSD amount across several smaller bonds will not net you more bLUSD.
In the long run, your bond’s accrued bLUSD increases towards its current cap. . However, there can be small discrete jumps (both up and down) in your accrued bLUSD along the way. This is because of the way the cap is calculated. When yield is harvested, the redemption price increases, which slightly decreases the cap and moves your bLUSD curve down slightly. Here is an example historical bLUSD curve for a given bond. See how it increases over time, but with occasional small “jumps”:
Edge case: when decreases from harvests outweigh bLUSD accrual. If you leave your bond open for a long time without Chickening In or Out, your accrual curve becomes very shallow and your rate of bLUSD gain becomes very slow. If you let your bond stagnate long enough then at some point, your cap decreases faster than your bLUSD accrues, and your bond will start to actually lose bLUSD over time. Therefore it would make sense to take action before your bond reaches a very slow accrual rate - either Chicken In, or Chicken Out. Your accrued bLUSD can also jump up slightly. This happens when the system adjusts the global accrual parameter alpha to keep the average bond age within a desirable range.
Also note that although your accrued bLUSD quantity increases in the long run, the market value of your accrued bLUSD can fluctuate depending on how the market premium varies.
The bLUSD supply is fully redeemable and is always backed by the underlying LUSD in the Reserve.
Both yield sources are single-sided and auto-compounding in nature and do not suffer from impermanent loss.
Each yield source is expected to provide only positive returns. In extreme scenarios, B.Protocol could occasionally register a loss - for example, if the Stability Pool liquidates Troves at a loss, or if B.Protocol is not able to sell the liquidated ETH fast enough.
In general, the consistent profits from Liquity liquidations, LQTY issuance and the Yearn Curve vault are expected to heavily outweigh any occasional loss incurred by B.Protocol, and we expect the Chicken Bonds system to remain fully backed.
A 3% fee (in LUSD) is applied to Chicken Ins and drawn from the bonded LUSD. This fee is sent to the Curve gauge stakers. Users who hold LP tokens for the bLUSD-LUSD pool may stake them to the gauge to earn fees, which are distributed smoothly to LPs over time.
Additionally, all the yield accrued by the system between launch and the first Chicken In will be sent to the Curve gauge and distributed smoothly over time to LPs.
Chicken-in fees are collected in a “bucket” from which they’re dispensed linearly by Curve over the course of 7 days if there are no further chicken-ins. However every time there’s a new chicken-in, the “runway” is extended to another 7 days (using the remaining fees in the “bucket” plus the newly added fee).
Here are approximate gas costs for the main users' actions in Chicken Bonds:
- Create Bond: 500k
- Chicken In: 600k
- Chicken Out: 480k
It depends on how you define the “game”! The system is likely not a zero-sum game between bonders: it is possible for bonders as a group to make a net profit. If bLUSD holders and traders are also included in the scope of the game, then this expanded game is likely zero-sum. For further discussion please see this blog post.
At all times, the Reserve Bucket is earning the yield of the entire treasury (Pending + Reserve + Permanent Bucket). The Reserve Bucket alone simply earns X% APR, where X% is the standard Stability Pool APR. If we include the Pending APR and Permanent APR then X will be higher. We call this total APR the “bLUSD APR”.
bLUSD_APR = ((Protocol_LUSD_in_Stability_pool * Stability_pool_APR_rate) + (Protocol_LUSD_in_Yearn_Curve_strategy * Yearn_LUSD_Curve_APR_rate)) / Reserve_bucket
Most of the time this equates to:
bLUSD_APR =((Pending_bucket + Reserve_bucket) * Stability_pool_APR_rate) + (Permanent_bucket * Yearn_LUSD_Curve_APR_RATE)) / Reserve_bucket
But the Permanent
Bucket holds LUSD in the Stability Pool until it’s shifted into the Curve via Yearn so we use the first formula to be more accurate.
The bLUSD APR is a multiple of the Stability Pool APR. This multiple is the “Yield Amplification”.
Yield_amplification = bLUSD_APR / Stability_pool_APR
The fair price is an attempt to calculate what bLUSD should be worth given the yield it generates. The general theory is: the higher the yield, the higher the value of the token.
Simple example: if bLUSD is generating 2x the yield of LUSD, some people might be willing to pay nearly 2x the price of LUSD, e.g. 1.9 LUSD for it.
In reality, each individual’s idea of the fair price could vary, based on their context and how much weight they attribute to certain qualities of the system. To factor this we’ve shown the fair price as a range.
The lower bound is a very conservative figure which ignores the existence of the Pending Bucket, and therefore excludes the yield it generates. It was formulated by RiskDAO in their attempt at deriving a fair price formula. The Pending Bucket is excluded since unlike the Reserve and Permanent Buckets, the Pending Bucket can vary wildly and is less easy to predict the variance. The Permanent bucket can only increase, and the Reserve Bucket can only change in such a way that increases the value of bLUSD (due to either the rising price floor, or decreasing Reserve size while the Permanent Bucket doesn’t decrease).
Lower_bound = (Protocol_LUSD_in_Stability_pool_excluding_Pending_bucket + (Protocol_LUSD_in_Yearn_Curve_strategy * (Yearn_Curve_APR / Stability_Pool_APR)) / bLUSD_supply
The upper bound includes the Pending Bucket, and is therefore the same value as the Yield amplification multiple.
Upper_bound = (Protocol_LUSD_in_Stability_pool + (Protocol_LUSD_in_Yearn_Curve_strategy * (Yearn_Curve_APR / Stability_Pool_APR)) / bLUSD_supply
The most significant factor that influences the variance in bonding time is the market price of $bLUSD. If the $bLUSD price goes up (e.g. from $1.25 to $1.4), the break even point and optimal rebonding time is reached faster. On the other hand, If the $bLUSD price falls (e.g. from $1.25 to $1.05), it will take longer to reach the break even point, and optimal rebonding time.
A low market price of $bLUSD could be caused by a lot of users Chickening In at the same time. As this could lead to a situation where bonders would need to wait months or even years to achieve break even, there is another factor that influences the rebonding time: a built-in bonding time optimizer. The built-in controller increases the accrual speed of $bLUSD to bring back the optimal rebonding time to ~30 days in the system.
The built-in controller can adjust the accrual (curve) of bLUSD if the average bonding time in the system exceeds 15 days. Once the controller increases the accrual speed (steepness of the accrual curve through the parameter “alpha”), existing bonders receive more $bLUSD during the same period of time as before.
By aiming for an average optimal bonding time of 30 days, the controller makes sure bonding stays economically attractive for bonders. The controller monitors the average bonding time. Under normal circumstances, the average bond age should be half the optimal rebonding time. If the average bonding time is longer than 15 days, the controller is triggered.
The controller increases the accrual speed of $bLUSD for pending and new bonds according to a formula (see next section), until the average bonding times falls again below 15 days. Once the accrual has been increased, it stays like that and will not be decreased even if the $bLUSD market price goes up. In turn, this means that the controller can only speed up the accrual of $bLUSD, but will not slow it down
The alpha parameter of the accrual function variable implements a feedback controller which adjusts the parameter in one direction (reducing it by a 0.1% for each day that the average bond age is above 15 days, making the accrual increase each day).
The controller's logic is simple in theory: every accrualAdjustmentPeriodSeconds seconds (1 day), determine the size-weighted average age of pending bonds (in seconds) and compare it to targetAverageAgeSeconds. If the average is higher than the target, reduce accrualParameter by a fixed percentage (accrualAdjustmentRate = 0.1%).
The reduction results in an immediate increase of the accrued bLUSD amounts of pending bonds. This will continue until it’s attractive to chicken-in again, which would result in a reduction of the average outstanding bond age, eventually dropping below the target.
OlympusDAO was a significant innovation in bonding technology and moved DeFi forward as a whole. However, the “(3,3)” coordination game was relying on inflationary OHM rewards, initially allowing the protocol to acquire assets rapidly but then left late joiners holding the bag.
The bLUSD token will enjoy a rising price floor due to the amplified yield and the hard redemption mechanism. Though the market price premium can fluctuate, this backstop should limit reflexivity in the bLUSD price.
Bonding in Chicken Bonds is also principal-protected since bonders can choose to either Chicken In or withdraw their full LUSD principal.
Finally, the Chicken Bonds mechanism enables protocols to acquire liquidity at a greatly reduced cost compared to Olympus Pro. Whereas protocols using Olympus Pro are effectively buying liquidity at a premium, Chicken Bonds will naturally acquire protocol-owned funds at no cost beyond what is needed for initial bootstrapping. Bootstrapping costs can be low, and may simply amount to the foregone yield on an initial bond opened by the protocol team.
However, compared to Olympus, the POL will not be available instantly but will accrue gradually as users create bonds and Chicken In.