# Pool

contracts/wombat-core/pool/Pool.sol

> Title: Pool

> Notice: Manages deposits, withdrawals and swaps. Holds a mapping of assets and parameters.

> Details: The main entry-point of Wombat protocol Note: All variables are 18 decimals, except from that of underlying tokens

### *event* AssetAdded

\*\*\*Pool.AssetAdded(token, asset) \*\*\*

> Notice: An event thats emitted when an asset is added to Pool

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| token    | address  | indexed         |
| asset    | address  | indexed         |

### *event* AssetRemoved

\*\*\*Pool.AssetRemoved(token, asset) \*\*\*

> Notice: An event thats emitted when asset is removed from Pool

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| token    | address  | indexed         |
| asset    | address  | indexed         |

### *event* Deposit

\*\*\*Pool.Deposit(sender, token, amount, liquidity, to) \*\*\*

> Notice: An event thats emitted when a deposit is made to Pool

Arguments

| **name**  | **type** | **description** |
| --------- | -------- | --------------- |
| sender    | address  | indexed         |
| token     | address  | not indexed     |
| amount    | uint256  | not indexed     |
| liquidity | uint256  | not indexed     |
| to        | address  | indexed         |

### *event* FillPool

\*\*\*Pool.FillPool(token, amount) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| token    | address  | not indexed     |
| amount   | uint256  | not indexed     |

### *event* OwnershipTransferred

\*\*\*Pool.OwnershipTransferred(previousOwner, newOwner) \*\*\*

Arguments

| **name**      | **type** | **description** |
| ------------- | -------- | --------------- |
| previousOwner | address  | indexed         |
| newOwner      | address  | indexed         |

### *event* Paused

\*\*\*Pool.Paused(account) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| account  | address  | not indexed     |

### *event* PausedAsset

\*\*\*Pool.PausedAsset(asset, account) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| asset    | address  | not indexed     |
| account  | address  | not indexed     |

### *event* SetAmpFactor

\*\*\*Pool.SetAmpFactor(value) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| value    | uint256  | not indexed     |

### *event* SetDev

\*\*\*Pool.SetDev(addr) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| addr     | address  | not indexed     |

### *event* SetFee

\*\*\*Pool.SetFee(lpDividendRatio, retentionRatio) \*\*\*

Arguments

| **name**        | **type** | **description** |
| --------------- | -------- | --------------- |
| lpDividendRatio | uint256  | not indexed     |
| retentionRatio  | uint256  | not indexed     |

### *event* SetFeeTo

\*\*\*Pool.SetFeeTo(addr) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| addr     | address  | not indexed     |

### *event* SetHaircutRate

\*\*\*Pool.SetHaircutRate(value) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| value    | uint256  | not indexed     |

### *event* SetMasterWombat

\*\*\*Pool.SetMasterWombat(addr) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| addr     | address  | not indexed     |

### *event* SetMintFeeThreshold

\*\*\*Pool.SetMintFeeThreshold(value) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| value    | uint256  | not indexed     |

### *event* Swap

\*\*\*Pool.Swap(sender, fromToken, toToken, fromAmount, toAmount, to) \*\*\*

> Notice: An event thats emitted when a swap is made in Pool

Arguments

| **name**   | **type** | **description** |
| ---------- | -------- | --------------- |
| sender     | address  | indexed         |
| fromToken  | address  | not indexed     |
| toToken    | address  | not indexed     |
| fromAmount | uint256  | not indexed     |
| toAmount   | uint256  | not indexed     |
| to         | address  | indexed         |

### *event* TransferTipBucket

\*\*\*Pool.TransferTipBucket(token, amount, to) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| token    | address  | not indexed     |
| amount   | uint256  | not indexed     |
| to       | address  | not indexed     |

### *event* Unpaused

\*\*\*Pool.Unpaused(account) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| account  | address  | not indexed     |

### *event* UnpausedAsset

\*\*\*Pool.UnpausedAsset(asset, account) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| asset    | address  | not indexed     |
| account  | address  | not indexed     |

### *event* Withdraw

\*\*\*Pool.Withdraw(sender, token, amount, liquidity, to) \*\*\*

> Notice: An event thats emitted when a withdrawal is made from Pool

Arguments

| **name**  | **type** | **description** |
| --------- | -------- | --------------- |
| sender    | address  | indexed         |
| token     | address  | not indexed     |
| amount    | uint256  | not indexed     |
| liquidity | uint256  | not indexed     |
| to        | address  | indexed         |

### *function* addAsset

\*\*\*Pool.addAsset(token, asset) \*\*\*

> Notice: Adds asset to pool, reverts if asset already exists in pool

Arguments

| **name** | **type** | **description**                          |
| -------- | -------- | ---------------------------------------- |
| token    | address  | The address of token                     |
| asset    | address  | The address of the Wombat Asset contract |

### *function* addressOfAsset

***Pool.addressOfAsset(token) view***

> Notice: Gets Asset corresponding to ERC20 token. Reverts if asset does not exists in Pool.

> Details: to be used externally

Arguments

| **name** | **type** | **description**            |
| -------- | -------- | -------------------------- |
| token    | address  | The address of ERC20 token |

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | address  |                 |

### *function* ampFactor

***Pool.ampFactor() view***

> Notice: Amplification factor

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint256  |                 |

### *function* deposit

\*\*\*Pool.deposit(token, amount, minimumLiquidity, to, deadline, shouldStake) \*\*\*

> Notice: Deposits amount of tokens into pool ensuring deadline

> Details: Asset needs to be created and added to pool before any operation. This function assumes tax free token.

Arguments

| **name**         | **type** | **description**                                                    |
| ---------------- | -------- | ------------------------------------------------------------------ |
| token            | address  | The token address to be deposited                                  |
| amount           | uint256  | The amount to be deposited                                         |
| minimumLiquidity | uint256  |                                                                    |
| to               | address  | The user accountable for deposit, receiving the Wombat assets (lp) |
| deadline         | uint256  | The deadline to be respected                                       |
| shouldStake      | bool     |                                                                    |

Outputs

| **name**  | **type** | **description**              |
| --------- | -------- | ---------------------------- |
| liquidity | uint256  | Total asset liquidity minted |

### *function* dev

***Pool.dev() view***

> Notice: Dev address

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | address  |                 |

### *function* exchangeRate

***Pool.exchangeRate(token) view***

> Notice: Returns the exchange rate of the LP token

Arguments

| **name** | **type** | **description**          |
| -------- | -------- | ------------------------ |
| token    | address  | The address of the token |

Outputs

| **name** | **type** | **description**               |
| -------- | -------- | ----------------------------- |
| xr       | uint256  | The exchange rate of LP token |

### *function* feeTo

***Pool.feeTo() view***

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | address  |                 |

### *function* fillPool

\*\*\*Pool.fillPool(token, amount) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| token    | address  |                 |
| amount   | uint256  |                 |

### *function* getTokens

***Pool.getTokens() view***

> Notice: Return list of tokens in the pool

Outputs

| **name** | **type**   | **description** |
| -------- | ---------- | --------------- |
|          | address\[] |                 |

### *function* globalEquilCovRatio

***Pool.globalEquilCovRatio() view***

Outputs

| **name**        | **type** | **description** |
| --------------- | -------- | --------------- |
| equilCovRatio   | uint256  |                 |
| invariantInUint | uint256  |                 |

### *function* haircutRate

***Pool.haircutRate() view***

> Notice: Haircut rate

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint256  |                 |

### *function* initialize

\*\*\*Pool.initialize(ampFactor\_, haircutRate\_) \*\*\*

> Notice: Initializes pool. Dev is set to be the account calling this function.

Arguments

| **name**      | **type** | **description** |
| ------------- | -------- | --------------- |
| ampFactor\_   | uint256  |                 |
| haircutRate\_ | uint256  |                 |

### *function* lpDividendRatio

***Pool.lpDividendRatio() view***

> Notice: LP dividend ratio : the ratio of haircut that should distribute to LP

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint256  |                 |

### *function* masterWombat

***Pool.masterWombat() view***

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | address  |                 |

### *function* mintFee

\*\*\*Pool.mintFee(token) \*\*\*

> Notice: Send fee collected to the fee beneficiary

Arguments

| **name** | **type** | **description**                         |
| -------- | -------- | --------------------------------------- |
| token    | address  | The address of the token to collect fee |

### *function* mintFeeThreshold

***Pool.mintFeeThreshold() view***

> Notice: The threshold to mint fee (unit: WAD)

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint256  |                 |

### *function* owner

***Pool.owner() view***

> Details: Returns the address of the current owner.

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | address  |                 |

### *function* pause

\*\*\*Pool.pause() \*\*\*

> Details: pause pool, restricting certain operations

### *function* pauseAsset

\*\*\*Pool.pauseAsset(token) \*\*\*

> Details: pause asset, restricting deposit and swap operations

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| token    | address  |                 |

### *function* paused

***Pool.paused() view***

> Details: Returns true if the contract is paused, and false otherwise.

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | bool     |                 |

### *function* quoteAmountIn

***Pool.quoteAmountIn(fromToken, toToken, toAmount) view***

> Notice: Returns the minimum input asset amount required to buy the given output asset amount (accounting for fees and slippage)

> Details: To be used by frontend

Arguments

| **name**  | **type** | **description**          |
| --------- | -------- | ------------------------ |
| fromToken | address  | The initial ERC20 token  |
| toToken   | address  | The token wanted by user |
| toAmount  | int256   | The given output amount  |

Outputs

| **name** | **type** | **description**                   |
| -------- | -------- | --------------------------------- |
| amountIn | uint256  | The input amount required         |
| haircut  | uint256  | The haircut that would be applied |

### *function* quotePotentialDeposit

***Pool.quotePotentialDeposit(token, amount) view***

> Notice: Quotes potential deposit from pool

> Details: To be used by frontend

Arguments

| **name** | **type** | **description**              |
| -------- | -------- | ---------------------------- |
| token    | address  | The token to deposit by user |
| amount   | uint256  | The amount to deposit        |

Outputs

| **name**  | **type** | **description**                            |
| --------- | -------- | ------------------------------------------ |
| liquidity | uint256  | The potential liquidity user would receive |
| reward    | uint256  | reward                                     |

### *function* quotePotentialSwap

***Pool.quotePotentialSwap(fromToken, toToken, fromAmount) view***

> Notice: Given an input asset amount and token addresses, calculates the maximum output token amount (accounting for fees and slippage).

> Details: In reverse quote, the haircut is in the `fromAsset`

Arguments

| **name**   | **type** | **description**          |
| ---------- | -------- | ------------------------ |
| fromToken  | address  | The initial ERC20 token  |
| toToken    | address  | The token wanted by user |
| fromAmount | int256   | The given input amount   |

Outputs

| **name**         | **type** | **description**                         |
| ---------------- | -------- | --------------------------------------- |
| potentialOutcome | uint256  | The potential amount user would receive |
| haircut          | uint256  | The haircut that would be applied       |

### *function* quotePotentialWithdraw

***Pool.quotePotentialWithdraw(token, liquidity) view***

> Notice: Quotes potential withdrawal from pool

> Details: To be used by frontend

Arguments

| **name**  | **type** | **description**                                     |
| --------- | -------- | --------------------------------------------------- |
| token     | address  | The token to be withdrawn by user                   |
| liquidity | uint256  | The liquidity (amount of lp assets) to be withdrawn |

Outputs

| **name** | **type** | **description**                         |
| -------- | -------- | --------------------------------------- |
| amount   | uint256  | The potential amount user would receive |
| fee      | uint256  | The fee that would be applied           |

### *function* quotePotentialWithdrawFromOtherAsset

***Pool.quotePotentialWithdrawFromOtherAsset(fromToken, toToken, liquidity) view***

> Notice: Quotes potential withdrawal from other asset from the pool

> Details: To be used by frontend

Arguments

| **name**  | **type** | **description**                                              |
| --------- | -------- | ------------------------------------------------------------ |
| fromToken | address  | The corresponding token user holds the LP (Asset) from       |
| toToken   | address  | The token wanting to be withdrawn (needs to be well covered) |
| liquidity | uint256  | The liquidity (amount of the lp assets) to be withdrawn      |

Outputs

| **name**       | **type** | **description**                               |
| -------------- | -------- | --------------------------------------------- |
| amount         | uint256  | The potential amount user would receive       |
| withdrewAmount | uint256  | The amount of the from-token that is withdrew |

### *function* removeAsset

\*\*\*Pool.removeAsset(token) \*\*\*

> Notice: Removes asset from asset struct

> Details: Can only be called by owner

Arguments

| **name** | **type** | **description**                |
| -------- | -------- | ------------------------------ |
| token    | address  | The address of token to remove |

### *function* renounceOwnership

\*\*\*Pool.renounceOwnership() \*\*\*

> Details: Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.

### *function* retentionRatio

***Pool.retentionRatio() view***

> Notice: Retention ratio: the ratio of haircut that should stay in the pool

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint256  |                 |

### *function* setAmpFactor

\*\*\*Pool.setAmpFactor(ampFactor\_) \*\*\*

> Notice: Changes the pools amplification factor. Can only be set by the contract owner.

Arguments

| **name**    | **type** | **description**                 |
| ----------- | -------- | ------------------------------- |
| ampFactor\_ | uint256  | new pool's amplification factor |

### *function* setDev

\*\*\*Pool.setDev(dev\_) \*\*\*

> Notice: Changes the contract dev. Can only be set by the contract owner.

Arguments

| **name** | **type** | **description**          |
| -------- | -------- | ------------------------ |
| dev\_    | address  | new contract dev address |

### *function* setFee

\*\*\*Pool.setFee(lpDividendRatio\_, retentionRatio\_) \*\*\*

Arguments

| **name**          | **type** | **description** |
| ----------------- | -------- | --------------- |
| lpDividendRatio\_ | uint256  |                 |
| retentionRatio\_  | uint256  |                 |

### *function* setFeeTo

\*\*\*Pool.setFeeTo(feeTo\_) \*\*\*

> Notice: Changes the fee beneficiary. Can only be set by the contract owner. This value cannot be set to 0 to avoid unsettled fee.

Arguments

| **name** | **type** | **description**     |
| -------- | -------- | ------------------- |
| feeTo\_  | address  | new fee beneficiary |

### *function* setHaircutRate

\*\*\*Pool.setHaircutRate(haircutRate\_) \*\*\*

> Notice: Changes the pools haircutRate. Can only be set by the contract owner.

Arguments

| **name**      | **type** | **description**          |
| ------------- | -------- | ------------------------ |
| haircutRate\_ | uint256  | new pool's haircutRate\_ |

### *function* setMasterWombat

\*\*\*Pool.setMasterWombat(masterWombat\_) \*\*\*

Arguments

| **name**       | **type** | **description** |
| -------------- | -------- | --------------- |
| masterWombat\_ | address  |                 |

### *function* setMintFeeThreshold

\*\*\*Pool.setMintFeeThreshold(mintFeeThreshold\_) \*\*\*

> Notice: Set min fee to mint

Arguments

| **name**           | **type** | **description** |
| ------------------ | -------- | --------------- |
| mintFeeThreshold\_ | uint256  |                 |

### *function* swap

\*\*\*Pool.swap(fromToken, toToken, fromAmount, minimumToAmount, to, deadline) \*\*\*

> Notice: Swap fromToken for toToken, ensures deadline and minimumToAmount and sends quoted amount to `to` address

> Details: This function assumes tax free token.

Arguments

| **name**        | **type** | **description**                                            |
| --------------- | -------- | ---------------------------------------------------------- |
| fromToken       | address  | The token being inserted into Pool by user for swap        |
| toToken         | address  | The token wanted by user, leaving the Pool                 |
| fromAmount      | uint256  | The amount of from token inserted                          |
| minimumToAmount | uint256  | The minimum amount that will be accepted by user as result |
| to              | address  | The user receiving the result of swap                      |
| deadline        | uint256  | The deadline to be respected                               |

Outputs

| **name**       | **type** | **description** |
| -------------- | -------- | --------------- |
| actualToAmount | uint256  |                 |
| haircut        | uint256  |                 |

### *function* tipBucketBalance

***Pool.tipBucketBalance(token) view***

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| token    | address  |                 |

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| balance  | uint256  |                 |

### *function* transferOwnership

\*\*\*Pool.transferOwnership(newOwner) \*\*\*

> Details: Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| newOwner | address  |                 |

### *function* transferTipBucket

\*\*\*Pool.transferTipBucket(token, amount, to) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| token    | address  |                 |
| amount   | uint256  |                 |
| to       | address  |                 |

### *function* unpause

\*\*\*Pool.unpause() \*\*\*

> Details: unpause pool, enabling certain operations

### *function* unpauseAsset

\*\*\*Pool.unpauseAsset(token) \*\*\*

> Details: unpause asset, enabling deposit and swap operations

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| token    | address  |                 |

### *function* withdraw

\*\*\*Pool.withdraw(token, liquidity, minimumAmount, to, deadline) \*\*\*

> Notice: Withdraws liquidity amount of asset to `to` address ensuring minimum amount required

Arguments

| **name**      | **type** | **description**                                  |
| ------------- | -------- | ------------------------------------------------ |
| token         | address  | The token to be withdrawn                        |
| liquidity     | uint256  | The liquidity to be withdrawn                    |
| minimumAmount | uint256  | The minimum amount that will be accepted by user |
| to            | address  | The user receiving the withdrawal                |
| deadline      | uint256  | The deadline to be respected                     |

Outputs

| **name** | **type** | **description**            |
| -------- | -------- | -------------------------- |
| amount   | uint256  | The total amount withdrawn |

### *function* withdrawFromOtherAsset

\*\*\*Pool.withdrawFromOtherAsset(fromToken, toToken, liquidity, minimumAmount, to, deadline) \*\*\*

> Notice: Enables withdrawing liquidity from an asset using LP from a different asset

Arguments

| **name**      | **type** | **description**                                              |
| ------------- | -------- | ------------------------------------------------------------ |
| fromToken     | address  | The corresponding token user holds the LP (Asset) from       |
| toToken       | address  | The token wanting to be withdrawn (needs to be well covered) |
| liquidity     | uint256  | The liquidity to be withdrawn (in fromToken decimal)         |
| minimumAmount | uint256  | The minimum amount that will be accepted by user             |
| to            | address  | The user receiving the withdrawal                            |
| deadline      | uint256  | The deadline to be respected                                 |

Outputs

| **name** | **type** | **description**            |
| -------- | -------- | -------------------------- |
| toAmount | uint256  | The total amount withdrawn |


---

# 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.wombat.exchange/developers/integration-guideline/pool.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.
