Principal Tokens and Yield Tokens
We have introduced a new program which tokenizes the position deposited into our variable rate lending program into principal tokens and yield tokens.
- Principal Tokens: maps one-to-one to the underlying token
- Yield Tokens: maps to the actual yield of the underlying protocols over the period
- Maturity: the time after which users are allowed to perform the redemption
In order to make the yield token fungible with each other, we reduce the amount of principal tokens released when minting to take into account the interest that've already accrued to make sure that the yield tokens are fungible.
For example, when users deposit 1000 USDC, they might receive 999 principal USDC and 1000 yield USDC. This will happen when the interest between pools starts at the moment that the user deposit is already 0.1%. At this point, we are sure that the 1000 yield token can redeem for 1 USDC. Adding up with 999 principle USDC which can be redeemed for 999 USDC, this adds up to 1000 USDC. If we don't do this reduction, then the yield token will not be fungible.
Using Principal tokens we can implement fixed-rate borrowing and lending using a zero-coupon bond model since principal tokens can always be redeemed one to one to the underlying.
Users can trade principal tokens in various DEX. The seller of the principal tokens can be considered a borrower while the buyers can be considered a lender. The lender buys the principal tokens (e.g. USDC) using underlying tokens (e.g. ppUSDC). The borrower buys the underlying tokens (e.g. USDC) using the principal tokens (ppUSDC).
Due to the time value of money, 1 principal token should always be traded at less than 1 underlying token. Concretely, 1 principal USDC should be traded at less than 1 USDC.
The interest rate of lending and borrowing can be calculated as:
Interest Paid = the difference between the Principal USDC price and 1
Say 1 Principal USDC (ppUSDC) is traded at 0.95 USDC. Then the interest that the lender is going to receive or borrower is going to pay is (1 - 0.95) = 0.05 USDC. Users can then annualize it to calculate the APY.