> For the complete documentation index, see [llms.txt](https://bitprotocol.gitbook.io/bitprotocol/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bitprotocol.gitbook.io/bitprotocol/resources/technical-documentation/stabilitypool.md).

# StabilityPool

## **Write Methods**

```
function provideToSP(uint256 _amount) external
```

Deposits debt tokens into the pool, accrues rewards, and updates snapshots.

| **Input Parameter** | **Type**  | **Description**                   |
| ------------------- | --------- | --------------------------------- |
| `_amount`           | `uint256` | Amount of debt tokens to deposit. |

```
function withdrawFromSP(uint256 _amount) external
```

Withdraws debt tokens from the pool, claims rewards, and updates snapshots.

| **Input Parameter** | **Type**  | **Description**                    |
| ------------------- | --------- | ---------------------------------- |
| `_amount`           | `uint256` | Amount of debt tokens to withdraw. |

```
function claimCollateralGains(
        address recipient,
        uint256[] calldata collateralIndexes
    ) public
```

Claims collateral gains for specified tokens and sends them to the recipient.

| **Input Parameter** | **Type**    | **Description**                       |
| ------------------- | ----------- | ------------------------------------- |
| `recipient`         | `address`   | Address to receive gains.             |
| `collateralIndexes` | `uint256[]` | Array of collateral indices to claim. |

```
function claimReward(address recipient) external returns (uint256 amount)
```

Returns the pending Bit rewards for a depositor.

| **Input Parameter** | **Type**  | **Description**             |
| ------------------- | --------- | --------------------------- |
| `recipient`         | `address` | Address to receive rewards. |

**Returns:**

| **Return Value** | **Type**  | **Description**            |
| ---------------- | --------- | -------------------------- |
| `amount`         | `uint256` | Amount of rewards claimed. |

## **View Methods**

```
function getTotalDebtTokenDeposits() external view returns (uint256)
```

Returns the total debt tokens deposited in the pool.

**Returns:**

| **Return Value** | **Type**  | **Description**              |
| ---------------- | --------- | ---------------------------- |
| `totalDebt`      | `uint256` | Total debt tokens deposited. |

```
function getDepositorCollateralGain(
        address _depositor
    ) external view returns (uint256[] memory collateralGains)
```

Returns the collateral gains earned by a depositor.

| **Input Parameter** | **Type**  | **Description**    |
| ------------------- | --------- | ------------------ |
| `_depositor`        | `address` | Depositor address. |

**Returns:**

| **Return Value**  | **Type**    | **Description**                      |
| ----------------- | ----------- | ------------------------------------ |
| `collateralGains` | `uint256[]` | Array of collateral gains per token. |

```
function claimableReward(
        address _depositor
    ) external view returns (uint256)
```

Returns the pending Bit rewards for a depositor.

| **Input Parameter** | **Type**  | **Description**    |
| ------------------- | --------- | ------------------ |
| `_depositor`        | `address` | Depositor address. |

**Returns:**

| **Return Value** | **Type**  | **Description**          |
| ---------------- | --------- | ------------------------ |
| `reward`         | `uint256` | Claimable reward amount. |

```
function getCompoundedDebtDeposit(
        address _depositor
    ) public view returns (uint256)
```

Calculates a depositor’s compounded debt deposit after rewards.

| **Input Parameter** | **Type**  | **Description**    |
| ------------------- | --------- | ------------------ |
| `_depositor`        | `address` | Depositor address. |

**Returns:**

| **Return Value**    | **Type**  | **Description**                 |
| ------------------- | --------- | ------------------------------- |
| `compoundedDeposit` | `uint256` | Compounded debt deposit amount. |

## Structs

```
struct AccountDeposit {
        uint128 amount;
        uint128 timestamp; // timestamp of the last deposit
    }
```

```
struct Snapshots {
        uint256 P;
        uint256 G;
        uint128 scale;
        uint128 epoch;
    }
```

```
struct SunsetIndex {
        uint128 idx;
        uint128 expiry;
    }
```

```
struct Queue {
        uint16 firstSunsetIndexKey;
        uint16 nextSunsetIndexKey;
    }
```

## Events

```
event StabilityPoolDebtBalanceUpdated(uint256 _newBalance)
```

```
event P_Updated(uint256 _P)
```

```
event S_Updated(uint256 idx, uint256 _S, uint128 _epoch, uint128 _scale)
```

```
event G_Updated(uint256 _G, uint128 _epoch, uint128 _scale)
```

```
event EpochUpdated(uint128 _currentEpoch)
```

```
event ScaleUpdated(uint128 _currentScale)
```

```
event DepositSnapshotUpdated(
        address indexed _depositor,
        uint256 _P,
        uint256 _G
    )
```

```
event UserDepositChanged(address indexed _depositor, uint256 _newDeposit)
```

```
event CollateralGainWithdrawn(
        address indexed _depositor,
        uint256[] _collateral
    )
```

```
event CollateralOverwritten(IERC20 oldCollateral, IERC20 newCollateral)
```

```
event RewardClaimed(
        address indexed account,
        address indexed recipient,
        uint256 claimed
    )
```
