> For the complete documentation index, see [llms.txt](https://docs.fathom.fi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fathom.fi/fxd-stablecoin/bookkeeping-mechanism/stablecoin-accounting.md).

# Stablecoin Accounting

[totalStablecoinIssued](https://github.com/Into-the-Fathom/fathom-stablecoin-smart-contracts/blob/master/contracts/main/stablecoin-core/BookKeeper.sol#L38)

***

$$
totalStablecoinIssued = poolStablecoinIssued + totalUnbackedStablecoin
$$

***

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`.

### [poolStablecoinIssued](https://github.com/Into-the-Fathom/fathom-stablecoin-smart-contracts/blob/master/contracts/main/stablecoin-core/BookKeeper.sol#L32C61-L32C61)

The variable `poolStablecoinIssued` is stored in the **`BookKeeper`** contract. Three functions manipulate `poolStablecoinIssued`.

#### [fn adjustPosition](https://github.com/Into-the-Fathom/fathom-stablecoin-smart-contracts/blob/master/contracts/main/stablecoin-core/BookKeeper.sol#L291)

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`

$$
totalStablecoinIssued ↓ = poolStablecoinIssued↓ + totalUnbackedStablecoin
$$

#### [fn confiscatePosition](https://github.com/Into-the-Fathom/fathom-stablecoin-smart-contracts/blob/master/contracts/main/stablecoin-core/BookKeeper.sol#L412)

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**

$$
totalStablecoinIssued = ΣpoolStablecoinIssued + totalUnbackedStablecoin
$$

**Equation B**

$$
totalStablecoinIssued = \[ΣpoolStablecoinIssued - α] + \[totalUnbackedStablecoin + α]
$$

When *α* represents the amount of debt transferred from `poolStablecoinIssued` tot `unbackedStablecoin` by `confiscatePosition` function.

#### [fn accrueStabilityFee](https://github.com/Into-the-Fathom/fathom-stablecoin-smart-contracts/blob/master/contracts/main/stablecoin-core/BookKeeper.sol#L482)

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.

$$
totalStablecoinIssued + β = \[ΣpoolStablecoinIssued + β] + totalUnbackedStablecoin
$$

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](https://github.com/Into-the-Fathom/fathom-stablecoin-smart-contracts/blob/master/contracts/main/stablecoin-core/BookKeeper.sol#L38)

`totalStablecoinIssued` is the variable stored in the ***`BookKeeper`*** contract. Four functions manipulate `totalStablecoinIssued`.

#### [fn adjustPosition](https://github.com/Into-the-Fathom/fathom-stablecoin-smart-contracts/blob/master/contracts/main/stablecoin-core/BookKeeper.sol#L291)

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,

$$
totalStablecoinIssued ↑ = poolStablecoinIssued↑ + totalUnbackedStablecoin
$$

If a position's debt decreases as a user pays back FXD,

$$
totalStablecoinIssued ↓ = poolStablecoinIssued↓ + totalUnbackedStablecoin
$$

#### [fn settleSystemBadDebt](https://github.com/Into-the-Fathom/fathom-stablecoin-smart-contracts/blob/master/contracts/main/stablecoin-core/BookKeeper.sol#L449)

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`.

$$
totalStablecoinIssued ↓ = ΣpoolStablecoinIssued↓ + totalUnbackedStablecoin
$$

#### [fn mintUnbackedStablecoin](https://github.com/Into-the-Fathom/fathom-stablecoin-smart-contracts/blob/master/contracts/main/stablecoin-core/BookKeeper.sol#L464C22-L464C22)

The `mintUnbackedStablecoin` function increases the amount of `totalUnbackedStablecoin` and `totalStablecoinIssued`.

$$
totalStablecoinIssued ↑ = ΣpoolStablecoinIssued↑ + totalUnbackedStablecoin
$$

#### [fn accrueStabilityFee](https://github.com/Into-the-Fathom/fathom-stablecoin-smart-contracts/blob/master/contracts/main/stablecoin-core/BookKeeper.sol#L482)

$$
totalStablecoinIssued + β = \[ΣpoolStablecoinIssued + β] + totalUnbackedStablecoin
$$

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](#fn-accruestabilityfee).
