# Router

The Router contract routes deposit/redeem requests by assigning operation contracts.

{% hint style="warning" %}
Note that the Router contract only supports wrapped UST and wrapped aUST for deposits and redemptions. For operations that involve non-UST stablecoins, interactions should be made via the ConversionPool contracts.
{% endhint %}

## Functions

### `init`

Initiates a deposit/redeem operation.

```
function init(
    IOperation.Type _type, 
    address _operator, 
    uint256 _amount, 
    address _swapper, 
    address _swapDest, 
    bool _autoFinish
) external; 

interface IOperation {
    enum Type {NEUTRAL, DEPOSIT, REDEEM}
}
```

| Name          | Type            | Description                                                                      |
| ------------- | --------------- | -------------------------------------------------------------------------------- |
| `_type`       | IOperation.Type | Operation type. Can be either of deposit or redeem (withdraw)                    |
| `_operator`   | address         | Address of operation requester                                                   |
| `_amount`     | uint256         | Amount of wrapped UST/aUST used in operation                                     |
| `_swapper`    | address         | Swapper contract that defines logic for swapping tokens                          |
| `_swapDest`   | address         | Address of token to receive post-operation                                       |
| `_autoFinish` | bool            | Indicator to signal whether to have the corresponding finish operation automated |

### `finish`

Finishes a deposit/redeem operation.

```
function finish(address _operation) external; 
```

| Name         | Type    | Description                                  |
| ------------ | ------- | -------------------------------------------- |
| `_operation` | address | Address of Operation contract to call finish |

### `depositStable`

Deposits the specified amount of wrapped UST.

```
function depositStable(uint256 _amount) external; 
```

| Name      | Type    | Description                      |
| --------- | ------- | -------------------------------- |
| `_amount` | uint256 | Amount of wrapped UST to deposit |

### `depositStable`

Deposits the specified amount of wrapped UST. Returns resulting wrapped aUST to the specified address.

```
function depositStable(address _operator, uint256 _amount) external; 
```

| Name        | Type    | Description                               |
| ----------- | ------- | ----------------------------------------- |
| `_operator` | address | Address to receive resulting wrapped aUST |
| `_amount`   | uint256 | Amount of wrapped UST to deposit          |

### `depositStable`

Deposits the specified amount of wrapped UST. Swaps resulting wrapped aUST to the specified token (`_swapDest`) using logic defined in the specified swapper contract (`_swapper`), and returns tokens to the specified address (`_operator`).

```
function depositStable(
    address _operator,
    uint256 _amount,
    address _swapper,
    address _swapDest
) external;
```

| Name        | Type    | Description                                             |
| ----------- | ------- | ------------------------------------------------------- |
| `_operator` | address | Address to receive resulting tokens                     |
| `_amount`   | uint256 | Amount of wrapped UST to deposit                        |
| `_swapper`  | address | Swapper contract that defines logic for swapping tokens |
| `_swapDest` | address | Address of token to receive post-deposit                |

### `initDepositStable`

Initiates a deposit request for the specified amount of wrapped UST.

```
function initDepositStable(uint256 _amount) external; 
```

| Name      | Type    | Description                      |
| --------- | ------- | -------------------------------- |
| `_amount` | uint256 | Amount of wrapped UST to deposit |

### `initDepositStable`

Initiates a deposit request for the specified amount of wrapped UST. Swaps resulting wrapped aUST to the specified token.

```
function initDepositStable(
    uint256 _amount,
    address _swapper,
    address _swapDest
) external;
```

| Name        | Type    | Description                                             |
| ----------- | ------- | ------------------------------------------------------- |
| `_amount`   | uint256 | Amount to wrapped UST to deposit                        |
| `_swapper`  | address | Swapper contract that defines logic for swapping tokens |
| `_swapDest` | address | Address of token to receive post-deposit                |

### `finishDepositStable`

Finishes deposit operation for the specified Operation contract.&#x20;

```
function finishDepositStable(address _operation) external; 
```

| Name         | Type    | Description                                  |
| ------------ | ------- | -------------------------------------------- |
| `_operation` | address | Address of Operation contract to call finish |

### `redeemStable`

Redeems (withdraws) the specified amount of wrapped aUST.

```
function redeemStable(uint256 _amount) external; 
```

| Name      | Type    | Description                      |
| --------- | ------- | -------------------------------- |
| `_amount` | uint256 | Amount of wrapped aUST to redeem |

### `redeemStable`

Redeems the specified amount of wrapped aUST. Returns resulting wrapped UST to the specified address.

```
function redeemStable(address _operator, uint256 _amount) external; 
```

| Name        | Type    | Description                              |
| ----------- | ------- | ---------------------------------------- |
| `_operator` | address | Address to receive resulting wrapped UST |
| `_amount`   | uint256 | Amount of wrapped aUST to redeem         |

### `redeemStable`

Redeems the specified amount of wrapped aUST. Swaps resulting wrapped UST to the specified token (`_swapDest`) using logic defined in the specified swapper contract (`_swapper`), and returns tokens to the specified address (`_operator`).

```
function redeemStable(
    address _operator,
    uint256 _amount,
    address _swapper,
    address _swapDest
) external;
```

| Name        | Type    | Description                                             |
| ----------- | ------- | ------------------------------------------------------- |
| `_operator` | address | Address to receive resulting tokens                     |
| `_amount`   | uint256 | Amount of wrapped aUST to redeem                        |
| `_swapper`  | address | Swapper contract that defines logic for swapping tokens |
| `_swapDest` | address | Address of token to receive post-redemption             |

### `initRedeemStable`

Initiates a redemption for the specified amount of wrapped aUST.

```
function initRedeemStable(uint256 _amount) external; 
```

| Name      | Type    | Description                      |
| --------- | ------- | -------------------------------- |
| `_amount` | uint256 | Amount of wrapped aUST to redeem |

### `initRedeemStable`

Initiates a stablecoin redemption. Swaps resulting wrapped UST to the specified token (`_swapDest`) using logic defined in the specified swapper contract (`_swapper`), and returns tokens to the specified address (`_operator`).

```
function initRedeemStable(
    uint256 _amount,
    address _swapper,
    address _swapDest
) external;
```

| Name        | Type    | Description                                             |
| ----------- | ------- | ------------------------------------------------------- |
| `_amount`   | uint256 | Amount of aUST tokens to redeem                         |
| `_swapper`  | address | Swapper contract that defines logic for swapping tokens |
| `_swapDest` | address | Address of token to receive post-redemption             |

### `finishRedeemStable`

Finishes a redeem operation for the specified Operation contract.

```
function finishRedeemStable(address _operation) external; 
```

| Name         | Type    | Description                                  |
| ------------ | ------- | -------------------------------------------- |
| `_operation` | address | Address of Operation contract to call finish |


---

# Agent Instructions: 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:

```
GET https://docs.anchorprotocol.com/anchor-2/ethanchor/ethanchor-contracts/router.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
