burn debt tokens
Last updated
Last updated
Previously, we established how much debt user was inclined repay and assigned its value to paybackAmount
. Now we are going to burn the corresponding debt tokens to reflect a repayment in debt.
Depending on which kind of debt the user has, stable or variable, the burn function will be called on the corresponding debt token contract.
See StableDebtToken: burn
burn
calls _burnScaled
on VariableDebtToken.sol.
_burnScaled
scales the burn amount against variableBorrowIndex
and calls _burn
passing the amountScaled
.
_burn
is defined on MintableIncentivizedERC20.sol:
reduces total supply
reduces user's balance
_burnScaled
scale burn amount against variableBorrowIndex
balanceIncrease
: update user's variable debt balance to bring it in-line with latest index
additionalData
contains the index at which the balance was last updated.
this is referenced to calculated balanceIncrease
, then subsequently updated
call _burn
, passing scaled amount
if balanceIncrease
> amount
:
interest accrued outweighs the burn amount
emit mint and transfer
Else amount
> balanceIncrease
:
burn amount outweighs interest accrued
emit burn and transfer
Note:
InbalanceIncrease
> amount
, tokens are not actually minted. amountToMint
is simply a representation of the remaining interest accrued, less the nominal burn amount.
Essentially, each unit of scaled token represents itself and the interest it has accrued as dictated by the index. Therefore, to account for the interest, the nominal amount is divided by the index to obtain amountScaled
.
Index here refers to variableBorrowIndex
Note: the actual number of tokens being burnt is amountScaled
. This is because debt tokens accrue interest in the same way that ATokens do; against an index.
_burn
reduce total supply by burn amount
get user's balance decrement it by burn amount
apply incentives if defined (.handleAction
)