> 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/redemptionmanager.md).

# RedemptionManager

## **Write Methods**

```
function redeemCollateral(
        ITroveManager troveManager,
        uint256 _debtAmount,
        uint256 _firstRedemptionHint,
        uint256 _upperPartialRedemptionHint,
        uint256 _lowerPartialRedemptionHint,
        uint256 _partialRedemptionHintNICR,
        uint256 _maxIterations,
        uint256 _maxFeePercentage
    ) external
```

Main redemption function: exchanges debt tokens for collateral while applying fees and managing Trove state updates.

| **Input Parameter**           | **Type**        | **Description**                                          |
| ----------------------------- | --------------- | -------------------------------------------------------- |
| `troveManager`                | `ITroveManager` | The TroveManager handling the redemption.                |
| `_debtAmount`                 | `uint256`       | The amount of debt tokens to redeem.                     |
| `_firstRedemptionHint`        | `uint256`       | Hint for the first Trove to redeem from (optimizes gas). |
| `_upperPartialRedemptionHint` | `uint256`       | Upper hint for partial redemption (reinsertion).         |
| `_lowerPartialRedemptionHint` | `uint256`       | Lower hint for partial redemption (reinsertion).         |
| `_partialRedemptionHintNICR`  | `uint256`       | Expected Nominal ICR after partial redemption.           |
| `_maxIterations`              | `uint256`       | Max Troves to process (prevents OOG).                    |
| `_maxFeePercentage`           | `uint256`       | Maximum acceptable fee percentage (reverts if exceeded). |

## **View Methods**

```
function getRedemptionFeeWithDecay(
        ITroveManager troveManager,
        uint256 _collateralDrawn
    ) external view returns (uint256)
```

Returns the redemption fee for a given collateral amount, considering the decayed base rate.

| **Input Parameter** | **Type**        | **Description**                       |
| ------------------- | --------------- | ------------------------------------- |
| `troveManager`      | `ITroveManager` | The TroveManager contract.            |
| `_collateralDrawn`  | `uint256`       | The collateral amount being redeemed. |

**Returns:**

| **Return Value** | **Type**  | **Description**              |
| ---------------- | --------- | ---------------------------- |
| `fee`            | `uint256` | The computed redemption fee. |

```
function getRedemptionRateWithDecay(ITroveManager troveManager) public view returns (uint256)
```

Computes the current redemption rate with decayed base rate.

| **Input Parameter** | **Type**        | **Description**            |
| ------------------- | --------------- | -------------------------- |
| `troveManager`      | `ITroveManager` | The TroveManager contract. |

**Returns:**

| **Return Value** | **Type**  | **Description**                     |
| ---------------- | --------- | ----------------------------------- |
| `rate`           | `uint256` | The decay-adjusted redemption rate. |

```
function getRedemptionRate(ITroveManager troveManager) public view returns (uint256) 
```

Computes the current redemption rate using the latest base rate (without decay).

| **Input Parameter** | **Type**        | **Description**            |
| ------------------- | --------------- | -------------------------- |
| `troveManager`      | `ITroveManager` | The TroveManager contract. |

**Returns:**

| **Return Value** | **Type**  | **Description**              |
| ---------------- | --------- | ---------------------------- |
| `rate`           | `uint256` | The current redemption rate. |

## Structs

```
struct RedemptionTotals {
        uint256 remainingDebt;
        uint256 totalDebtToRedeem;
        uint256 totalCollateralDrawn;
        uint256 collateralFee;
        uint256 collateralToSendToRedeemer;
        uint256 decayedBaseRate;
        uint256 price;
        uint256 totalDebtSupplyAtStart;
    }
```

```
struct SingleRedemptionValues {
        uint256 debtLot;
        uint256 collateralLot;
        bool cancelledPartial;
    }
```

## Events

```
event Redemption(
        uint256 _attemptedDebtAmount,
        uint256 _actualDebtAmount,
        uint256 _collateralSent,
        uint256 _collateralFee
    )
```
