Accrued Interest Tracking
In order to track accrued interest on floating rate loans, we must accrue interest to a user's liability every time their borrowing interest rate changes. We accomplish this by tracking users' liabilities with liability tokens that increase in value over time, accruing interest to all outstanding loans.
Accrued Interest Tracker Overview
Tracking accrued interest for underlying assets is done using an accrued interest tracker account that starts with a balance of 1000 interest tracking tokens and receives interest accrual payments every time the utilization ratio of the asset it's tracking changes. Effectively, this means the account is tracking the liability value of a loan taken out at protocol origination. When a user borrows from the protocol we store their borrowed amount divided by the interest tracker balance, then at all points in the future we can multiply that quotient by the current interest tracker balance divided by the starting interest tracker balance to get the current value of a user's liabilities.
Accrued Interest Tracker Payments
Every time the utilization ratio of an underlying asset changes, the pool makes an accrued interest payment to the accrued interest tracker account. The payment amount is equal to the per-block interest accrued on the balance of the accrued interest tracker account times the number of blocks between the second to last and last utilization modifying transactions. This means that accrued interest tracking lags one period. The indicator must lag because turret smart contracts do not have an accurate view of the current ledger, so they need to look at past ledger state to ensure truthfulness. See Math for the equation.
To provide an example, we'll outline the utilization delta payment of a sample transaction (transaction 100):
Transaction 98 - block 1000 - depositing XLM
Protocol state pre-transaction 98
Pool Balance: 90 XLM
XLM Liabilities: 100 XLM
XLM Utilization Ratio: .526
Accrued interest tracker balance: 100
Transaction 98 Action:
Deposits 10 XLM into lending pool
Protocol state post-transaction 98
Pool Balance: 100 XLM
XLM Liabilities: 100 XLM
XLM Utilization Ratio: .5
Transaction 99: Block 1100 - Borrowing XLM
Details irrelevant
Transaction 100: Block irrelevant - Borrowing XLM
Details irrelevant
Accrued Interest Payment
Makes accrued interest payment of 50 interest tracker assets to the accrued interest tracker account
100*(.05+.526*0.2)/(6,307,200)*(1100-1000) = 0.0002461
It should be noted that transactions 98 and 99 would also have made accrued interest payments; they just weren't the focus of this example.
Accrued Interest Corrections
In addition to accrued interest payments, the accruet interest tracker sysrem also makes accrued interest correction clawbacks and payments. These take place in the same transaction as accrued interest payments. This is necessary because the accrued interest tracker can apply an incorrect payment if its ledger view is incorrect and missing the most recent transaction (this commonly occurs when two users interact with the protocol simultaneously).
Accrued Interest Correction Process
When an accrued interest payment is calculated, the smart contract also checks the last utilization delta payment to see if it was correct. If it was not correct, the tracker calculates what the correction should be (undoing the bad delta and adding the correct one), then repeats the process, checking the next payment back. Once the smart contract finds the total correction, it is applied in either a payment or clawback operation depending on whether the correction was positive or negative. It should be noted that since there is a 5 minute timebounds on protocol transactions, the utilization tracker assumes that any accrued interest payment 5 minutes newer than the previous one was correct.
To provide an example, we'll outline the accrued interest correction payment of a sample transaction (transaction 100):
Transaction 97 - Block 900 - Deposit XLM
Protocol state pre-transaction 97
Pool Balance: 60 XLM
XLM Liabilities: 100 XLM
Utilization Ratio: .625
Accrued interest tracker balance: 1000
Transaction 97 Action
Deposit 20 XLM
Accrued interest tracker payment of .01
Protocol state post-transaction 97
Pool Balance: 80 XLM
XLM Liabilities: 100 XLM
Utilizaiton Ratio: .5555556
Accrued interest tracker balance: 1000.01
Transaction 98- Block 1000 - Deposits XLM
Protocol state pre-transaction 98
Pool Balance: 80 XLM
XLM Liabilities: 100 XLM
Utilization Ratio: .5555556
Accrued interest tracker balance: 1000.01
Transaction 98 action
Deposit 20 XLM
Accrued interest tracker payment: .01
Protocol state post-transaction 98
Pool Balance: 100 XLM
XLM Liabilities: 100 XLM
Utilization Ratio: .5
Accrued interest tracker balance: 1000.02
Transaction 99 - Block 1010 - Borrows XLM
Protocol state pre-transaction 99
Pool Balance: 100 XLM
XLM Liabilities: 100 XLM
Utilization Ratio: .5
Accrued interest tracker balance: 1000.02
Transaction 99 action
Borrows 100 XLM
Makes an accrued interest tracker payment of .002
This is incorrect, correct payment is .002774
(0.05+0.625*0.2)/(6,307,200)(1000-900)*1000 = .002774
Protocol state post-transaction 99
Pool Balance: 100 XLM
XLM Liabilities: 100 XLM
Utilization Ratio: .5
Accrued interest tracker balance: 1000.022
Transaction 100 - Borrows XLM
Protocol state pre-transaction 100
Accrued interest tracker balance: 1000.022
Other information irrelevant
Protocol actions
Borrow XLM
Make a accrued interest correction payment of .000774
.002774 - .002 = .000774
Make an accrued interest tracker payment of .0002554
(0.05+0.555556*0.2)/(6,307,200)(1010-1000)*1000 = .0002554
Protocol state pre-transaction 100
Accrued interest tracker balance: 1000.02303
Other information irrelevant
Using the Accrued Interest Tracker to find the value of a user liability.
To find the value of a users liability the protocol multiplies the number of liability tokens associated with that liability times the accrued interest tracker balance plus the expected next accrued interest tracker payment divided by the starting tracker balance.
For Example:
User's liability claimable balance contains 99.8 l00XLM tokens
00XLM's accrued interest tracker account has 1005.2 i00XLM
Next expected payment is .2 i00XLM
User's liability is 100.33892 XLM
(1005.2+.2)/1000 * 99.8 = 100.33892
Last updated