# ISwapV1

## Functions:

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

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

No description

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

No description

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

No description

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

No description

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

No description

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

No description

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

No description

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

No description

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

No description

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

No description

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

No description

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

No description

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

No description

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

No description

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

No description

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

No description

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

No description

## Function `updateUserWithdrawFee(address recipient, uint256 transferAmount)` <a href="#iswapv1-updateuserwithdrawfee-address-uint256" id="iswapv1-updateuserwithdrawfee-address-uint256"></a>

No description
