# ISwap

## Functions:

* [`getA()`](#ISwap-getA--)
* [`getAllowlist()`](#ISwap-getAllowlist--)
* [`getToken(uint8 index)`](#ISwap-getToken-uint8-)
* [`getTokenIndex(address tokenAddress)`](#ISwap-getTokenIndex-address-)
* [`getTokenBalance(uint8 index)`](#ISwap-getTokenBalance-uint8-)
* [`getVirtualPrice()`](#ISwap-getVirtualPrice--)
* [`isGuarded()`](#ISwap-isGuarded--)
* [`calculateSwap(uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx)`](#ISwap-calculateSwap-uint8-uint8-uint256-)
* [`calculateTokenAmount(uint256[] amounts, bool deposit)`](#ISwap-calculateTokenAmount-uint256---bool-)
* [`calculateRemoveLiquidity(uint256 amount)`](#ISwap-calculateRemoveLiquidity-uint256-)
* [`calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)`](#ISwap-calculateRemoveLiquidityOneToken-uint256-uint8-)
* [`initialize(contract IERC20[] pooledTokens, uint8[] decimals, string lpTokenName, string lpTokenSymbol, uint256 a, uint256 fee, uint256 adminFee, address lpTokenTargetAddress)`](#ISwap-initialize-contract-IERC20---uint8---string-string-uint256-uint256-uint256-address-)
* [`swap(uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx, uint256 minDy, uint256 deadline)`](#ISwap-swap-uint8-uint8-uint256-uint256-uint256-)
* [`addLiquidity(uint256[] amounts, uint256 minToMint, uint256 deadline)`](#ISwap-addLiquidity-uint256---uint256-uint256-)
* [`removeLiquidity(uint256 amount, uint256[] minAmounts, uint256 deadline)`](#ISwap-removeLiquidity-uint256-uint256---uint256-)
* [`removeLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex, uint256 minAmount, uint256 deadline)`](#ISwap-removeLiquidityOneToken-uint256-uint8-uint256-uint256-)
* [`removeLiquidityImbalance(uint256[] amounts, uint256 maxBurnAmount, uint256 deadline)`](#ISwap-removeLiquidityImbalance-uint256---uint256-uint256-)

## Function `getA() → uint256` <a href="#iswap-geta" id="iswap-geta"></a>

No description

## Function `getAllowlist() → contract IAllowlist` <a href="#iswap-getallowlist" id="iswap-getallowlist"></a>

No description

## Function `getToken(uint8 index) → contract IERC20` <a href="#iswap-gettoken-uint8" id="iswap-gettoken-uint8"></a>

No description

## Function `getTokenIndex(address tokenAddress) → uint8` <a href="#iswap-gettokenindex-address" id="iswap-gettokenindex-address"></a>

No description

## Function `getTokenBalance(uint8 index) → uint256` <a href="#iswap-gettokenbalance-uint8" id="iswap-gettokenbalance-uint8"></a>

No description

## Function `getVirtualPrice() → uint256` <a href="#iswap-getvirtualprice" id="iswap-getvirtualprice"></a>

No description

## Function `isGuarded() → bool` <a href="#iswap-isguarded" id="iswap-isguarded"></a>

No description

## Function `calculateSwap(uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx) → uint256` <a href="#iswap-calculateswap-uint8-uint8-uint256" id="iswap-calculateswap-uint8-uint8-uint256"></a>

No description

## Function `calculateTokenAmount(uint256[] amounts, bool deposit) → uint256` <a href="#iswap-calculatetokenamount-uint256-bool" id="iswap-calculatetokenamount-uint256-bool"></a>

No description

## Function `calculateRemoveLiquidity(uint256 amount) → uint256[]` <a href="#iswap-calculateremoveliquidity-uint256" id="iswap-calculateremoveliquidity-uint256"></a>

No description

## Function `calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex) → uint256 availableTokenAmount` <a href="#iswap-calculateremoveliquidityonetoken-uint256-uint8" id="iswap-calculateremoveliquidityonetoken-uint256-uint8"></a>

No description

## Function `initialize(contract IERC20[] pooledTokens, uint8[] decimals, string lpTokenName, string lpTokenSymbol, uint256 a, uint256 fee, uint256 adminFee, address lpTokenTargetAddress)` <a href="#iswap-initialize-contract-ierc20-uint8-string-string-uint256-uint256-uint256-address" id="iswap-initialize-contract-ierc20-uint8-string-string-uint256-uint256-uint256-address"></a>

No description

## Function `swap(uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx, uint256 minDy, uint256 deadline) → uint256` <a href="#iswap-swap-uint8-uint8-uint256-uint256-uint256" id="iswap-swap-uint8-uint8-uint256-uint256-uint256"></a>

No description

## Function `addLiquidity(uint256[] amounts, uint256 minToMint, uint256 deadline) → uint256` <a href="#iswap-addliquidity-uint256-uint256-uint256" id="iswap-addliquidity-uint256-uint256-uint256"></a>

No description

## Function `removeLiquidity(uint256 amount, uint256[] minAmounts, uint256 deadline) → uint256[]` <a href="#iswap-removeliquidity-uint256-uint256-uint256" id="iswap-removeliquidity-uint256-uint256-uint256"></a>

No description

## Function `removeLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex, uint256 minAmount, uint256 deadline) → uint256` <a href="#iswap-removeliquidityonetoken-uint256-uint8-uint256-uint256" id="iswap-removeliquidityonetoken-uint256-uint8-uint256-uint256"></a>

No description

## Function `removeLiquidityImbalance(uint256[] amounts, uint256 maxBurnAmount, uint256 deadline) → uint256` <a href="#iswap-removeliquidityimbalance-uint256-uint256-uint256" id="iswap-removeliquidityimbalance-uint256-uint256-uint256"></a>

No description
