> For the complete documentation index, see [llms.txt](https://docs.tranchess.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tranchess.com/tech-support/protocol-overview/stableswap-router.md).

# StableSwap Router

## Getting StableSwap Info

#### `SwapRouter.getSwap(address baseToken, address quoteToken) → IStableSwap`

Getter for the swap instance for the given token pair.

```bash
>>> swapRouter.getSwap()
outQ: '1680635143255664'
feeQ: '1682317460716'
```

#### `SwapRouter.getAmountsOut(uint256 amount, address[] path) → uint256[], IStableSwap[], bool[]`

Calculate all subsequent maximum output amounts of the asset given reserves following the `path` of token addresses given an input asset `amount`.

#### `SwapRouter.getAmountsIn(uint256 amount, address[] path) → uint256[], IStableSwap[], bool[]`

Calculate all subsequent minimum input amounts of the asset given reserves following the `path` of token addresses given an output asset `amount`.

## Making Exchanges

#### `SwapRouter.addLiquidity(address baseAddress, address quoteAddress, uint256 baseIn, uint256 quoteIn, uint256 minLpOut, uint256 version, uint256 deadline)`

Deposit `baseIn` amount of `baseAddress` and `quoteIn` amount of `quoteAddress` to StableSwap pool of `baseAddress` and `quoteAddress`. It enforces the resulting LP token to be at least `minLpOut`, the `version` to be the current rebalance version, and the Unix timestamp `deadline` after which the transaction will revert.

#### `SwapRouter.swapExactTokensForTokens(uint256 amountIn, uint256 minAmountOut, address[] path, address recipient, address staking, uint256[] versions, uint256 deadline) → uint256[]`

Swap the exact `amountIn` of input tokens for as many output tokens as possible for `recipient`, along the route determined by `path`. The first element of `path` is the input token, the last is the output token, and any intermediate elements represent intermediate pairs to trade through. If `staking` is non-zero address, it further stakes the resulting output token to `staking` contract for `recipient`. It enforces the resulting output token to be at least `minAmountOut`, every `versions` to be the current rebalance version, and the Unix timestamp `deadline` after which the transaction will revert.

#### `SwapRouter.swapTokensForExactTokens(uint256 amountOut, uint256 maxAmountIn, address[] path, address recipient, address staking, uint256[] versions, uint256 deadline) → uint256[]`

Receive the exact `amountOut` of output tokens for as few input tokens as possible for `recipient`, along the route determined by `path`. The first element of `path` is the input token, the last is the output token, and any intermediate elements represent intermediate pairs to trade through. If `staking` is non-zero address, it further stakes the resulting output token to `staking` contract for `recipient`. It enforces the resulting input token to be at most `maxAmountIn`, every `versions` to be the current rebalance version, and the Unix timestamp `deadline` after which the transaction will revert.

#### `SwapRouter.swapExactTokensForTokensUnwrap(uint256 amountIn, uint256 minAmountOut, address[] path, address recipient, uint256[] versions, uint256 deadline) → uint256[]`

Swap the exact `amountIn` of input tokens for as many output tokens as possible andunwrap the output tokens for `recipient`, along the route determined by `path`. The first element of `path` is the input token, the last is the output token, and any intermediate elements represent intermediate pairs to trade through. It enforces the resulting output token to be at least `minAmountOut`, every `versions` to be the current rebalance version, and the Unix timestamp `deadline` after which the transaction will revert.

#### `SwapRouter.swapTokensForExactTokensUnwrap(uint256 amountOut, uint256 maxAmountIn, address[] path, address recipient, uint256[] versions, uint256 deadline) → uint256[]`

Receive the exact `amountOut` of output tokens for as few input tokens as possible and unwrap the output tokens for for `recipient`, along the route determined by `path`. The first element of `path` is the input token, the last is the output token, and any intermediate elements represent intermediate pairs to trade through. It enforces the resulting input token to be at most `maxAmountIn`, every `versions` to be the current rebalance version, and the Unix timestamp `deadline` after which the transaction will revert.


---

# 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.tranchess.com/tech-support/protocol-overview/stableswap-router.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.
