Stablecoin Accounting
This section provides a deep understanding of how the accounting of issued stablecoin is done in the BookKeeper contract.
The formula mentioned above is used in all the functions that manipulate the totalStablecoinIssued
and poolStablecoinIssued
variables. If the value on the right-hand side of the equation changes, the value on the left side must be changed exactly the same way.
Now, let's delve deeper into the functions that manipulate the poolStablecoinIssued
and totalStablecoinIssued
variables. We will see how the above mentioned equation affects each function, starting with poolStablecoinIssued
.
The variable poolStablecoinIssued
is stored in the BookKeeper
contract. Three functions manipulate poolStablecoinIssued
.
This function manipulates both poolStablecoinIssued
and totalStablecoinIssued
.
The adjustPosition
function changes the lockedCollateral
and debtShare
values mapped to each position. When the debtShare
in a position decreases, poolStablecoinIssued
also decreases. Conversely, when the debtShare
in a position increases, the value of poolStablecoinIssued
increases. It calculates the amount by which the debt value in a position has increased or decreased and adjusts the poolStablecoinIssued
value accordingly. The adjustPosition
function also manipulates the totalStablecoinIssued
variable.
For example:
If debtShare in position, which is of collateral XYZ, decreases by 10, then
poolStablecoinissued
[XYZ] decreases by 10*debtAccumulatedRate
totalStablecoinIssued
decreases by 10*debtAccumulatedRate
This function manipulates both poolStablecoinIssued
and totalUnbackedStablecoin
but not totalStablecoinIssued
.
The confiscatePosition
function removes collateral and debt from a position and transfers them to addresses specified in the function arguments. During this process, the pool-specific balance is deducted. The amount of debt deducted from poolStablecoinIssued
results in an increase in both the systemBadDebt[_stablecoinDebtor]
and totalUnbackedStablecoin
.
However, the totalStablecoinIssued
is unaffected because it is the sum of all poolStablecoinIssued
values and totalUnbackedStablecoin
. The confiscatePosition
function essentially transfers values from poolStablecoinIssued
to totalUnbackedStablecoin
, ensuring that the totalStablecoinIssued
remains unchanged.
What the confiscatePosition
function does is transition from equation A to equation B.
Equation A
Equation B
When α represents the amount of debt transferred from poolStablecoinIssued
tot unbackedStablecoin
by confiscatePosition
function.
This function manipulates both poolStablecoinIssued
and totalStablecoinIssued
variables.
The accrueStabilityFee
function increases the value of poolStablecoinIssued[_collateralPoolId]
. This action of accruing stability fees involves recalculating the total amount of debt issued from a specific collateral type. Due to the increase in poolStablecoinIssued[_collateralPoolId]
, the totalStablecoinIssued
value also increases.
Where β represents the amount by which the debtValue
increases as the inflated value of _debtAccumulatedRate
is reflected in the debtVault
when the accrueStabilityFee
function is called.
totalStablecoinIssued
is the variable stored in the BookKeeper
contract. Four functions manipulate totalStablecoinIssued
.
The adjustPosition
function adjusts the values of totalStablecoinIssued
and poolStablecoinIssued
based on the changes made to a position. For more details, please refer to the fn adjustPosition
section under poolStablecoinIssued
.
If a position's debt increases because a user borrows (more) FXD,
If a position's debt decreases as a user pays back FXD,
The settleSystemBadDebt
function utilizes the internal balance of stablecoin in the SystemDebtEngine
within the bookKeeper
to settle the bad debt. When the bad debt is settled, the value of totalUnbackedStablecoin
decreases, and so does the value of totalStablecoinIssued
.
The mintUnbackedStablecoin
function increases the amount of totalUnbackedStablecoin
and totalStablecoinIssued
.
Where β represents the amount by which the debtValue
increases as the inflated value of _debtAccummulatedRate
is reflected in the debtValue
when the accrueStabilityFee function is called.
For a more detailed explanation, please refer to the previous section on accrueStabilityFee.
Last updated