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


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.fathom.fi/fxd-stablecoin/bookkeeping-mechanism/stablecoin-accounting.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
