SMART Yield Specifications
- Junior token (jToken) holders are exposed to variable yields which may fluctuate. By providing liquidity, juniors are effectively buying risk from senior bond investors. The risk here is the originating variable yields going below the guaranteed level. At the same time, juniors will benefit from the extra rewards generated by tokens locked by seniors in cases where the variable APY of the underlying lending protocol (including the governance token rewards) are higher than the weighted average guaranteed yields of current seniors.
It is expected that the senior positions will have more capital in a pool than junior positions, so the yield may be split by them accordingly.
Junior tranches are represented by ERC-20 tokens (jTokens) which provide liquidity and buy risk from Senior bond investors. Junior tranches have variable APY and are more risky than senior tranches.
Juniors benefit from the extra rewards generated by liquidity locked in sBONDs by Seniors in situations where the variable APY of originator, for example, Compound (including the COMP rewards) is higher than the guaranteed yields of current sBONDs. On the other hand, in the event of falling rewards from Compound, the returns of Juniors are diminished and if need be, their locked funds will be used to pay for the guaranteed returns of sBONDs.
In order to provide the best UX for Juniors and encourage them to participate in SMART Yield pools, the system will allow them to join the pool at any time. Moreover, they will have a possibility of instant withdrawal of at least part of their funds, without affecting the integrity of the system and keeping the guarantees.
To do that, we calculate the profits and losses of the pool very efficiently. We do that by averaging all existing sBONDs into one “weighted average” sBOND.
Junior APY determines the annual percentage yield for junior tokens at the current time.
The APY for your junior position is realized when selling your junior tokens for their respective underlying tokens, at whatever the current junior token-to-underlying token price is. The conversion rate of junior tokens starts at 1:1, and slowly grows (or drops) when interest accrues. Depending on the annualized difference between your purchase and sell price you can calculate your APY.
Whenever senior positions have to be filled by junior funds (in the case that the underlying lending protocol offers lower rates than current seniors get), the price drops.
Otherwise, whenever yield accrues to junior positions that leverage senior funds, the conversion rate increases.
The Junior Bonds are represented by ERC-721 non-fungible tokens that have a value denominated in junior tokens, and a maturity date equal to that of the ABOND. These special types of bonds are issued as part of the 2-step withdrawal process.
A junior is subject to Senior tranche risk. In order for a jToken holder to exit the pool, the current sBONDs need to mature. Because it is computationally intensive and gas inefficient to track each and every sBOND with each tx, we opt to use the Aggregated Bond (ABOND) as an approximation for the Senior tranche.
- recalculate price;
- transfer Junior jTokenDAI (for example) to pool (lock);
- mint a junior BOND token (NFT) and transfer to Junior;
- queue liquidation after ABOND.maturesAt. First tx after that timestamp will trigger the liquidation.
2nd step: After the lock period has ended, the Junior can redeem the jBOND NFT and finish the Withdraw process:
- send junior's liquidated DAI;
- burn the jBOND NFT.
- The set of features that a senior bond has is:
- tokens - the amount of jTokens deposited in the bond;
- maturesAt - the maturity date at which it can be redeemed.
Fees on Junior tokens are collected on deposit since they are fungible and immediately tradeable, they would be infeasible to track and collect fees at maturity. Junior deposit fees are set to 0.5%.
Senior tranches are represented by ERC-721 non-fungible tokens (sBONDs) that have a guaranteed yield for the life of the bond. Senior tranches have fixed APY and are less risky compared to junior tranches.
The set of features that a senior bond has is:
principal- the amount deposited in the bond;
gain- the amount of token that will be gained (this is used to determine the APY);
issuedAt- the issuance date;
maturesAt- the maturity date;
liquidated- a flag used to determine if the senior bond was redeemed or not.
Senior APY determines the annual percentage for senior bonds at the current time.
It can be derived for any and all senior bonds in existence by annualizing the percentage difference between the deposited value and the gained value using the following formula:
((gain/principal) / (maturesAt - issuedAt)) * 365 * 100
In order to provide the best UX for Juniors and encourage them to participate in our SMART Yield pools, we want the system to allow them to join the pool at any time. Moreover we want the possibility of instant withdrawal of at least part of their funds, without affecting the integrity of the system and keeping the guarantees.
To do that, we have to be able to calculate the profits and losses of the pool very efficiently. We do that by averaging all existing senior bonds into one "weighted average" ABOND with the following properties:
- Principal locked (sum) ->
- Guaranteed rewards (sum) ->
- Start timestamp ->
- Weighted average end timestamp ->
The aggregate sBOND (ABOND) represents the current Senior pool and it will help us calculate the health of the Senior pool at an instant. If the rewards generated by the Senior pool so far exceed the guaranteed rewards at this time (
abond.paid), the extra reward can be considered profit for the junior pool (and loss if it's negative).
ABOND parameters are recalculated each time new Senior bonds are purchased.
BarnBridge protocol fees on Senior bonds are 5% of returns and collected at maturity.