# Overview

Wombat brings an innovative, scalable algorithm and design, low-slippage, multichain and crosschain single-sided DEX, backed by Binance Labs, Animoca, Shima, and Jump Crypto.

<figure><img src="/files/7zhSsNNc2V6zsRzXs1jj" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/wf1EEQEDMxlNugMttRrl" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
​​Utilizing a *stableswap 2.0* model, Wombat users can:

Swap stablecoins at **hyper-efficient** exchange rates with **minimal slippage** and earn a **sustainable and optimal yield** on their assets via **single-staking** pools.

We maximize capital utilization to fuel DeFi growth and adoption.
{% endhint %}

## **What makes Wombat unique?** <a href="#what-makes-wombat-special" id="what-makes-wombat-special"></a>

There are four significant benefits that Wombat brings:

1. **Scalable Equilibrium:** Innovate a coverage-ratio-based stableswap mechanism to remove scalability barriers, which would allow the possibility of achieving 100% capital utilization with no impermanent loss.
2. **Slippage minimization**: Wombat adopts the asset-to-liability model; slippage is negated until higher transaction amounts are reduced when it occurs.
3. **User-Friendly UI/UX**: Simple and accessible interface with pure single token pool design.
4. **Foundation for DeFi to build upon**: A pure single-token pool design enables single-token LP tokens, which are ideal for borrowing and lending protocols and trading platforms to build on top of.

### Enjoy low slippage and single-sided stakin&#x67;**!** <a href="#enjoy-low-slippage-and-single-sided-staking" id="enjoy-low-slippage-and-single-sided-staking"></a>

{% embed url="<https://youtu.be/OOrgqgnx0Tk>" %}


# The Team

## Core **T**eam

**Founder: Alex Lee**<img src="/files/WIhETUnTPmNP6BmQixuJ" alt="" data-size="line">

* **Twitter:** <https://twitter.com/definidude>

**CTO: Kevin**

**CMO: kWOM**

* Twitter: <https://twitter.com/TLDRdyslexic>


# Investors

## Investors

Our backers include **Binance Labs, Shima Capital, Animoca Brands, Jump Crypto,** and more; read below medium for more details on our private funding:

* [Binance Labs invests in Wombat Exchange](https://medium.com/wombat-exchange/binance-labs-invests-in-wombat-exchange-d8095b9fe9e8)
* [Wombat Exchange Raises $5.25M in Series A Funding Led by Animoca Brands](https://medium.com/wombat-exchange/wombat-exchange-raises-5-25m-in-series-a-funding-led-by-animoca-brands-and-hailstone-ventures-55039aef445d)
* [Wombat Exchange Raises New Funds in a Strategic Round Investment led by Shima Capital](https://medium.com/wombat-exchange/wombat-exchange-raises-new-funds-in-a-strategic-round-investment-led-by-shima-capital-2bfd34f15d6e)

<figure><img src="/files/NhF6WfqgqrN9IXA1O91A" alt=""><figcaption></figcaption></figure>

## What Our Investors Have To Say

> *Wombat Exchange has put together a solid and experienced team to develop a stableswap that has the potential to significantly advance the growth of DeFi. We’re looking forward to seeing Wombat’s meaningful contribution to the BNB Chain and its adoption in the multichain world.*\
> **Yat Siu, Co-Founder & Executive Chairman of Animoca Brands** <img src="/files/2vGk2pfr1dHcQBhXK9Yg" alt="" data-size="line">

> We were impressed by Wombat’s innovation, and we strongly believe in their contribution to the ecosystem. Their algorithm and solution are pioneering and will support the protocols that will shape the future of DeFi for the better.\
> **Seng Huang Lee, Group Executive Chairman of Sun Hung Kai & Co** <img src="/files/7mckrVWiLPEdpRCJY54M" alt="" data-size="line">

> Stablecoins are the fundamental backbone of DeFi yet they bring a set of challenges, like building efficient stableswaps, that first-generation protocols still have trouble overcoming. With a world-class team, Wombat Exchange has pioneered an incredibly ingenious and mathematically sound product to solve many of those challenges, and is well positioned to build additional DeFi primitives that push the boundary of crypto innovation as we know it today. We are inspired by what Wombat can achieve and are excited to be on this journey with them.\
> **Yida Gao, General Partner at Shima Capital** <img src="/files/8VYJiAkqV8FNu1jjCDpW" alt="" data-size="line">

> Wombat is a next generation stable swap exchange that introduces elegant design principles such as invariant curve and asset liability management for computational efficiency and improving liquidity. Furthermore, leveraging Wormhole’s generic message passing protocol, Wombat offers seamless native swaps across multiple chains.\
> **Saurabh Sharma, Partner & Head of Ventures at Jump Crypto** <img src="/files/2hF3qZiuKW2BPXe6mBd2" alt="" data-size="line"><br>


# Roadmap

<details>

<summary>2021</summary>

**`Q4 2021`**

* [x] Complete seed round
* [x] Team community formation
* [x] Binance Incubation Season 3
* [x] Core contracts completed
* [x] Finalization of tokenomics

</details>

<details>

<summary>2022</summary>

**`Q1 2022`**

* [x] Complete private round
* [x] Binance Incubation Demo Day
* [x] Binance MVBIV
* [x] Testnet Launch
* [x] Security Audits
* [x] Wombat Whitepaper

**`Q2 2022`**

* [x] Mainnet Launch on BNB Chain&#x20;
* [x] Bug Bounty Launch
* [x] Listing of native stablecoins
* [x] Ecosystem partnerships

**`Q3 2022`**

* [x] PancakeSwap IFO
* [x] Full Launch on BNB Chain
* [x] Release of side pool whitepaper
* [x] Launch of side pool and dynamic pool
* [x] Preparation for Wombat Labs Innovation Fund

**`Q4 2022`**

* [x] Launch of Innovation pool
* [x] Partnerships With Various Protocols

</details>

### **Q1 2023**

* [x] Launch of gauge voting
* [x] Add back liquid staking pools
* [x] Multichain adoption: Arbitrum
* [x] Launching of Smart HAY with Helio

### Q2 2023

* [x] Multichain/Crosschain adoption: Ethereum
* [x] Launching with Stader with an $ETHx Pool on Ethereum
* [x] Launching with Frax with an $FRAX and $sfrxETH Pool on Ethereum
* [x] More security audits
* [x] Crosschain pool
* [x] 1-Inch Aggregation Integration
* [x] OpenOcean Aggregation Integration

### Q3 2023

* [x] Governance launch
* [x] More security audits
* [x] Recipient of OP Grant
* [x] Scroll Launch
* [x] Avalanche Launch
* [x] Launching zUSD and zBNB Pool on BNB Chain
* [x] Launching with Benqi Finance with $sAVAX
* [x] KyberSwap Aggregation Integration
* [x] Launching USDV with LayerZero and MatrixPort on BNB Chain, Ethereum, Avalanche, Arbitrium, Optimism

### Q4 2023

* [x] Optimism Launch
* [x] Launching USDS Pool on Base
* [x] Base Launch
* [x] Sunsetting of $BUSD

### Q1 2024

* [ ] Volatile Pool litepaper release
* [ ] Volatile Pool security audit
* [ ] Tokenomics re-design suggestion presented to the community
* [ ] Sunsetting main-pools

### Q2 2024

* [ ] Volatile Pool Launch
* [ ] Wombat 2.0
* [ ] More chains! (Monad?, Artella?, Stellar?, Solana? etc...)

{% hint style="info" %}
**The roadmap is updated regularly and subject to change.**

Our team will keep track of the market updates and would love your suggestions and ideas! Make sure to join our community to be heard 👂
{% endhint %}


# Connect Your Wallet

To get started on Wombat Exchange, you must set up a wallet that supports the following chains:

* `BNB Chain`
* `Arbitrum`
* `Ethereum`
* `Scroll`
* `Avalanche`
* `Base`
* `Optimism`&#x20;

You can follow the guide carefully and safely to back up your recovery phrases. The navigation bar is on the top right corner of the page, where the “Connect Wallet” button is located. Once you click it, choose which wallet you want. Check the guide below to connect ***MetaMask*** or ***WalletConnect*** with our app.

{% hint style="info" %}
Wombat currently supports:

* MetaMask
* WalletConnect
* Trust Wallet
* Coin98 Wallet
* SafePal
* Coinbase Wallet
* Binance Wallet
* OKX Wallet

We are using MetaMask and WalletConnect as examples due to their wide adoption in the crypto space. If you encounter difficulties connecting with other wallets, contact our Twitter, Telegram, or Discord team for assistance.
{% endhint %}

{% tabs %}
{% tab title="Metamask 🦊" %}

1. Click the \[Connect Wallet] button on the top right corner of Wombat DApp. You’ll now see a pop-up presenting different options for connecting your wallet. Click *Metamask* to move forward.
2. Approve the connection on your *Metamask* wallet pop-up, and you're good to go!
   {% endtab %}

{% tab title="WalletConnect 🔷" %}

1. Click the \[Connect Wallet] button on the top right corner of Wombat DApp. You’ll now see a pop-up presenting different options for connecting your wallet. Click *WalletConnect* to display a QR code.
2. Use this QR code to scan with your *WalletConnect-*&#x65;nabled mobile wallet. In our example, we’ll connect using *Trust Wallet*.
3. In *Trust Wallet*, head to \[Settings] and then \[WalletConnect]. This selection will bring up your camera to scan the QR code.
4. After scanning the QR code, your wallet will display a pop-up. Connecting your wallet to the DApp is as simple as tapping \[Connect]. You’ll now be connected and can disconnect if necessary by tapping \[Cancel] on the top left corner.
   {% endtab %}
   {% endtabs %}

{% hint style="danger" %}
Never share your private key or seed phrases with anyone under any circumstances.&#x20;
{% endhint %}

## Network selection

Wombat Exchange now supports `BNB Chain／Arbitrum`. To connect to the preferred chain, follow the below instructions:&#x20;

### **Option 1: Connect with the aid of** [**ChainList**](https://chainlist.org/)

ChainList is a collection of EVM network configurations where you can use the information to connect your wallets to the desired chain in a few steps.&#x20;

<figure><img src="/files/q0O7tTsomhgrgfjUPG3b" alt=""><figcaption></figcaption></figure>

Please search for the chains we support listed above and click \[Add to Metamask]. You should be able to connect to the desired Chain and start using Wombat now!

### **Option 2: Manually add the network to your wallet**

{% tabs %}
{% tab title="BNB" %}
Network Name: BNB Chain

RPC: [https://bsc-dataseed.binance.org/](< 	https://bsc-dataseed.binance.org/>)

Chain ID: `56`

Symbol:`BNB`

Explorer: <https://bscscan.com/>
{% endtab %}

{% tab title="Arbitrum" %}
Network Name: Arbitrum One

RPC: <https://arb1.arbitrum.io/rpc>

Chain ID: `42161`

Symbol: `ETH`

Explorer: <https://arbiscan.io/>
{% endtab %}

{% tab title="Ethereum" %}
Network Name: Ethereum Mainnet

RPC: [https://eth.llamarpc.com	](<https://eth.llamarpc.com	>)

Chain ID: `1`

Symbol: `ETH`

Explorer: [https://etherscan.io](https://etherscan.io/)/
{% endtab %}

{% tab title="Scroll" %}
Network Name: Scroll

RPC: [https://1rpc.io/scroll](<https://1rpc.io/scroll	>)

Chain ID: `534352`

Symbol: `ETH`

Explorer: <https://scrollscan.com/>
{% endtab %}

{% tab title="Avalanche" %}
Network Name: Avalanche C-Chain

RPC: [https://avalanche.drpc.org	](<https://avalanche.drpc.org	>)

Chain ID: `43114`

Symbol: `AVAX`

Explorer: <https://snowtrace.io/>
{% endtab %}

{% tab title="Optimism" %}
Network Name: OP Mainnet

RPC: [https://optimism.llamarpc.com](<https://optimism.llamarpc.com	>)

Chain ID: `10`

Symbol: `ETH`

Explorer: <https://optimistic.etherscan.io/>
{% endtab %}

{% tab title="Base" %}
Network Name: OP Mainnet

RPC: [https://base.llamarpc.com](<https://base.llamarpc.com	>)

Chain ID: `8453`

Symbol: `ETH`

Explorer: <https://basescan.org/>
{% endtab %}
{% endtabs %}


# Swap

Utilizing a stableswap 2.0 model, Wombat users can: swap stablecoins at hyper-efficient exchange rates with minimal slippage.

The swap price is defined by the rate of change in cash of asset x per change in cash of asset y. Defined as:

$$
exchange\ rate = \frac{\partial A\_x}{\partial A\_y} = \frac{1 + \frac{A}{r\_x^2}}{1 + \frac{A}{r\_y^2}}
$$

As you may have noticed, the exchange rate is independent of the number of token x and token y in the pool and depends solely on the **coverage ratio**.

#### Example

Assume $$A$$ = 0.05, $$r\_x$$ = 80% and $$r\_y$$ = 150%. We have

$$
exchange\ rate = \frac{1 + \frac{0.05}{0.8^2}}{1 + \frac{0.05}{1.5^2}} \approx 1.055
$$

If we reverse the direction, swap from token y to token x. We have

$$
exchang\ rate = \frac{1 + \frac{0.05}{1.5^2}}{1 + \frac{0.05}{0.8^2}} \approx 0.95
$$

### Incentives for convergence of coverage ratio

Wombat incentivizes a swap if the coverage ratio of two tokens is converged and penalizes if it diverges, as shown in the above example. It helps keep the pool in a healthy state and prevents a token from being defaulted. Learn more in below guide:

{% content-ref url="/pages/gxeklBix52Xij5cbwGph" %}
[Deposit Gain and Withdrawal Fee](/concepts/fees/deposit-gain-and-withdrawal-fee)
{% endcontent-ref %}


# Swap Guide

{% hint style="warning" %}
A haircut fee is charged for each swap. The haircut fee retains in the protocol as a reserve, learn more at [Haircut (Swap Fee)](/concepts/fees/haircut-swap-fee)
{% endhint %}

<figure><img src="/files/XHmisQozzwOVLV1HVBxJ" alt=""><figcaption></figcaption></figure>

1. Choose the token pair you want to trade by clicking the token icon, which prompts the token selection menu to pop up.&#x20;

   <figure><img src="/files/QmmuPrHCk6PfpyGaxHjr" alt=""><figcaption></figcaption></figure>
2. Enter the desired input or output amount. You may also click `MAX` to trade all your token balances.
3. Once you entered the token amount, details of the transactions will be displayed on the expandable card below the block, including:

   * **Minimum Received**: You can adjust the minimum received in the setting’s swap slippage tolerance option. Transactions will not go through if you cannot receive at least this amount.
   * **Fee**: The transaction fee is charged. This fee is reflected in the total amount displayed.
   * **Price Impact**: The difference between the market price and the approximated price caused by the trade.

   <figure><img src="/files/3H8KqdWXeoBwKt18tPXw" alt=""><figcaption></figcaption></figure>
4. Click `APPROVE` to permit Wombat to access the asset. Once approved, click `SWAP` and confirm your action on the wallet app to go forward.
5. Once the transaction is successful, you may view the details by clicking `VIEW ON BSCSCAN`. Click `DONE` if you want to close the pop-up message and be redirected to the swap page.

{% hint style="info" %}
You may adjust Slippage Tolerance and Transaction Deadline in settings with a click of the icon at the top right corner.
{% endhint %}

### **Video Tutorial**

{% embed url="<https://www.youtube.com/watch?ab_channel=WombatExchange&t=1s&v=gRdq22ONlWM>" %}


# Swap Guide For Crosschain Pool

{% hint style="warning" %}
A haircut fee is charged for each swap. The haircut fee retains in the protocol as a reserve, learn more at [Haircut (Swap Fee)](/concepts/fees/haircut-swap-fee)
{% endhint %}

Wombat Exchange's Crosschain Pool allows users to swap stablecoins seamlessly across various blockchains without having to bridge your assets.

In the initial alpha launch, users can swap USDT and USDC between BNB Chain, Arbitrum, and Ethereum, all in one place.

1. Connect your wallet by clicking `CONNECT WALLET` button on the top right corner of Wombat Exchange app: <https://app.wombat.exchange/swap>

<figure><img src="/files/NXQVCDexqDyWYYvhEdvj" alt=""><figcaption></figcaption></figure>

2. Choose the source chain and the token you want to swap.

<figure><img src="/files/aB8Bzxco34Eia3mJmuBV" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/3wLUadlI8ZNEsSXfbOWD" alt=""><figcaption></figcaption></figure>

3. Enter the desired input amount. You may also click `MAX` to trade all your token balances.
4. Choose the destination chain and the token you want to swap to.
5. Once you enter the token amount on the source chain and choose both chains, details of the transactions will be displayed on the expandable card below the block, including:
   * **Minimum Received:** You can adjust the minimum received in the setting’s swap slippage tolerance option. Transactions will not go through if you cannot receive at least this amount.
   * **Gas on destination chain:** You will receive this amount in the destination chain when the crosschain swap is successful.
   * **Fee:** The transaction fee is charged. This fee is reflected in the total amount displayed.
   * **Estimate Delivery Fee:** This is the fee to deliver some gas tokens from the source chain to the destination chain (*You can modify the amount of gas tokens you want us to transfer in the SETTING*). Ensure you have some native token of the source chain in your wallet to pay this fee.&#x20;
   * **Price Impact:** The difference between the market price and the approximated price caused by the trade.

<figure><img src="/files/NRwB0PyEHfGzsTfd8Bku" alt=""><figcaption></figcaption></figure>

6. Click `APPROVE` to permit Wombat to access the asset. Once approved, click `SWAP` and confirm your action on the wallet app to go forward.
7. Once the transaction is successful, you may view the details by clicking `VIEW ON BSCSCAN (Arbitscan or Etherscan, depending on your source chain)`. Click `DONE` if you want to close the pop-up message and be redirected to the swap page.
8. You can keep track of the swapping process in the “Crosschain Swap Status" box at the end of the page.

<figure><img src="/files/zy50X1M6gHLxCjYU1kXi" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
You may adjust Gas on Destination Chain, Slippage Tolerance and Transaction deadline in settings with a click of the icon at the top right corner.
{% endhint %}

<figure><img src="/files/W0iRkHKa0dN5Lki34jBs" alt=""><figcaption></figcaption></figure>


# Yield Farming

Wombat delivers WOM through our base reward and boosted reward, which accounts for 37.5% and 62.5% of emissions.

$$
WOM\ Rewards = WOM\ Rewards\ \_{base} + WOM\ Rewards\ \_{boosted}
$$

<figure><img src="/files/1D1v4tKzKxP0uZhGBWO2" alt=""><figcaption></figcaption></figure>

### Base Reward

Your base reward is directly proportional to the amount of LP tokens you have staked.

$$
WOM\ Rewards\ \_{base} = Base\ Pool\ Alloc
ation \* \frac{Deposit}{Total\ Pool\ Deposit}
$$

Examples can be found in this article:

{% embed url="<https://medium.com/wombat-exchange/wombat-liquidity-mining-base-pool-rewards-optimization-abd5034a6d1b>" %}

### Boosted Reward

The boosted reward incorporates **voting escrow WOM (**[**veWOM**](/getting-started/yield-boosting)**)** for rewards accrual. The team drew inspiration from Curve’s veCRV model and enhanced its flexibility and earning power.&#x20;

Boosted rewards are calculated using a weight function (*w)* in conjunction with the veWOM amount (shown below):

$$
w=\sqrt{Deposit \* veWOM}
$$

After calculating your weight, plug it into the following formula to calculate your boosted WOM reward:

$$
WOM\ Rewards\ \_{boosted} = Boosted\ Pool\ Allocation \* \frac{w}{Total\ Pool\ Weight}
$$

Examples can be found in this article:

{% embed url="<https://medium.com/wombat-exchange/wombat-liquidity-mining-optimize-rewards-in-the-boosting-pool-59f8024d3eb3>" %}

Learn how you can maximize yield in the below sections:

{% content-ref url="/pages/Y0NJlRGzgzoGH9KlkNDs" %}
[Yield Boosting](/getting-started/yield-boosting)
{% endcontent-ref %}

### APR Definition

| Base APR                                                                                                                      | Boosted APR                                                                                                                                  | Median APR                                                                                                              |
| ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| The base APR is the instant APR and it depends on multiple factors including TVL, pool weight, WOM emission and price of WOM. | By locking WOM, you will get veWOM and it increases your boosted APR for stablecoin staking. veWOM applies to all tokens you have deposited. | The sum of Base APR and Median Booster APR. The median boosted APR is for the users who have locked WOM and hold veWOM. |


# Providing Liquidity

{% hint style="info" %}
Make sure to have some BNB in your wallet to pay for the gas fees in transactions.\
\
You will not gain yields by simply providing liquidity on Wombat; you **MUST** stake your assets to start reaping the rewards.&#x20;
{% endhint %}

1. Click the `POOL` tab on the panel to visit the pool page.
2. Locate the pool you wish to deposit to. Expand the card and click `LIQUIDITY`.&#x20;

   <figure><img src="/files/1KM9aidZ5tT7nGcsC9xo" alt=""><figcaption></figcaption></figure>
3. Enter the desired amount to deposit or stake; you may also click `MAX` to deposit all of your token balance.
4. Once you have entered the amount, transaction specifics will be displayed. After inspecting all details, click `APPROVE` and confirm the transaction in your wallet to grant Wombat access to the asset.&#x20;

   <figure><img src="/files/un7YN3lwdsuoRNkpBRCX" alt=""><figcaption></figcaption></figure>
5. Two options (`DEPOSIT` and `DEPOSIT & STAKE`) will be available upon approval. If you wish to provide liquidity without staking the asset, click `DEPOSIT` and confirm the transaction in your wallet.&#x20;

{% hint style="info" %}
A user can get more LP tokens than a deposit. When the coverage ratio deviates from 1, depositors will get a deposit reward as they help converge the coverage ratio. Details can be found at [Deposit Gain and Withdrawal Fee](/concepts/fees/deposit-gain-and-withdrawal-fee)
{% endhint %}

## Withdraw

You can navigate the withdrawal page by clicking the toggle at the top of the window.

### Withdraw in other assets

Wombat allows users to choose which assets they wish to withdraw from. It is equivalent to a withdrawal followed by a swap.

For example, if you have deposited USDC in our main pool, you can withdraw in the tokens of your choice, i.e., USDC, USDT, DAI, or BUSD.


# Stake

{% hint style="info" %}
Make sure to have some BNB in your wallet to pay for the gas fees in transactions.
{% endhint %}

1. If you have clicked `DEPOSIT` in the previous step and wish to stake your LP tokens to start earning rewards, you may go back to the pool page and click the `STAKING` button inside the card.
2. Enter the desired amount and click `APPROVE` to grant Wombat access to your LP token assets. Confirm the transaction in your wallet.&#x20;
3. Click `STAKE` and confirm the transaction in your wallet.
4. Rewards will start accruing, and you'll be able to view all rewards at the top of the POOL page.

### Video Tutorial

{% embed url="<https://www.youtube.com/watch?ab_channel=WombatExchange&t=172s&v=WmPLoR5__lg>" %}


# Claim

All your earned tokens will be displayed under the `Total Claimable` portion on the pool page.

<figure><img src="/files/cmVWavjqZmQZz2ohZHZS" alt=""><figcaption></figcaption></figure>

Click the `CLAIM ALL` button to claim your rewards. Please note that a gas fee will be involved when authorizing the claim.<br>

{% hint style="success" %}
Whenever a user stakes more LPs, Wombat triggers a convenience function where the rewards earned will also be claimed.
{% endhint %}


# Yield Boosting

You can earn additional WOM from the Boosted Pool by locking WOM tokens. The Boosted Pool was created to incentivize token purchases, encourage long-term investing, and develop a strong TVL linked to lock boosting.

Locking any amount of WOM applies a boost to ALL stablecoin pools, but the APR varies based on your position, WOM emission, WOM price, and the actions of other users. veWOM’s attributes are as follows:

* Users can lock WOM for a period between **7 days and 4 years** to mint veWOM based on the following formula (t=# of days)&#x20;

$$
veWOM=LockedWOM*0.02616*t^{1/2}
$$

<figure><img src="/files/f8aKTqvmzoOpn7KAojRR" alt=""><figcaption><p>veWOM ratio versus number of years to lock</p></figcaption></figure>

* Users can have multiple locking positions (up to 10,000) with different locking periods and WOM amounts
* Maximum veWOM held with a deposit equals 1x WOM staked for the deposit
* After the expiration of a position, users can redeem WOM anytime. However, once redeemed, the respective veWOM is burned. i.e., your veWOM balance will continue to boost your rewards **after lock expiration** unless you redeem the underlying WOM
* veWOM is not transferable or tradable

Examples can be found in this article:

{% embed url="<https://medium.com/wombat-exchange/wombat-liquidity-mining-optimize-rewards-in-the-boosting-pool-59f8024d3eb3>" %}


# Acquire WOM

## Acquiring WOM

The WOM token is widely available across numerous decentralized exchanges:

* BNB
  * [PancakeSwap](https://pancakeswap.finance/)&#x20;
  * [1inch](https://app.1inch.io/)&#x20;
  * [OpenOcean](https://app.openocean.finance/CLASSIC#/BSC/WOM/BUSD)&#x20;
  * [DefiLlama](https://swap.defillama.com/)
* Arbitrum
  * [Uniswap](https://app.uniswap.org/)
* Ethereum
  * Uniswap

`*Token addresses can be found in` [About WOM](/tokenomics/about-wom).

## Bridging WOM

An important note is that each chain in our ecosystem will operate independently, and as such, BNB veWOM holders will not have the ability to participate in the Arbitrum governance system.

To obtain veWOM on Arbitrum, existing BNB WOM holders can choose to bridge from the BNB Chain to Arbitrum to mint veWOM.&#x20;

{% hint style="info" %}
**NOTE**: veWOM is not bridgeable.
{% endhint %}

Follow these easy steps below and start bridging $WOM via Wormhole Portal:

<figure><img src="/files/qPWlInleQu4Hc4E00hv5" alt=""><figcaption></figcaption></figure>

1. Visit Wormhole's Portal site at[ ](https://t.co/Pv5HN1dyN7)<https://portalbridge.com/#/transfer>
2. Choose the source and target chain as Binance Smart Chain and Arbitrum, respectively
3. Connect your source chain wallet&#x20;
4. Click "Select a token" and select[ $WOM](https://twitter.com/search?q=%24WOM\&src=cashtag_click)
5. Connect your target chain wallet
6. Select your preferred payment method for gas fees, then click “Next”
7. Click “Transfer” and confirm the transaction in the pop-up window
8. Confirm the transaction in your wallet to initiate the transfer
9. Wait for blockchain confirmations
10. Click “Redeem” and confirm the transaction in your wallet


# Lock WOM

{% hint style="danger" %}
Locking $WOM is irreversible. You can only claim back the tokens after the locking period.&#x20;
{% endhint %}

1\. If you do not have any WOM to lock, you can get them from [PancakeSwap](https://pancakeswap.finance/swap).&#x20;

2\. On Wombat’s app, head to the Boost menu.

<figure><img src="/files/xUXYAvUfxsCXFAxWXi0q" alt=""><figcaption></figcaption></figure>

3\. Input desired lock amount & period. You’ll be able to preview the veWOM earnings and the exact unlock date.&#x20;

4\. Click `APPROVE` to give Wombat access to your WOM tokens. Approve the transaction on MetaMask.

<figure><img src="/files/UijKnIzSdA7a16ZnVKZH" alt=""><figcaption></figcaption></figure>

5\. Click the `LOCK` button to confirm the transaction. Authenticate the action on Metamask to proceed.&#x20;

6\. Once the transaction has gone through, you will get your veWOM **instantly** and start earning WOM in the boosting pool every second. You may see your boosted APR in the menu of the pools where you have staked stablecoins.

### Booster Calculator

You may use the booster calculator on our BOOST page to determine how much a certain amount of veWOM affects your APR.

<figure><img src="/files/jhwHsvghXy7rdtsMsYYP" alt=""><figcaption></figcaption></figure>

### Video Tutorial

{% embed url="<https://www.youtube.com/watch?ab_channel=WombatExchange&t=3s&v=fTAi2EDmfTQ>" %}


# Unlock WOM

You’ll find all your *lock history, veWOM, and WOM balance* underneath the locking menu.&#x20;

Once it reaches the unlock date, an unlock button will appear in the countdown column, which you can click to receive all your locked WOM back.

<figure><img src="/files/439tkupVZMa8BVPnL6xT" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
Unlocking $WOM will return all veWOM you received from the specified locking position. veWOM is not transferable nor tradable.
{% endhint %}


# Extend Lock

{% hint style="info" %}
All positions are extendable with no lock amount changes, except 4Y locking positions.
{% endhint %}

1. Click the 'extend' button in your position and set the new lock period.

   <figure><img src="/files/ejhjEedun0daj0cLFZGW" alt=""><figcaption></figcaption></figure>
2. Check the UI for the updated unlock date & earned $veWOM, click "EXTEND" and confirm your transaction in the wallet.

<figure><img src="/files/yTmWmIlWq4paknBeuUYZ" alt=""><figcaption></figcaption></figure>


# Fee Sharing

Commencing February 28, 2023, all liquidity providers will have access to the benefits of our fee-sharing program.

## How we generate income

Our revenue generation model is based on a small fee levied on every token swap, withdrawal, or trade fee that users generate on our website, 1inch, or any other DEX aggregator.

## Sharing the Wealth

In line with our belief in sharing our income, 50% of swap fees collected will be disbursed evenly among all liquidity providers of the respective token, with the remaining 50% directed to our treasury. Fee sharing APR is displayed in the tooltip of the average APR, calculated with the below formula:

$$
\displaystyle \frac{(\sum\_{i} pool\_i.\text{dailyVolume} \* pool\_i.\text{haircut} \* pool\_i.\text{lpDividendRatio}) \* 365}{\text{Total Value Locked}}
$$

Fee-sharing rewards are reflected in the underlying asset value of your LP, and it is essential to note that the fee-sharing APR may fluctuate depending on our platform's trading volume.

All fees accrued in the past will be applied towards funding community incentives. Stay tuned for further updates!<br>


# Analytics

## Oracles

Wombat is proudly Powered by Pyth, using their state-of-the-art data feeds for our analytics data and front-end price feeds.

<figure><img src="/files/unYqlRqWZyBvrlUzNw5m" alt=""><figcaption></figcaption></figure>

View Wombat Exchange's analytics site here 👇

{% embed url="<https://info.wombat.exchange>" %}


# Emission Allocation

{% hint style="info" %}
Note that the emissions allocation will be adjusted and effected in Q1 2024; read more below:
{% endhint %}

{% embed url="<https://medium.com/@wombatexchange/wombat-2-0-into-a-new-frontier-ef3ea167d82c>" %}


# Risks

Providing liquidity on Wombat Exchange has potential rewards, and it also has potential risks. Investors should conduct their own research and understand the risks fully before depositing. Again, DYOR (Do your own research); the risks described below are non-exhaustive, and you will need to make your own assessment of the risks.

Wombat Exchange does not accept any responsibility or liability for any losses arising from the deposit of your assets into the liquidity pools or from your use of Wombat Exchange generally.&#x20;

**Pegged assets**

Assets that compose the liquidity pools on Wombat Exchange may be "pegged assets." Pegged assets are assets meant to track the value of the underlying asset (such as how WBTC tracks the price of BTC). While pegged assets usually track the value of the underlying asset very closely, there are risks in using pegged assets. For example, the pegged asset could fall victim to an exploit, which could adversely affect its value and cause it to de-peg from the value of the underlying asset. In extreme cases, the pegged asset could become worthless. The change in the value of a pegged asset may also affect the coverage ratio, which is described below.

[**Security Audits**](/getting-started/security)

Hacken, Peckshield, and Zokyo audited Wombat Exchange’s smart contracts. However, security audits don't eliminate risks. Do not invest your life savings or any assets you cannot afford to lose, especially as a liquidity provider.&#x20;

You are also encouraged to review the smart contracts yourself and not rely wholly on the auditors.

**Admin keys**

Wombat will transition to be completely decentralized in the future. Currently, Wombat Emergency DAO has seven members who can act in times of danger of losing funds. The emergency DAO can call the function of Wombat Pool contracts which disables and reenables all functionality. Wombat’s emergency DAO can add or remove emergency members.

**Staking risks**

Users interact with multiple smart contract products when staking, and each carries its risks. You should also understand the design of Wombat Exchange's liquidity pools.&#x20;

**Coverage ratio**

Wombat Exchange's liquidity pools utilize a concept known as the "coverage ratio," which is a mechanism meant to help a pool return to equilibrium. If there is a severe imbalance in a pool, withdrawing assets with a low coverage ratio could result in a significant withdrawal fee.&#x20;

You are strongly encouraged to read the information on the coverage ratio, as it is essential for you to understand the risks of adding liquidity to Wombat Exchange's liquidity pools.

**Infrastructure Risk**

Wombat Exchange is necessarily dependent on external infrastructure, such as those related to the blockchain network you are using. This means that disruption events, such as halting of the network and network and smart contract vulnerabilities, may impact your ability to conduct swaps on Wombat Exchange and, more generally, your experience on Wombat Exchange. In some cases, disruption events may also cause loss. Cross-chain swaps may introduce an additional layer of infrastructure risk because of the involvement of other infrastructure, such as the addition of the destination chain. While disruption events impact all blockchain-based applications equally, users should carefully consider how they could affect their Wombat Exchange use.

**MEV and Slippage**

Although the algorithm underlying Wombat Exchange is designed to minimize the effects of slippage on users, users should still be mindful that MEV and slippage may impact the final amount of tokens received in the destination chain.

**Credit**

Credit will allow users to swap into one token when its coverage ratio is 100% and vice versa. Depending on the liquidity of the token being swapped on the destination chain, cross-chain swaps may create imbalances in the liquidity pools, which ultimately affect the coverage ratio. Your cross-chain swap may fail if the destination chain lacks liquidity for the token being swapped.


# Security

## Security Audits

![](/files/68Q2fNzUGvEXqYIiQVTW)

Wombat has successfully passed the smart contract security audit from Hacken, Peckshield, and Zokyo. See the below links for the detailed report:

* [Peckshield](https://github.com/peckshield/publications/blob/master/audit_reports/PeckShield-Audit-Report-Wombat-v1.0.pdf)
* [Hacken](https://hacken.io/wp-content/uploads/2022/04/WombatExchange_20042022SCAudit_Report_3.pdf)
* [Zokyo](https://www.wombat.exchange/zokyo_wombat_audit_report.pdf)

### Side Pool and Dynamic Pool Audit

* [Peckshield](https://github.com/peckshield/publications/blob/master/audit_reports/PeckShield-Audit-Report-WombatV2-v1.0.pdf)&#x20;

### Bribe Market Audit

* [Peckshield](https://github.com/peckshield/publications/blob/master/audit_reports/PeckShield-Audit-Report-WombatV3-v1.1.pdf)

## Insurance

<figure><img src="/files/Wf51ohs3KrJidBjmmoDy" alt=""><figcaption></figcaption></figure>

Wombat has partnered with Insurace with InsurAce to add an extra safety layer to protect your assets against smart contract vulnerabilities.

&#x20;Users may obtain it on the InsurAce site on [Insurace.io](https://app.insurace.io/).&#x20;


# Gauge Voting

Starting from 12th Apr 2023, veWOM holders can participate in gauge voting to determine 50% of the WOM emission.

Users can allocate their vote (1 veWOM = 1 vote) to one or more gauges (a gauge corresponds to an LP token of a pool) through the dapp. WOM emission to a gauge is proportional to the votes it receives.

### Real-time WOM accumulation; Epoch-based WOM distribution

Voting gauges accumulates WOM second by second according to the voting weight. When a user applies new allocation for their votes, accumulation rate of WOM of the gauge updates immediately. There is no cooldown period between votes. Users can update their vote allocation anytime as long as they have enough amount of veWOM. Only whitelisted gauges are able to accumulate WOM from users’ votes.

However, accumulated WOM is distributed to LP in the next epoch at an even rate. **1 epoch last for 7 days**.

For example, if one gauge receives 70k WOM in the current epoch, it will distribute 10k WOM/day to LP stakers in the next epoch.

### Base Allocation

The rest of the 50% emission is distributed as base allocation weights shown in the dapp. It serves the purpose to provide staking incentives to the main pool and pools that bribe is not likely to attract enough liquidity.

### Bribes

Bribes are natively supported by the protocol. Partner protocols can provide bribes to attract veWOM holders to vote for their pools / tokens to provide more rewards to LP stakers. You may contact Wombat team if you wish to provide bribes to a gauge.

Voters of a bribed gauge are able to receive bribe rewards second by second. Users can check the reward rate and claim rewards in the dapp.

### Bribe Efficiency

Bribe efficiency indicates value of emissions in USD generated from 1 USD of bribes. If the value is greater than 100%, protocols can amplify their emission with bribes. The current value could be found in <https://app.wombat.exchange/gauge-voting>


# Vote and Claim

{% hint style="info" %}
Before you can vote, you'll need to have veWOM. If you don't already have veWOM, take a look at this first [lock wom](/getting-started/yield-boosting/lock-wom)
{% endhint %}

## How to vote

1. Go to Gauge page.

   <figure><img src="/files/8x0Pp6wxnHpgQcgbfkl6" alt=""><figcaption></figcaption></figure>
2. Connect your wallet to view the veWOM balance, vote, and bribes.

   <figure><img src="/files/a2hUIuef6S8boxrTCqOn" alt=""><figcaption></figcaption></figure>
3. You can view your vote balance after you connect the wallet.

   <figure><img src="/files/vtH6HdZlkXxXl48MMPgW" alt=""><figcaption></figcaption></figure>
4. Go to `Vote with veWOM` and add the gauge you want to vote for.

   <figure><img src="/files/ZyxgrbfxAAzX4GKdbbZV" alt=""><figcaption></figcaption></figure>
5. Enter the percentage of votes you want to cast and click `vote`. You can vote for more than 1 gauge.

   <figure><img src="/files/dV67PKkkmaQn2GJ8opk5" alt=""><figcaption></figcaption></figure>
6. If you want to change the vote from one gauge to another, simply type in “0%” in the existing gauge and enter the desired percentage in the new gauge. &#x20;

   <figure><img src="/files/oocXmeEBmHdLDCXLqAVw" alt=""><figcaption></figcaption></figure>

## How to Claim Rewards

1. You can view your rewards balance in the `Claimable Rewards` column.

   <figure><img src="/files/3jC28KaZuvjqZBW7hG4d" alt=""><figcaption></figcaption></figure>
2. If you would like to claim your rewards, simply click `Claim all rewards`.

{% hint style="info" %}
If you switch your vote in the gauge, any rewards will be allocated straight to your wallet.
{% endhint %}


# Governance Framework

The governance process involves proposals being created and voted on by the community. Proposals must be submitted in our [governance forum ](https://gov.wombat.exchange/)and must receive a specific number of votes to proceed. Once a proposal is approved, the Wombat team will work on the implementation. For a detailed process, please refer to the below graph:

<img src="/files/elaxsxNMcKDhZmgwKhDR" alt="" class="gitbook-drawing">

Please note that only the following types of proposals are eligible for formal consideration in our governance:

* Adding a new token or creating a new pool with bribe
* Adding bribe to existing pool/token

If you have other ideas or suggestions that do not fall within these categories, you are welcome to share them in the \[idea] category for open discussions.


# Coverage Ratio

While other AMM uses the number of tokens to determine the exchange rate, Wombat introduces its innovation of using an **asset-liability management** model to price assets.

The coverage ratio $$r\_x$$of an asset refers to the pool's ability to cover its debt payment. Each stablecoin in a pool has its coverage ratio.

$$
coverageRatio\_x (r\_x) = \frac{Cash\_x}{Liability\_x}
$$

Liquidity provided to the protocol would become a **liability​**. When users deposit and withdraw, liability changes, respectively.

**The asset** of token x is the amount of cash in the liquidity pool. Generally speaking, an asset of higher coverage indicates a lower default risk, and actions that increase the coverage ratio of a token are incentivized.

{% embed url="<https://medium.com/wombat-exchange/coverage-ratio-what-is-it-and-why-is-it-healthy-for-your-deposits-36663d18bb15>" %}


# Invariant Curve

With the above definition in mind, Wombat’s invariant curve is defined as follows:

$$
\sum{L\_x (r\_x - \frac{A}{r\_x})} = D
$$

&#x20;$$rₓ$$ = coverage ratio of token x

&#x20;$$A$$= amplification factor&#x20;

During a swap, the right-hand side of the invariant remains constant.&#x20;

The invariant has some favorable properties, including:

* The number of assets in a pool is unlimited. One can add and remove assets on the fly.
* The weight of assets is flexible. A protocol can emit more rewards to a token in the pool with higher buy pressure to selectively deepen liquidity.
* Users can provide single-sided liquidity.

### Dynamic Pool

Dynamic pool supports tokens with distinct prices, as supplied by external price oracles, the invariant curve is defined as follows:

$$
\sum{L\_xp\_x (r\_x - \frac{A}{r\_x})} = D
$$

$$p\_x$$ = oracle price of token x

More details could be found [here](/concepts/dynamic-pool)


# Global Equilibrium Coverage Ratio

The system health of a pool could be measured by the **global equilibrium coverage ratio** $$r^\*$$, which is the coverage ratio when all tokens return to the equilibrium state.

$$
\sum{L\_x (r^\* - \frac{A}{r^\*})} = K
$$

If r\* is greater than or equal to 1, it indicates the pool has enough asset to cover its liability.

## Visualize Wombat

By plotting Wombat’s invariant when the amplification factor is 0.05, we can generate the following visualization:<br>

![Wombat Invariant (Red curve) and Constant Function Market Makers (blue curve)](/files/6foLpmecy8ZJv7PsMfuu)

When the pool is close to equilibrium, tokens are exchanged in a way similar to CFMM. Unlimited liquidity is provided near the tail when it deviates from equilibrium.


# Dynamic Pool

Wombat is an avant-garde stableswap. It never stops innovating. It continuously brings more invention to the DeFi space.

Researching Wombat's Invariant discovered a dynamic pool that supports swaps between assets with different values as supplied by external oracles.

$$
\sum{L\_x  p\_x (r\_x - \frac{A}{r\_x})} = D
$$

$$L\_x$$ = Liability of token x (in token amount)

$$p\_x$$ = relative price of token x

$$r\_x$$ = coverage ratio of token x

$$A$$ = amplification factor

### Liquid Staking Pool

Liquid staking pool is the first dynamic pool on Wombat Exchange. Users can swap their tokenized LSD for respective underlying tokens without waiting for the unstaking period.

#### Oracle

The liquid staking pool contract reads the exchange rate of the tokenized LSD from the respective staking contracts.

### Risk of Impermanent Loss

Impermanent loss in Wombat's context is when the [global equilibrium coverage ratio](broken://pages/CnRRMmRfsGR9gMiLM26C#global-equilibrium-coverage-ratio) $$r^\*$$ decreases.

A pool is similar to an index that holds a basket of assets. If the price of its underlying assets changes, it is possible that $$r^*$$ deviates from 1. However, it's unlikely that the $$r^*$$ of LSD pools will decrease. We expect the coverage ratio of liquid staking LSD to be higher than 100%, while that of underlying tokens to be lower than 100% as natural sell pressure on tokenized LSD. In such a case, $$r^\*$$ monotonically increases.

However, by any chance $$r^\*$$ drops, the gap can be filled, and the coverage ratio can be pushed back to 1 with haircut fees accumulated.

The smart contract implementation, $$r^\*$$ is assumed to be 1 in deposit and withdrawal to simplify the calculation.

### Rebasing Asset

At this time, Wombat does not support rebasing assets.

For USD+ assets, any extra tokens resulting from rebasing are skimmed and used to incentivize its own pool.

{% hint style="info" %}
More details can be found on the side pool and dynamic pool [whitepaper](https://www.wombat.exchange/Wombat_Whitepaper_SidePool.pdf).
{% endhint %}


# Cross Chain

Wombat’s foundational algorithm for the swaps has remained essentially unchanged. You may refer to [Wombat’s Whitepaper](https://www.wombat.exchange/Wombat_Whitepaper_Public.pdf), the Wombat Side Pool,[ and Dynamic Whitepaper](https://www.wombat.exchange/Wombat_Whitepaper_SidePool.pdf) to understand Wombat’s mechanics better.

## Invariant in the Context of Single-Chain&#x20;

To facilitate crosschain transactions, we modify our stableswap invariant with an additional term, **Credit**, which serves as a network-neutral representation of value.&#x20;

Credit is equivalent to the value of 1 token in the pool when the coverage ratio of the token is 100%. In other words, 1 credit can be swapped into 1 token when its coverage ratio is 100%, and vice versa. Users will only obtain credit when the transaction of the designated chain is not executed. Let’s define the crosschain pool invariant for a single chain as follows:&#x20;

$$
\sum\_{i} L\_i(r\_i −\frac{A}{r\_i} ) = D + (1 + A)C
$$

C represents the amount of outstanding credit, which represents the net amount of unrealized credit for that network. In a scenario where all credits are settled (swapped into tokens), C equals zero and is identical to our stableswap invariant.&#x20;

## Invariant in the Context of Crosschain Network

$$
\sum^{Network}*{n}\[ \sum^{Token}*{i}L\_{ni}(r\_{ni}-\frac{A\_{n}}{r\_ni})]=\sum^{Network}\_{n}D\_n+(1+A\_n)C\_n
$$

Users can swap between native assets on different chains using a crosschain pool. In a multi-networks setting, we allow network-specific amplification factors, A, and Credit, Cn.&#x20;

Users can obtain gas tokens on the designated network by sending more gas from the source network, supported by the *Wormhole relayer*. If a user wants to swap token x from Network A to token B on Network B, we can understand the process in three steps.&#x20;

1. The user swaps token X for credit by putting a certain amount of token X into the pool on chain A to get the corresponding amount of C.&#x20;
2. Credit is relayed from Network A to Network B with an identical amount of credit.&#x20;
3. The user swaps credit to the token and gets token Y on Network B.

<figure><img src="/files/Y91UlrQbJBllBXTTjLrT" alt=""><figcaption></figcaption></figure>

## Wormhole’s Messaging Layer&#x20;

Wormhole is the message layer to relay messages in crosschain transactions. The WormholeAdaptor contract is an adapter between the pool and the Wormhole Relayer, publishing messages to the Wormhole Network. It also completes the swap at the designated chain when it receives the signed message, also known as Verified Action Approvals (VAA).&#x20;

## Credit, Mitigating MEV, and Slippage&#x20;

As the transaction between the source chain and the designated chain is asynchronous, the final received amount is not deterministic when the transaction at the source chain is executed. To address this issue, we introduce the concept of ”credit” – an imaginary intermediate token.&#x20;

1. The transaction in the source chain swap fromToken into credit.&#x20;
2. The amount of credit is then relayed to the designated chain, where it is swapped into the toToken.&#x20;
3. If no intermediate transactions are performed on the toToken, the final amount received will equal that of a same-chain swap.&#x20;
4. Users can specify a minimum amount to receive for the first and second steps.&#x20;
5. If the slippage in the first step exceeds the specified amount, the transaction will be reverted to the source chain.&#x20;
6. The user will receive credit if the slippage at the second step exceeds the specified amount.&#x20;
7. Users can swap credit for native tokens on the designated network or bridge the credit back to the source chain and swap it for native tokens in the source network.

## Steps of a Crosschain Swap

1. To initiate a crosschain swap, the sender will call *CrossChainPool. swapTokensForTokensCrossChain.*&#x20;
   * The Wormhole Relayer requires extra gas tokens to relay the message to the contract on the designated chain. These tokens should be attached in the value field of the message.
   * To determine the amount of value required, use WormholeAdap- tor.estimateDeliveryFee.
2. The Guardian Network observes and signs messages.
3. Wormhole Relayers relay the signed message (the VAA) to the designated chain. Once complete, they will invoke the pool to swap tokens and send them to the receiver.
4. Users will receive credit if the slippage is too significant and the swap is reverted on the designated chain. Users can then exchange their credit for native tokens.

<figure><img src="/files/TtVmLGvecxkqS0ptlQjW" alt=""><figcaption></figcaption></figure>


# Fees

Wombat applies a series of fees :&#x20;

* Swap Fee (haircut): Each pool has its swap fee. Refer to [Haircut (Swap Fee)](/concepts/fees/haircut-swap-fee) for the detailed breakdown.
* [Deposit Gain and Withdrawal Fee](/concepts/fees/deposit-gain-and-withdrawal-fee): Only applicable when coverage ratio is off balance
* [Coverage Ratio Fee](/concepts/fees/coverage-ratio-fee): Only applicable to swaps in side pool, wmxWOM, and mWOM pool

Fees detail will be displayed in the transaction confirmation window. Fees will be reserved.


# Haircut (Swap Fee)

{% hint style="info" %}
The value shown in the above table might be outdated. Please refer to the [smart contract](/developers/contracts) for the latest value.
{% endhint %}

As a profit for the protocol, we charge a certain percentage for each swap as a haircut fee, denoted as *h*. The fee is set in the to-token.&#x20;

| Pool                     | Haircut         |
| ------------------------ | --------------- |
| Stablecoin/pegged assets | 0.2 bp (0.002%) |
| Cross Chain (Alpha)      | 1 bp (0.01%)    |
| Ecosystem                | 20 bp (0.2%)    |

Currently, all fees are retained in the pool as a reserve. \
\
\* Exceptions are made dependent on a situational basis.


# Fee Distribution

Haircut (swap fee) collected is automatically distributed when its value exceeds `Pool.mintFeeThreshold` during deposit and withdrawal transactions. This value is usually set at a value of about $10 USD. Alternatively, users can call `Pool.mintFee(address token)`, which is supported from V3 pool contracts, to instantly distribute fees.

Haircut is distributed in 3 portions:

* LP dividend: A certain amount of haircut is distributed to LPs, which is determined by `Pool.lpDividendRatio`. The underlying token amount for LPs increases accordingly. The ratio can be checked using `Pool.exchangeRate(address token)`.
* Retention: Some haircut is retained in the tip bucket of the pool. The ratio could be checked by `Pool.retentionRatio`. It can be used to fill the pool if the retention factor drops below 1, or retrieved by the pool owner for other uses.
* Remaining haircut are transferred to `feeTo` address

### Current Allocation

{% hint style="info" %}
The value shown in the above table might be outdated. Please refer to the [smart contract](/developers/contracts) for the latest value.
{% endhint %}

Currently, 50% of haircuts are allocated to "LP dividend" and the remaining 50% are allocated to "Retention". For USD+ family of assets, haircuts allocated to "Retention" are transferred to `feeTo` to ensure proper skimming.


# Deposit Gain and Withdrawal Fee

### Deposit Gain and Arbitrage Protection

Recall that the coverage ratio is defined as:

$$
r\_x = \frac{A\_x}{L\_x}
$$

When a user deposits $$A\_x$$and $$L\_x$$increases by the same amount, pushing closer to 1, the equilibrium coverage ratio increases. Users will receive **deposit gain** as they help bring the pool closer to equilibrium.

However, Wombat’s asset-liability management design could potentially lead to *withdrawal arbitrage*, which drains funds from the pool. We developed a **withdrawal fee** to prevent withdrawal arbitrage.

When $$A$$=0.002, the deposit gains and withdrawal fees are as followers:

<table><thead><tr><th width="216.33333333333331">Coverage Ratio</th><th>Deposit gain</th><th>Withdrawal fee</th></tr></thead><tbody><tr><td>0.1</td><td>+13.49%</td><td>-13.49%</td></tr><tr><td>0.2</td><td>+3.05%</td><td>-3.05%</td></tr><tr><td>0.3</td><td>+1.06%</td><td>-1.06%</td></tr><tr><td>0.4</td><td>+0.44%</td><td>-0.44%</td></tr><tr><td>0.5</td><td>+0.20%</td><td>-0.20%</td></tr><tr><td>0.6</td><td>+0.09%</td><td>-0.09%</td></tr><tr><td>0.7</td><td>+0.04%</td><td>-0.04%</td></tr><tr><td>0.8</td><td>+0.01%</td><td>-0.01%</td></tr><tr><td>0.9</td><td>+0.00%</td><td>-0.00%</td></tr><tr><td><strong>1.0</strong></td><td><strong>+0.00%</strong></td><td><strong>-0.00%</strong></td></tr><tr><td>1.1</td><td>+0.00%</td><td>-0.00%</td></tr><tr><td>1.2</td><td>+0.01%</td><td>-0.01%</td></tr><tr><td>1.3</td><td>+0.01%</td><td>-0.01%</td></tr><tr><td>1.4</td><td>+0.02%</td><td>-0.02%</td></tr><tr><td>1.5</td><td>+0.02%</td><td>-0.02%</td></tr><tr><td>1.6</td><td>+0.03%</td><td>-0.03%</td></tr><tr><td>1.7</td><td>+0.03%</td><td>-0.03%</td></tr><tr><td>1.8</td><td>+0.04%</td><td>-0.04%</td></tr><tr><td>1.9</td><td>+0.04%</td><td>-0.04%</td></tr><tr><td>2.0</td><td>+0.05%</td><td>-0.05%</td></tr></tbody></table>

All deposit gains and withdrawal fees remain in the pool and will be used to keep the system at an equilibrium state.

In most cases, liquidity providers will not be affected by this. Significant deposit gain and withdrawal fees are incurred only if the pool is highly out of balance.

## Incentives for convergence of coverage ratio

In cases where an asset in the pool is high in demand and shows a low coverage ratio, withdrawal in an asset higher in coverage ratio helps converge its coverage ratio. Users are incentivized to withdraw such tokens. Details of data can be found in [#deposit-gain-and-arbitrage-protection](#deposit-gain-and-arbitrage-protection "mention")

Withdrawing from an asset with a low coverage ratio will lead to a withdrawal penalty. You may withdraw your LP in other tokens to avoid the penalty. Refer to the below calculations for reference.

#### Example

Say user owns some LP of x, and he can withdraw in either token x or token y. Assume $$A$$ = 0.002, $$r\_x$$ = 50% and $$r\_y$$ = 90%.

* If token x is withdrawn, the **withdrawal penalty** is **-0.20%**.
* If the user withdraws in token y, he can receive **+0.75%** (swap rate) - 0.01% (haircut) = +0.74% **withdrawal gain** as he converges coverage ratios of two tokens.


# Coverage Ratio Fee

{% hint style="danger" %}
This fee only applies to the side pool and wmxWOM, mWOM, and qWOM pool swaps. Deposits and withdrawals are not affected.
{% endhint %}

Experimental or newer stablecoins are riskier and may demand higher flexibility in maintaining their price peg at 1. Instead of continuously monitoring an asset’s health and pausing the asset pool during highly-fluctuating markets, e.g., soft de-peg, we note that the coverage ratio of de-pegging stablecoins is invariably high since traders will swap this stablecoin for other assets in the pool.&#x20;

To prevent other assets in the protocol from being drained, we introduce an additional **high coverage ratio fee** or **de-peg protection** that will be applied on top of a regular haircut of a swap.&#x20;

A stricter requirement will be placed on these volatile assets’ coverage ratios and supply limits for the best protection. When the coverage ratio of the from-token (of the volatile asset) **exceeds** $$b1$$(`Start coverage ratio`), a coverage ratio fee will be charged on top of the haircut to discourage users from swapping.&#x20;

When the coverage ratio reaches the maximum limit ($$b\_2$$`End coverage ratio`) we’ve set a **100%** fee charged, meaning no further swap is possible.

The high coverage ratio fee is retained by Wombat and will not be included as part of the total assets for accounting purposes to maintain r ∗ = 1.

Note that the coverage ratio depends on the number of tokens in a single pool. The more tokens are in, the higher the start and end coverage ratio.

### Current Coverage Ratio Limit&#x20;

| Pool   | Start Coverage Ratio | End Coverage Ratio |
| ------ | -------------------- | ------------------ |
| HAY    | 1.2                  | 1.5                |
| FRAX   | 1.5                  | 1.8                |
| frxETH | 1.2                  | 1.5                |
| wmxWOM | 2                    | 2.5                |
| mWOM   | 2                    | 2.5                |
| qWOM   | 2                    | 2.5                |

\*Numbers are subject to change


# Pool Configuration

<table><thead><tr><th width="318">Pools</th><th>Amplification factor</th></tr></thead><tbody><tr><td>Main</td><td>0.00025</td></tr><tr><td>Stable/pegged assets</td><td>0.00125</td></tr><tr><td>LSDs</td><td>0.002</td></tr></tbody></table>


# About WOM

## What is WOM?

WOM is Wombat’s governance token and has the following use cases:&#x20;

* **Governance**: WOM token holders can participate and vote on governance decisions.&#x20;
* **Liquidity Incentives**: Users can earn WOM tokens as rewards by providing liquidity with stablecoins to the liquidity pool.&#x20;
* **Boosting**: Users can earn additional WOM from the Boosting Pool by locking WOM tokens. The Boosting Pool incorporates voting escrow WOM ([veWOM](/tokenomics/about-wom/vewom)) for rewards accrual. Locking any amount of WOM applies a boost to all stablecoin pools.

## Tokenomics

<figure><img src="/files/23vDU2017Q9TQxrmEaT7" alt=""><figcaption></figcaption></figure>

$WOM officially launched on the 30th of August 2022, with the total supply of 1,000,000,000 tokens. The circulating supply can be found on [CoinMarketCap](https://coinmarketcap.com/currencies/wombat-exchange/) or our [analytics](https://info.wombat.exchange/#/) page.

| Name               | Native Chain | Contract Address                           |
| ------------------ | ------------ | ------------------------------------------ |
| Wombat Token (WOM) | BNB Chain    | 0xad6742a35fb341a9cc6ad674738dd8da98b94fb1 |
|                    | Arbitrum     | 0x7b5eb3940021ec0e8e463d5dbb4b7b09a89ddf96 |
|                    | Ethereum     | 0xc0B314a8c08637685Fc3daFC477b92028c540CFB |
|                    | Scroll       | Coming soon                                |
|                    | Avalanche    | 0xa15E4544D141aa98C4581a1EA10Eb9048c3b3382 |
|                    | Base         | 0xD9541B08B375D58ae104EC247d7443D2D7235D64 |
|                    | OP           | 0xD2612B256F6f76feA8C6fbca0BF3166D0d13a668 |
|                    | Polygon      | 0x77749d37A87BFf80060c00152B213F61341A6de5 |
|                    | Klaytn       | 0x13a3692f78ace837db60ee0889ae1fc2c9731994 |

### Distribution & Vesting

<table><thead><tr><th width="182.33333333333337">Allocation</th><th width="123.70496293474378">Token Amount</th><th width="123">Percentage </th><th>Lock-up period</th></tr></thead><tbody><tr><td>Private Sale</td><td>75.0M</td><td>7.5%</td><td>2.5% initial unlock, cliff for 3 months, afterwards monthly linear vesting over 24 months.</td></tr><tr><td>Strategic Sale</td><td>30.0M</td><td>3.0%</td><td>2.5% initial unlock, cliff for 3 months, afterwards monthly linear vesting over 24 months.</td></tr><tr><td>PancakeSwap IFO</td><td>28.0M</td><td>2.8%</td><td>20% initial unlock, block-by-block linear vesting over 3 months.</td></tr><tr><td>Syrup Pools</td><td>6.0M</td><td>0.6%</td><td>0% initial unlock, block-by-block linear vesting over 2 months.</td></tr><tr><td>Binance Seed</td><td>50.0M</td><td>5.0%</td><td>0% initial unlock, vesting every 6 months over 5 years.</td></tr><tr><td>Binance Partnership</td><td>150.0M</td><td>15.0%</td><td>0% initial unlock, vesting every 6 months over 5 years.</td></tr><tr><td>Team</td><td>200.0M</td><td>20.0%</td><td>0% initial unlock, vesting every 6 months over 5 years.</td></tr><tr><td>Liquidity Incentive</td><td>200.0M</td><td>20.0%</td><td>2% initial unlock, maximum unlock for first 2 months is 2% per month, with 1% per month thereafter, though actual deployment of unlocked tokens, depending on market conditions, may be lower.</td></tr><tr><td>Marketing</td><td>1.0M</td><td>0.1%</td><td>50% initial unlock with monthly linear vesting over 3 months.</td></tr><tr><td>Treasury</td><td>260.0M</td><td>26.0%</td><td>1% initial unlock, weekly linear vesting over 36 months.</td></tr><tr><td><strong>Total</strong></td><td><strong>1.00B</strong></td><td></td><td></td></tr></tbody></table>

### Release Schedule

{% embed url="<https://docs.google.com/spreadsheets/d/e/2PACX-1vQiC9SF4nWbQG5sdhdgxGfc08DVlVFaKDAN6x4mdN5DtnC3zTayGFlKeMldRN3ldZ6oKR161M7hmV4u/pubhtml>" %}


# Where To Buy $WOM?

Here are the official locations where you can buy $WOM. Anywhere else, please DYOR and know the risks associated with buying $WOM through unofficial streams.

| Chain     | Platform                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Arbitrum  | <p><a href="https://app.uniswap.org/#/swap?inputCurrency=0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9&#x26;outputCurrency=0x7b5eb3940021ec0e8e463d5dbb4b7b09a89ddf96">Uniswap</a></p><p><a href="https://app.camelot.exchange/?token2=0x7B5EB3940021Ec0e8e463D5dBB4B7B09a89DDF96">Camelot</a></p><p><a href="https://traderjoexyz.com/arbitrum/trade?inputCurrency=0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9&#x26;outputCurrency=0x7b5eb3940021ec0e8e463d5dbb4b7b09a89ddf96">TraderJoe</a></p> |
| Avalanche | [TraderJoe](https://traderjoexyz.com/avalanche/pool/v1/0xa15e4544d141aa98c4581a1ea10eb9048c3b3382/AVAX)                                                                                                                                                                                                                                                                                                                                                                                       |
| BNB Chain | [PancakeSwap](https://pancakeswap.finance/swap?chain=bsc\&inputCurrency=0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56\&outputCurrency=0xAD6742A35fB341A9Cc6ad674738Dd8da98b94Fb1)                                                                                                                                                                                                                                                                                                                |
| Ethereum  | [PancakeSwap](https://pancakeswap.finance/swap?chain=eth\&inputCurrency=0xdAC17F958D2ee523a2206206994597C13D831ec7\&outputCurrency=0xc0B314a8c08637685Fc3daFC477b92028c540CFB)                                                                                                                                                                                                                                                                                                                |


# veWOM

veWOM is vote escrowed WOM. Users can lock WOM for between **7 days and 4 years** to mint veWOM. The longer you lock, the more veWOM you get for the same amount of WOM.

$$
veWOM=LockedWOM*0.02616*t^{1/2}
$$

$$t$$ = number of days

You can earn additional WOM from the Boosted Pool by locking WOM tokens to get veWOM. It was created to incentivize token purchases, encourage long-term investing, and develop a strong TVL linked to lock boosting.

Learn more about it in the below section:

{% content-ref url="/pages/Y0NJlRGzgzoGH9KlkNDs" %}
[Yield Boosting](/getting-started/yield-boosting)
{% endcontent-ref %}


# Whitepapers

[Wombat Whitepaper](https://www.wombat.exchange/Wombat_Whitepaper_Public.pdf)

[Wombat Side Pool and Dynamic Pool Whitepaper](https://www.wombat.exchange/Wombat_Whitepaper_SidePool.pdf)

[Wombat Cross Chain AMM Litepaper](https://www.wombat.exchange/Wombat_Cross_Chain_AMM.pdf)

[Wombat Volatile Pool AMM Whitepaper](https://www.wombat.exchange/Wombat_Whitepaper_VolatilePoolAMM.pdf)

[Wombat Bribe Market 2.0 Litepaper](https://www.wombat.exchange/Wombat_Bribe_Market_2_0.pdf)


# Security Audits

[Hacken Audit](https://hacken.io/audits/#wombat_exchange)

[Zokyo Audit](https://www.wombat.exchange/zokyo_wombat_audit_report.pdf)

[Peckshield Audit](https://github.com/peckshield/publications/blob/master/audit_reports/PeckShield-Audit-Report-Wombat-v1.0.pdf)

[Peckshield Audit - V2](https://github.com/peckshield/publications/tree/master/audit_reports/PeckShield-Audit-Report-WombatV2-v1.0.pdf)

[Peckshield Audit - V3](https://github.com/peckshield/publications/blob/master/audit_reports/PeckShield-Audit-Report-WombatV3-v1.1.pdf)

[Peckshield Audit - V4](https://github.com/peckshield/publications/tree/master/audit_reports/PeckShield-Audit-Report-WombatV4-v1.0.pdf)

Cross chain swap:

[Slowmist Audit](https://github.com/slowmist/Knowledge-Base/blob/master/open-report-V2/smart-contract/SlowMist%20Audit%20Report%20-%20WombatExchange_en-us.pdf)

[Zokyo Audit ](https://github.com/wombat-exchange/v1-core/blob/master/audits/zokyo/2023-Sep-Wombat_audit_report.pdf)


# Brand Assets

We welcome everyone to use Wombat Exchange brand assets in their creative works and material. Unleash your creativity and surprise us!

[`Jump to download`](#download-brand-assets)[`👇`](#download-brand-assets)

## A few reminders...

As much as we believe in decentralization and freedom of creativity, protecting the brand of Wombat Exchange is essential to ensure our users' security, allowing them to understand the authenticity of our brand. Be sure to read these before you use our brand assets:

* **Never** use it in your product's name, logo, NFTs, or more
* **Never** use it to create digital or physical products for sale, including but not limited to Merchandise (e.g., T-Shirts, Cap, Mug, etc.) and NFTs&#x20;
* **Never** use it to imply an official endorsement&#x20;
  * Use case reference:
  * A group named "Wombat Exchange Japanese" ❎
  * A group named "Wombat Exchange Fan Group - Japanese" ✅
* **Never** change or adapt our brand assets in any way

## Download Brand Assets&#x20;

By downloading these files, you confirm that you will only use them to the extent permitted by the terms detailed on this page.

<mark style="background-color:yellow;">**Click**</mark> [<mark style="background-color:yellow;">**here**</mark>](https://branch-path-b99.notion.site/Wombat-Exchange-Media-Kit-dbff3e7b3a664fe5ac0fb8c5dfa38808) <mark style="background-color:yellow;">**to access Wombat Exchange Media Kit.**</mark>

{% hint style="info" %}
Above shares a small collection of our official brand assets. Feel free to drop us a message on our [Discord](https://discord.com/invite/DjQKaRwmVb) or [Telegram](https://t.me/WombatExchange) for any other graphics or alternative sizes. 😉                                                                                                                                                                                                                                                                                                    &#x20;
{% endhint %}


# Links

### **Official Website**

{% embed url="<https://wombat.exchange>" %}

App: <https://app.wombat.exchange>

### **🐦 Twitter**

**Official Account**

* Global: <https://twitter.com/WombatExchange>
* 中文: <https://twitter.com/WombatZH>
* Türkiye: <https://twitter.com/WombatTr>

**Our team**

* Founder - Alex Lee: <https://twitter.com/definidude>
* Smart Contract Lead - saway: <https://twitter.com/0xSpiritedAWay>
* Wombat Intern: <https://twitter.com/WombatIntern>

### **📚 Medium**

{% embed url="<https://medium.com/wombat-exchange>" %}

### 👯‍♀️ Telegram

{% hint style="danger" %}
Admins will NEVER ask for your personal information and wallet passwords; beware of scams in private messages with fake giveaways, deals, and bounties. If unsure of the message's authenticity, don't hesitate to contact admins for verification.
{% endhint %}

* 📣 Announcement: <https://t.me/WombatExchangeNews>
* 🌏 Official group: <https://t.me/WombatExchange>
* 💹 Trading/Price Chat Group: <https://t.me/WombatExchange_Trading>
* 🐼 中文: <https://t.me/WombatExchangeZH>
* 🇹🇷 Türkiye: <https://t.me/WombatExchangeTR>
* 🇻🇳 Việt Nam: <https://t.me/wombatexchangeVN>
* 🇵🇭 Filipino: <https://t.me/WombatExchangePH>
* 🇮🇩 Indonesia: <https://t.me/WombatExchangeID>
* 🇮🇳 India: <https://t.me/WombatExchangeIN>
* 🇷🇺 Russian: <https://t.me/Wombat_exchange_ru>
* 🇪🇸 Espanol: <https://t.me/WombatExchangeES>
* 🇵🇱 Polish: <https://t.me/WombatExchangePL>

### **👾 Discord**

{% embed url="<https://discord.gg/Wombat>" %}

### **📹 YouTube**

{% embed url="<https://www.youtube.com/channel/UCsF_UBxVLzw6GRMc3gV5Jzw>" %}

### Other Links

* CoinMarketCap: <https://coinmarketcap.com/currencies/wombat-exchange>
* CoinGecko: <https://www.coingecko.com/en/coins/wombat-exchange>
* DefiLlama: <https://defillama.com/protocol/wombat-exchange>
* DappRadar: <https://dappradar.com/binance-smart-chain/defi/wombat-exchange>


# Community Resources

## Introduction & Guide

* [项目发掘：Wombat Exchange的稳定币布局](https://mirror.xyz/0xc07684F299A9eA0E1616EF7a1d13Aeb3aCCF7e7d/0dzsVV70j1DwPgzC3CPm58Sd3eAnZjpETUyAdQ1pywE) - Contributed by [@CryptoUncle2077](https://twitter.com/CryptoUncle2077)
* [Wombat-创新型的稳定币兑换交易协议](https://www.defi.to/cn/wombat-stablecoin-dex/) - Contributed by [小龙](https://www.defi.to/cn/author/xiaolong/)
* [即将登陆Pancake IFO，一文速览稳定币兑换协议Wombat Exchange](https://sleepintherain.substack.com/p/pancake-ifowombat-exchange) - Contributed by 雨中狂睡
* [Wombat Exchange là gì? Đọc hiểu dự án trong 5 phút ](https://coinviet.net/wombat-exchange-la-gi-14986.html)- Contributed by Coinviet Insights
* [A new strategic move by Binance: Wombat Exchange](https://mirror.xyz/0xed111Cf8C23AEafe12286Fd60EE670007457Bf87/cijbPgnw51eW384o0iiLd4s6PH5Cq1u_Dcjc4c6mWtU) - Contributed by [ResearchDAO](https://twitter.com/RealResearchDAO)

## Statistics

* [Wombat Wars - Magpie, Wombex, Quoll #WOMWars Dune Dashboard](https://dune.com/David_C/wombat-wars) - Contributed by @David\_C

{% hint style="info" %}
**Note**: All materials listed above are created by the community. Please refer to our medium and documentation for an official explanation, feel free to reach out to our community if you are in doubt!
{% endhint %}


# Bug Bounty

Join our bug bounty program with Immunefi!

## Rewards

Rewards are distributed according to the impact of the vulnerability based on the [Immunefi Vulnerability Severity Classification System V2.1](https://immunefi.com/immunefi-vulnerability-severity-classification-system-v2-1/). This is a simplified 5-level scale, with separate scales for websites/apps, smart contracts, and blockchains/DLTs, focusing on the impact of the vulnerability reported.

All web/app and all Critical severity smart contract bug reports must come with a PoC with an end-effect impacting an asset-in-scope to be considered for a reward. Explanations and statements are not accepted as PoC, and code is required.&#x20;

All issues previously highlighted in the following audit reports are considered out of scope:&#x20;

{% content-ref url="/pages/6EhYZxPf50azeYX59gH8" %}
[Security](/getting-started/security)
{% endcontent-ref %}

Rewards for critical smart contract vulnerabilities are further capped at 10% of economic damage. The primary consideration is the funds affected, in addition to PR and brand considerations, at the team's discretion. However, a maximum reward of USD 100,000 is for Critical smart contract bug reports.

Critical website and application bug reports will be rewarded with **USD 10,000** only if the impact leads to a direct loss in funds. All other effects classified as Critical would be rewarded no more than **USD 2,000**.

Payouts are handled by the Wombat Exchange team directly and are denominated in USD. However, payouts are done in **USDC** or **USDT** at the team's discretion.

## Reporting

Please submit your bug reports [here](<https://immunefi.com/bounty/wombatexchange/ >)!

To prevent any attack on Wombat, kindly allow us ample time to fix the problem before publishing your findings publicly. If you do that, it may lead to your rewards being rescinded.

## Assets in Scope

<table><thead><tr><th width="260.44847493144135">Target</th><th>Type</th></tr></thead><tbody><tr><td><a href="https://bscscan.com/address/0x312bc7eaaf93f1c60dc5afc115fccde161055fb0 
">https://bscscan.com/address/0x312bc7eaaf93f1c60dc5afc115fccde161055fb0 </a></td><td>Smart Contract - Pool</td></tr><tr><td><a href="https://bscscan.com/address/0xF319947eCe3823b790dd87b0A509396fE325745a ">https://bscscan.com/address/0xF319947eCe3823b790dd87b0A509396fE325745a </a></td><td>Smart Contract - LP-BUSD</td></tr><tr><td><a href="https://bscscan.com/address/0xb43Ee2863370a56D3b7743EDCd8407259100b8e2 
">https://bscscan.com/address/0xb43Ee2863370a56D3b7743EDCd8407259100b8e2 </a></td><td>Smart Contract - LP-USDC</td></tr><tr><td><a href="https://bscscan.com/address/0x4F95fE57BEA74b7F642cF9c097311959B9b988F7 
">https://bscscan.com/address/0x4F95fE57BEA74b7F642cF9c097311959B9b988F7 </a></td><td>Smart Contract - LP-USDT</td></tr><tr><td><a href="https://bscscan.com/address/0x9D0a463D5dcB82008e86bF506eb048708a15dd84 
">https://bscscan.com/address/0x9D0a463D5dcB82008e86bF506eb048708a15dd84 </a></td><td>Smart Contract - LP-DAI</td></tr><tr><td><a href="https://www.wombat.exchange/ 

"><https://www.wombat.exchange/> </a></td><td>Web/App</td></tr><tr><td>\<a href="<https://app.wombat.exchange/>

"><https://app.wombat.exchange/> </a></td><td>Web/App</td></tr></tbody></table>

All smart contracts of Wombat Exchange can be found at <https://github.com/wombat-exchange/v1-core>. However, only those in the Assets in Scope table are considered in-scope of the bug bounty program.

If a Critical or High severity impact can be caused to any other asset managed by Wombat Exchange that isn’t on this table but for which the effect is in the Impacts in Scope section below, you are encouraged to submit it for consideration by the project.

## Impacts in Scope

Only the following impacts are accepted within this bug bounty program. All other impacts are not considered in scope, even if they affect something in the assets in the scope table.

### Smart Contracts

#### Critical&#x20;

* Any governance voting result manipulation&#x20;
* Direct theft of any user funds, whether at rest or in motion, other than unclaimed yield&#x20;
* Permanent freezing of funds&#x20;
* Miner-extractable value (MEV)&#x20;
* Protocol Insolvency

#### High&#x20;

* Theft of unclaimed yield&#x20;
* Permanent freezing of unclaimed yield&#x20;
* Temporary freezing of funds for at least 24 hours

#### Medium&#x20;

* Smart contracts are unable to operate due to a lack of token funds&#x20;
* Block stuffing for profit&#x20;
* Griefing (e.g., no profit motive for an attacker but damage to the users or the protocol)&#x20;
* Theft of gas&#x20;
* Unbounded gas consumption

#### Low&#x20;

* Smart contract fails to deliver promised returns but doesn’t lose value

### Web/App

#### Critical&#x20;

* Execute arbitrary system commands&#x20;
* Retrieve sensitive data/files from a running server such as /etc/shadow, database passwords, and blockchain keys(this does not include non-sensitive environment variables, open source code, or usernames)&#x20;
* Taking down the application/website&#x20;
* Taking state-modifying authenticated actions (with or without blockchain state interaction) on behalf of other users without any interaction by that user, such as changing registration information, commenting, voting, making trades, withdrawals, etc. Subdomain takeover with already-connected wallet interaction&#x20;
* Direct theft of user funds&#x20;
* Malicious interactions with an already-connected wallet, such as modifying transaction arguments or parameters, substituting contract addresses, submitting malicious transactions

#### High

* Injecting/modifying the static content on the target application without Javascript (Persistent), such as HTML injection without Javascript, replacing the existing text with arbitrary text, arbitrary file uploads, etc.&#x20;
* Changing sensitive details of other users (including modifying browser local storage) without already-connected wallet interaction and with up to one click of user interaction, such as the email or password of the victim, etc.&#x20;
* Improperly disclosing confidential user information such as email address, phone number, physical address, etc.&#x20;
* Subdomain takeover without already-connected wallet interaction

#### Medium&#x20;

* Changing non-sensitive details of other users (including modifying browser local storage) without already-connected wallet interaction and with up to one click of user interaction, such as changing the first/last name of a user or enabling/disabling notifications&#x20;
* Injecting/modifying the static content on the target application without Javascript (Reflected), such as reflected HTML injection or loading external site data&#x20;
* Redirecting users to malicious websites (Open Redirect)

## Out of Scope & Rules

The following vulnerabilities are excluded from the rewards for this bug bounty program:

* Attacks that the reporter has already exploited themselves, leading to damage&#x20;
* Attacks requiring access to leaked keys/credentials&#x20;
* Attacks requiring access to privileged addresses (governance, strategist)

### Smart Contracts and Blockchain&#x20;

* Incorrect data supplied by third-party oracles&#x20;
  * Not to exclude Oracle manipulation/flash loan attacks&#x20;
* Basic economic governance attacks (e.g., 51% attack)&#x20;
* Lack of liquidity Best practice critiques&#x20;
* Sybil attacks&#x20;
* Centralization risks&#x20;

### Websites and Apps&#x20;

* Theoretical vulnerabilities without any proof or demonstration&#x20;
* Content spoofing / Text injection issues&#x20;
* Self-XSS&#x20;
* Captcha bypass using OCR&#x20;
* CSRF with no security impact (logout CSRF, change language, etc.) Missing HTTP Security Headers (such as X-FRAME-OPTIONS) or cookie security flags (such as “httponly”)&#x20;
* Server-side information disclosure, such as IPs, server names, and most stack traces&#x20;
* Vulnerabilities are used to enumerate or confirm the existence of users or tenants.&#x20;
* Vulnerabilities requiring unlikely user actions&#x20;
* URL Redirects (unless combined with another vulnerability to produce a more severe vulnerability)&#x20;
* Lack of SSL/TLS best practices&#x20;
* DDoS vulnerabilities&#x20;
* Attacks requiring privileged access from within the organization&#x20;
* Feature requests&#x20;
* Best practices&#x20;
* Vulnerabilities are primarily caused by browser/plugin defects.&#x20;
* Any vulnerability exploit requiring CSP bypass resulting from a browser bug

This bug bounty program prohibits the following activities:

* Any testing with mainnet or public testnet contracts; all testing should be done on private testnets
* Any testing with pricing oracles or third-party smart contracts&#x20;
* Attempting phishing or other social engineering attacks against our employees and/or customers&#x20;
* Any testing with third-party systems and applications (e.g., browser extensions) as well as websites (e.g., SSO providers, advertising networks)&#x20;
* Any denial of service attacks&#x20;
* Automated testing of services that generate significant amounts of traffic&#x20;
* Public disclosure of an unpatched vulnerability in an embargoed bounty


# Contracts


# BNB Chain

### Pool

<table><thead><tr><th width="193">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Router</td><td>0x19609B03C976CCA288fbDae5c21d4290e9a4aDD7</td></tr><tr><td>CoreV3</td><td>0x2FFf8596A090345784770789414387857F90eCc0</td></tr><tr><td>WormholeAdaptor</td><td>0x191601af39927bA165BF89B238BFbF615bAd205B</td></tr><tr><td><strong>Cross chain Pool</strong></td><td>0x1ee15673e07105Bcf360139fa8CafeBDd7754BeF</td></tr><tr><td>LP-USDC</td><td>0xD55d010C647104E26e86D0cdd62dEB48D487a521</td></tr><tr><td>LP-USDT</td><td>0x93012ad2367E247ca4275270CfC0BbCbf098ABBC</td></tr><tr><td><strong>Main Pool</strong></td><td>0x312Bc7eAAF93f1C60Dc5AfC115FcCDE161055fb0</td></tr><tr><td>LP-BUSD</td><td>0xF319947eCe3823b790dd87b0A509396fE325745a</td></tr><tr><td>LP-USDC</td><td>0xb43Ee2863370a56D3b7743EDCd8407259100b8e2</td></tr><tr><td>LP-USDT</td><td>0x4F95fE57BEA74b7F642cF9c097311959B9b988F7</td></tr><tr><td>LP-DAI</td><td>0x9D0a463D5dcB82008e86bF506eb048708a15dd84</td></tr><tr><td><strong>FRAX Pool</strong></td><td>0x48f6A8a0158031BaF8ce3e45344518f1e69f2A14</td></tr><tr><td>LP-BUSD</td><td>0xcF434949c242C2D32514BA971947bD3700EFB015</td></tr><tr><td>LP-FRAX</td><td>0x47aB513f97e1CC7D7d1a4DB4563F1a0fa5C371EB</td></tr><tr><td>LP-TUSD</td><td>0x3C8e744f6c4Ed2c9D82e33D69DDcC5961Aa05367</td></tr><tr><td><strong>wmxWOM Pool</strong></td><td>0xeEB5a751E0F5231Fc21c7415c4A4c6764f67ce2e</td></tr><tr><td>LP-WOM</td><td>0xF9BdC872D75f76B946E0770f96851b1f2F653caC</td></tr><tr><td>LP-wmxWOM</td><td>0x3C42E4F84573aB8c88c8E479b7dC38A7e678D688</td></tr><tr><td><strong>mWOM Pool</strong></td><td>0x083640c5dBD5a8dDc30100FB09B45901e12f9f55</td></tr><tr><td>LP-WOM</td><td>0xEABa290B154aF45DE72FDf2a40E56349e4E68AC2</td></tr><tr><td>LP-mWOM</td><td>0x1f502fF26dB12F8e41B373f36Dc0ABf2D7F6723E</td></tr><tr><td><strong>qWOM Pool</strong></td><td>0x2c5464b9052319e3d76f8279031f04e4B7fd7955</td></tr><tr><td>LP-WOM</td><td>0xB5c9368545A26b91d5f7340205e5d9559f48Bcf8</td></tr><tr><td>LP-qWOM</td><td>0x87073ba87517E7ca981AaE3636754bCA95C120E4</td></tr><tr><td><strong>BNBx Pool</strong></td><td>0x8df1126de13bcfef999556899F469d64021adBae</td></tr><tr><td>LP-BNBx</td><td>0x16B37225889A038FAD42efdED462821224A509A7</td></tr><tr><td>LP-WBNB</td><td>0x0321D1D769cc1e81Ba21a157992b635363740f86</td></tr><tr><td><strong>stkBNB Pool</strong></td><td>0xB0219A90EF6A24a237bC038f7B7a6eAc5e01edB0</td></tr><tr><td>LP-stkBNB</td><td>0x0E202A0bCad2712d1fdeEB94Ec98C58bEeD0679f</td></tr><tr><td>LP-WBNB</td><td>0x6C7B407411b3DB90DfA25DA4aA66605438D378CE</td></tr><tr><td><strong>frxETH Pool</strong></td><td>0x2Ea772346486972E7690219c190dAdDa40Ac5dA4</td></tr><tr><td>LP-ETH</td><td>0x4d41E9EDe1783b85756D3f5Bd136C50c4Fb8E67E</td></tr><tr><td>LP-frxETH</td><td>0xd67EdEA100AdC2Aa8ae0b5CEe7bF420ee17E5bB9</td></tr><tr><td>LP-sfrxETH</td><td>0xa9a08133af8241e36193b57E4dFE43D147Cd23cC</td></tr><tr><td><strong>iUSD Pool</strong></td><td>0x277E777F7687239B092c8845D4d2cd083a33C903</td></tr><tr><td>LP-iUSD</td><td>0x3A29dF144bB54A8bF3d20357c116befa7adE962d</td></tr><tr><td>LP-BUSD</td><td>0x7Ff1AEc17ea060BBcB7dF6b8723F6Ea7fc905E8F</td></tr><tr><td><strong>axlUSDC Pool</strong></td><td>0x8ad47d7ab304272322513eE63665906b64a49dA2</td></tr><tr><td>LP-axlUSDC</td><td>0x77F645Ee0c6d47380A942B04B8151fD542927391</td></tr><tr><td>LP-BUSD</td><td>0x791b2424df9865994Ad570425278902E2B5D7946</td></tr><tr><td><strong>USDD Pool</strong></td><td>0x05f727876d7C123B9Bb41507251E2Afd81EAD09A</td></tr><tr><td>LP-USDC</td><td>0x9F9CeA30d242d7f5527Fa900f9fb0F77A98FdA82</td></tr><tr><td>LP-USDD</td><td>0x24a70c1489d521F5e2D2612474630eFe7C2ba073</td></tr><tr><td><strong>BOB Pool</strong></td><td>0xeA6cDd9e8819BbF7f8791E7D084d9F0a6Afa7892</td></tr><tr><td>LP-BOB</td><td>0x4968E21be7Bb0ced1bd3859d3dB993ad3a05d2E6</td></tr><tr><td>LP-USDC</td><td>0x6b98d2B6ed0131338C7945Db8588DA43323d1b8C</td></tr><tr><td><strong>Stable Guild Pool</strong></td><td>0x9498563e47D7CFdFa22B818bb8112781036c201C</td></tr><tr><td>LP-USD+</td><td>0x88bEb144352BD3109c79076202Fac2bcEAb87117</td></tr><tr><td>LP-USDT+ </td><td>0xbd459E33307A4ae92fFFCb45C6893084CFC273B1</td></tr><tr><td>LP-USDC</td><td>0x8Df8b50B73849f0433EE3314BD956e624e67b3ce</td></tr><tr><td>LP-CUSD</td><td>0x3ac762C607ed6Dba156cBcF11efF96340e86b490</td></tr><tr><td>LP-HAY</td><td>0xa6eF6C45EbFDBc13f6D032fbDFeC9b389C1603E5</td></tr><tr><td>LP-FRAX</td><td>0x6b60066966080deaB5090d6026CB134591a1cC95</td></tr><tr><td><strong>MIM Pool</strong></td><td>0xb8b1b72a9b9BA90E2539348fEC1Ad6b265F9F684</td></tr><tr><td>LP-MIM</td><td>0xA45C0ABeef67C363364E0e73832df9986aBa3800</td></tr><tr><td>LP-USDT</td><td>0x61e338828ABBdD7bddAd918BB3Cd1F09d4345752</td></tr><tr><td><strong>ankrBNB Pool</strong></td><td>0x6F1c689235580341562cdc3304E923cC8fad5bFa</td></tr><tr><td>LP-ankrBNB</td><td>0xB6D83F199b361403BDa2c44712a77F55E7f8855f</td></tr><tr><td>LP-BNB</td><td>0x0e99fBfD04c255124A168c6Ae68CcE3c7dCC5760</td></tr><tr><td><strong>BNBy Pool</strong></td><td>0xbed9B758A681d73a95Ab4c01309C63aa16297b80</td></tr><tr><td>LP-BNBy</td><td>0x5d64eD5f5121d0A3452ad36D8aeFA554D4060F4a</td></tr><tr><td>LP-BNB</td><td>0x5A65Cb65C601A396e79Ff9e03650Bdc97Ed2dE8B</td></tr><tr><td><strong>wBETH Pool</strong></td><td>0x8b892b6Ea1d0e5B29b719d6Bd6eb9354f1cDE060</td></tr><tr><td>LP-wBETH</td><td>0x975693AFe5bb69088a716E3A7f9BFF77ec51D57F</td></tr><tr><td>LP-ETH</td><td>0x4447DE210475BFa08e5D42271A73D7624c8a5aC6</td></tr><tr><td><strong>ankrETH Pool</strong></td><td>0x1b507b97c89eDE3E40d1b2Ed92972197c6276D35</td></tr><tr><td>LP-ankrETH</td><td>0x128FA2c0708Bd0e357Cd97EadAAfa3bc9608228b</td></tr><tr><td>LP-ETH</td><td>0x90F6F0e11EF071aeCdBbCA5Ef01c2d630f2B5201</td></tr><tr><td><strong>Smart HAY Pool</strong> </td><td>0x0520451B19AD0bb00eD35ef391086A692CFC74B2</td></tr><tr><td>LP-HAY</td><td>0x1fa71DF4b344ffa5755726Ea7a9a56fbbEe0D38b</td></tr><tr><td>LP-USDT</td><td>0x184EB7DDE8c00fad900120235b534AABc1d96F75</td></tr><tr><td>LP-USDC</td><td>0x681124f5BDD9aCDA19d1721063254189903CD685</td></tr><tr><td><strong>SnBNB Pool</strong></td><td>0xF1e604e9A31c3b575f91CF008445B7ce06BF3fef</td></tr><tr><td>LP-SnBNB</td><td>0xaA0811AfF60Fbe2d7D7D0A18F26e584b8C148Ee8</td></tr><tr><td>LP-BNB</td><td>0x5d38a3B0f04F6C6026c24FFa78CcDf421F91df38</td></tr><tr><td><strong>rBNB Pool</strong></td><td>0x0592083B285aa75B9c8BaD2485C6cCCF93cCC348</td></tr><tr><td>LP-rBNB</td><td>0x56177d9F2Cb78422610Ee8263fE9B7231216410c</td></tr><tr><td>LP-BNB</td><td>0xdFDE04743d88B58F36dF1834BC0969DAc9B2A9b3</td></tr><tr><td><strong>USDS Pool</strong></td><td>0x0c735f84BD7EDA8F8176236091AF8068Bb6C41dE</td></tr><tr><td>LP-USDS</td><td>0xAD87CB711ADF067e0D6F0Ed6867bF23C00d930d6</td></tr><tr><td>LP-USDT</td><td>0x082059Fd29672d59CE582176cF2CF6d0da8c9078</td></tr><tr><td><strong>zBNB Pool</strong></td><td>0x9a39f4AB3f52026432835dEe6D3DB721D95f3D28</td></tr><tr><td>LP-zBNB</td><td>0xC7a628028d9c58C634732009A7299F97E0f38e43</td></tr><tr><td>LP-BNB</td><td>0xe0e76388C852208fa3ef2ba6Cd1B44B2eaBa83EC</td></tr><tr><td><strong>zUSD Pool</strong></td><td>0xC26b7Cbe7e695a0d11a8cB96140D1Cd502945A2C</td></tr><tr><td>LP-zUSD</td><td>0x34e1091f0de867094a1164399E399feeFf390b57</td></tr><tr><td>LP-USDC</td><td>0xc74a9d15037886Ea357F0ef243C50010B11133cB</td></tr><tr><td><strong>USDV Pool</strong></td><td>0xC897a2Ae2E45f0D7ba8cbE397208C3e9f8914A9f</td></tr><tr><td>LP-USDV</td><td>0x17AdeD6D50d9f9311cEE5C1746a0284F4d163500</td></tr><tr><td>LP-USDT</td><td>0x591cCb3Bac62f1710d013E090E36Ee760D70EF87</td></tr></tbody></table>

### Wombat Proxy Admin

<table><thead><tr><th width="295">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Default Proxy Admin (Proxy Admin)</td><td>0xa75F185888F1E8d2320e80dCd2e7a4c9A17e013B</td></tr></tbody></table>

### Treasury

<table><thead><tr><th width="299">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Multisig</td><td>0xC37a89CdB064aC2921Fcc8B3538aC0d6a3AaDF48</td></tr></tbody></table>

### Governance

<table><thead><tr><th width="281.33247689258917">Contract</th><th>Address</th></tr></thead><tbody><tr><td>WOM</td><td>0xAD6742A35fB341A9Cc6ad674738Dd8da98b94Fb1</td></tr><tr><td>veWOM Proxy</td><td>0x3DA62816dD31c56D9CdF22C6771ddb892cB5b0Cc</td></tr><tr><td>MasterWombatV3 Proxy</td><td>0x489833311676B566f888119c29bd997Dc6C95830</td></tr><tr><td><del>MasterWombatV2 Proxy</del> (deprecated)</td><td>0xE2C07d20AF0Fb50CAE6cDD615CA44AbaAA31F9c8</td></tr><tr><td>Voter Proxy</td><td>0x04D4e1C1F3D6539071b6D3849fDaED04d48D563d</td></tr><tr><td>Whitelist (for veWOM)</td><td>0xD61C53dcd6F3b4258E28c7Eb1C328789fa71B591</td></tr><tr><td>TimelockController</td><td>0x9f3F1e89831391214fAA57ee7e27667156140655</td></tr></tbody></table>

### Bribes&#x20;

<table><thead><tr><th width="324">Contract</th><th width="463">Address</th></tr></thead><tbody><tr><td>Bribe_HAYPool</td><td>0x6dD7116B2640f4FA7a2AAD3fA6a6126bFA782B0B</td></tr><tr><td>Bribe_FRAX</td><td>0x966c3729366294829911A2fc651DD88378E71C01</td></tr><tr><td>Bribe_BNBx</td><td>0x20d7B9Ed2c4E2DCC55F9B463975b21bBf2A6eCd1</td></tr><tr><td>Bribe_BNBxPool_WBNB</td><td>0x40841197A2ac1fb7d21d4eb9577e6529bd9892a1</td></tr><tr><td>Bribe_stkBNB</td><td>0xC4992f30b4F0398718FE945FFF9f0C273d74afAF</td></tr><tr><td>Bribe_stkBNBPool_WBNB</td><td>0x60ACa4Fd79BA7855771F78fC255539464252e1BD</td></tr><tr><td>Bribe_wmxWOM</td><td>0x08401FDb51D7C53e5A1Ee22186f030354B8880eD</td></tr><tr><td>Bribe_wmxWOMPool_WOM</td><td>0xE2a60C52C4abB9fbc3f711da3cb9E633269DBC67</td></tr><tr><td>Bribe_mWOM</td><td>0x7DC7E908427ab2C737A827cDc8069fF002489649</td></tr><tr><td>Bribe_mWOMPool_WOM</td><td>0x5E5dCBa266AB4c999889421C001b93b899d3092a</td></tr><tr><td>Bribe_qWOM</td><td>0x7F95D391e5F1A4B0a265e40Bf588739BEa2202c4</td></tr><tr><td>Bribe_qWOMPool_WOM</td><td>0xcf2e56E086fcD21eaB3614A5A78c8Ae27c2F0536</td></tr><tr><td>Bribe_ iUSD</td><td>0xF80722121949C4Ae1047D9A3e26D25b71D8de4D2</td></tr><tr><td>Bribe_iUSDPool_BUSD</td><td>0xBD4420e06E39E55ea3e6DE4f3D5b43eb3bEC77de</td></tr><tr><td>Bribe_axlUSDC</td><td>0x27306b37d3C20F8B5297D20715ab173ad47ece80</td></tr><tr><td>Bribe_axlUSDCPool_BUSD</td><td>0x3F9Ec209eBAe56e1401cBa4e064f97a9127E61C8</td></tr><tr><td>Bribe_frxETH_Pool_frxETH</td><td>0xDfba6A2A516AB5d46f60fE61E023C8B371b20f1D</td></tr><tr><td>Bribe_frxETH_Pool_sfrxETH</td><td>0xab7700961aa1adc72a2b32c396eCa4F9ec3aB145</td></tr><tr><td>Bribe_frxETH_Pool_ETH</td><td>0x015542b048C4711c52791346247187B5CcbecE5e</td></tr><tr><td>Bribe_Asset_AnkrBNBPool_WBNB</td><td>0x048DC3bA13406bCC8226CE62385261894F118047</td></tr><tr><td>Bribe_Asset_AnkrBNBPool_ankrBNB</td><td>0x32816B1d037F6b058D3b5c76EEe497F769376DBb</td></tr><tr><td>Bribe_Asset_Mixed_Pool_USD+</td><td>0xd66fE42C6Eb5471a7483354Cf9476bBFEa2e717D</td></tr><tr><td>Bribe_Asset_Mixed_Pool_USDT+</td><td>0x6aA55c9E51Cb2cC39A50f872607d76dc6910e046</td></tr><tr><td>Bribe_Asset_Mixed_Pool_USDC</td><td>0x92e8B58ef7E68A4cb44910390fc85a33B1870dcB</td></tr><tr><td>Bribe_CUSD</td><td>0x52Eb70A364FE86B8286a5E076Be6c8f816B2E3D9</td></tr><tr><td>Bribe_CUSDPool_HAY</td><td>0x861C5005754f26ab955899721b531B3922fE2320</td></tr><tr><td>Bribe_Asset_ankrETH_Pool_ETH</td><td>0xc7a6bA5F28993BaDb566007bD2E0CB253c431974</td></tr><tr><td>Bribe_Asset_ankrETH_Pool_ankrETH</td><td>0x8Dc7B0a98fC1A70e07cb2efEe6e339Bf9FE87B47</td></tr><tr><td>Bribe_Asset_MIM_Pool_MIM</td><td>0x09Da8826fdC3c5211A9B128d1f4Fb61CE86705f9</td></tr><tr><td>Bribe_Asset_MIM_Pool_USDT</td><td>0xACEB589012edbBEe4CE7b4E89B916700B43419CA</td></tr><tr><td>Bribe_Asset_BNBy_Pool_BNBy</td><td>0xc007e84D995e49f68AEA51D7f6E3aDD21b73676f</td></tr><tr><td>Bribe_Asset_BNBy_Pool_WBNB</td><td>0x8779D3887b029F4005a4C5B6aDBC6589bEA301b1</td></tr><tr><td>Bribe_BOBPool_BOB</td><td>0xbeFB02dC4863Bd4B2803c32d75CA5DfeFa6f6091</td></tr><tr><td>Bribe_BOBPool_USDC</td><td>0x25157762a68FA8061fa800Ee3b53C593967A5c9b</td></tr><tr><td>Bribe_Asset_HAY_Pool_HAY</td><td>0xD8e4FD44F43C46427338A9b8c946E7D57AF22c10</td></tr><tr><td>Bribe_Asset_HAY_Pool_USDC</td><td>0x8E926C7792635362ACf425DcB3dCb2bf42167826</td></tr><tr><td>Bribe_Asset_HAY_Pool_USDT</td><td>0xD80356F64c0693BAd4844250527B144cDf382915</td></tr><tr><td>Bribe_Asset_wBETH_Pool_wBETH</td><td>0x2c0D2B8379ff694E47a52AfBd4Fe8F5A14207d86</td></tr><tr><td>Bribe_Asset_wBETH_Pool_ETH</td><td>0xe237531dD203796145B13919B7EBB57886A0c1cB</td></tr><tr><td>Bribe_Asset_ankrETH_Pool_ankrETH</td><td>0x8Dc7B0a98fC1A70e07cb2efEe6e339Bf9FE87B47</td></tr><tr><td>Bribe_Asset_ankrETH_Pool_ETH</td><td>0xc7a6bA5F28993BaDb566007bD2E0CB253c431974</td></tr><tr><td>Bribe_Asset_SnBNB_Pool_SnBNB</td><td>0xeDe96F649Ffc40Ac48A42c2e5971492Be3a48AB3</td></tr><tr><td>Bribe_Asset_SnBNB_Pool_WBNB</td><td>0xC609E287F63B846038263FF49B4eABEA6C99FA14</td></tr><tr><td>Bribe_Asset_rBNB_Pool_rBNB</td><td>0x5Cc2cb13072a674A89643a76b2599D49be24031a</td></tr><tr><td>Bribe_Asset_rBNB_Pool_WBNB</td><td>0xb2a48d11C10Ec506f99388c21441Bd22F4A655bc</td></tr><tr><td>Bribe_Asset_USDS_Pool_USDS</td><td>0x401384D834be6197853682d4138588591d71b804</td></tr><tr><td>Bribe_Asset_USDS_Pool_USDT</td><td>0x299642F43D18a88871E63302b032A4fE32143B6b</td></tr><tr><td>Bribe_Asset_zUSD_Pool_zUSD</td><td>0x4cbDC43b026d1237BD8A59006f95f80C081e451F</td></tr><tr><td>Bribe_Asset_zUSD_Pool_USDC</td><td>0x919a702d779EB98e3565470190c9Ca0a0F069c71</td></tr><tr><td>Bribe_Asset_zBNB_Pool_zBNB</td><td>0x3f2e97cAfB38B4b194660E0Fc12B32f34805C05D</td></tr><tr><td>Bribe_Asset_zBNB_Pool_BNB</td><td>0x407C0F689bf4096c5Cda132b4A25144793a1810e</td></tr></tbody></table>

### Wombat Rewarders

<table><thead><tr><th width="307">Contract</th><th>Address</th></tr></thead><tbody><tr><td>MultiRewarderPerSec_V3_BNBx</td><td>0xe4fD5D5C4D058c2323a35FbB720897EEeB6C76Bd</td></tr><tr><td>MultiRewarderPerSec_V3_HAY</td><td>0x7903289B0122f3F4E0fF532D1D8A300D19bFd46f</td></tr><tr><td>MultiRewarderPerSec_V3_mWOM</td><td>0x04299f69b567c6C8dC49162138E0ba32cD15ffA4</td></tr><tr><td>MultiRewarderPerSec_V3_mWOMPool_WOM</td><td>0x624BE60CC68Dd7Fc2e3f9f28cC7ef58c5bEB1e26</td></tr><tr><td>MultiRewarderPerSec_V3_qWOM</td><td>0x06228b709Ed3c8344ae61e64b48204174d2e48B5</td></tr><tr><td>MultiRewarderPerSec_V3_qWOMPool_WOM</td><td>0x75Eaa804518a66196946598317Aed57Ef86235Fe</td></tr><tr><td>MultiRewarderPerSec_V3_wmxWom</td><td>0x71E41ca23115545682B12900AfC8c5130e03E623</td></tr><tr><td>MultiRewarderPerSec_V3_wmxWOMPool_WOM</td><td>0xa12BA2d89a16f57C4b714b03C7951c41c7695502</td></tr><tr><td>MultiRewarderPerSec_V2_BUSD</td><td>0x6521a549834F5E6d253CD2e5F4fbe4048f86cd7b</td></tr><tr><td>MultiRewarderPerSec_V2_HAY</td><td>0xC9bFC3eFeFe4CF96877009F75a61F5c1937e5d1a</td></tr><tr><td>MultiRewarderPerSec_mWOM</td><td>0xd29b3e305cF76e2076c7aACf018fa5D85510Ca01</td></tr><tr><td>MultiRewarderPerSec_mWOMPool_WOM</td><td>0x7A8faab51ca17C181F1516Ce46a716e47cc6e38e</td></tr><tr><td>MultiRewarderPerSec_qWOM</td><td>0xc7Fbef047e25257043Afc1bB9bC3894a47cFCd6c</td></tr><tr><td>MultiRewarderPerSec_qWOMPool_WOM</td><td>0x5D0f17F6385B3C0d1d8Ac4a6CcCacA2A558408e6</td></tr></tbody></table>

### Deprecated Pool

| Contract           | Address                                    |
| ------------------ | ------------------------------------------ |
| Side\_Pool\_BUSD   | 0xA649Be04619a8F3B3475498E1ac15C90C9661C1A |
| TUSD\_Pool\_TUSD   | 0x3C8e744f6c4Ed2c9D82e33D69DDcC5961Aa05367 |
| frxETH\_Pool\_WETH | 0xb268c3181921747379271B9BFfCE8B16311656e3 |
| HAY\_Pool\_HAY     | 0xa393D61fE1532257B69b753aF7d1EfB0e22f1A6E |


# Ethereum

### Pool

<table><thead><tr><th width="193">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Router</td><td>0x6BB82A9b0b9b9716B885baeEfDBE47b685a0F919</td></tr><tr><td>CoreV3</td><td>0xe7e02cbDA65B876fBaEf5F129D815e6dD06F9Cb0</td></tr><tr><td>Wormhole Adaptor</td><td>0xACEB589012edbBEe4CE7b4E89B916700B43419CA</td></tr><tr><td><strong>Cross Chain Pool</strong></td><td>0xA45C0ABeef67C363364E0e73832df9986aBa3800</td></tr><tr><td>LP-USDC</td><td>0x6966553568634F4225330D559a8783DE7649C7D3</td></tr><tr><td>LP-USDT</td><td>0x752945079a0446AA7efB6e9E1789751cDD601c95</td></tr><tr><td><strong>FRAX Pool</strong></td><td>0x9c02eaf31EFE3FeE36ebE5AEBCa12Ca979dF25cC</td></tr><tr><td>LP-FRAX</td><td>0x04D4e1C1F3D6539071b6D3849fDaED04d48D563d</td></tr><tr><td>LP-USDT</td><td>0x62A83C6791A3d7950D823BB71a38e47252b6b6F4</td></tr><tr><td><strong>agEUR Pool</strong></td><td>0x0020A8890e723CD94660A5404C4BCCBB91680db6</td></tr><tr><td>LP-agEUR</td><td>0x3f90a5a47364c0467031fB00246192d40E3D2D9D</td></tr><tr><td>LP-EURe</td><td>0x5dacE27D0b921b177Cd9C6706c6ACDeb3EC7bEa7</td></tr><tr><td><strong>frxETH Pool</strong></td><td>0x3161f40EA6c0C4cC8b2433d6D530EF255816E854</td></tr><tr><td>LP-WETH</td><td>0xC096FF2606152eD2A06dd12F15A3c0466Aa5A9fa</td></tr><tr><td>LP-frxETH</td><td>0x724515010904518eCF638Cc6d693046B82548068</td></tr><tr><td>LP-sfrxETH</td><td>0x51E073D92b0c226F7B0065909440b18A85769606</td></tr><tr><td><strong>wstETH Pool</strong></td><td>0xF8E32cA46AC28799c8FB7DCe1Ac11A4541160734</td></tr><tr><td>LP-wstETH</td><td>0xa12BA2d89a16f57C4b714b03C7951c41c7695502</td></tr><tr><td>LP-WETH</td><td>0x94019D0fCc9699909E5b59727505E56252760524</td></tr><tr><td><strong>ETHx Pool</strong></td><td>0x647CC8816C2d60A5fF4d1ffeF27a5b3637d5ac81</td></tr><tr><td>LP-ETHx</td><td>0x25C9dd8a3774EF7C918cd28ff59cF9e29504C914</td></tr><tr><td>LP-WETH</td><td>0x75Eaa804518a66196946598317Aed57Ef86235Fe</td></tr><tr><td><strong>USDV Pool</strong></td><td>0x05A33c0eaf81367Ce953d2dCd4ea1BE8758f4D32</td></tr><tr><td>LP-USDV</td><td>0x4dFa92842d05a790252A7f374323b9C86D7b7E12</td></tr><tr><td>LP-USDT</td><td>0x7bB67CfE4134d4c485659ff7769EC98d1C1DCdba</td></tr></tbody></table>

### Wombat Proxy Admin

<table><thead><tr><th width="295">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Default Proxy Admin (Proxy Admin)</td><td>0xc6bc781E20f9323012F6e422bdf552Ff06bA6CD1</td></tr></tbody></table>

### Treasury

<table><thead><tr><th width="212">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Multisig</td><td>0x5781b4fe4fAdB61ea2483eEDD9498388F9b353b1</td></tr></tbody></table>

### Governance

<table><thead><tr><th width="281.33247689258917">Contract</th><th>Address</th></tr></thead><tbody><tr><td>WOM</td><td>0xc0B314a8c08637685Fc3daFC477b92028c540CFB</td></tr><tr><td>veWOM</td><td>0xEF0B4d9Dba6ea82B59437Fe5E37b16A2896aAF94</td></tr><tr><td>Voter</td><td>0x32A936CbA2629619b46684cDf923CB556f09442c</td></tr><tr><td>MasterWombatV3 Proxy</td><td>0xC9bFC3eFeFe4CF96877009F75a61F5c1937e5d1a</td></tr></tbody></table>

### Wombat Rewarders

| Contract                                              | Address                                    |
| ----------------------------------------------------- | ------------------------------------------ |
| MultiRewarderPerSec\_V3\_Asset\_ETHx\_Pool\_WETH      | 0x8df1126de13bcfef999556899F469d64021adBae |
| MultiRewarderPerSec\_V3\_Asset\_ETHx\_Pool\_ETHx      | 0xc693F3b22d44C43371726AE1D3FBf0Cd0D113c82 |
| MultiRewarderPerSec\_V3\_Asset\_agEUR\_Pool\_EURe     | 0x8843b0Ad6c62d7d672BC91Cb2df7F8D62C345EFb |
| MultiRewarderPerSec\_V3\_Asset\_agEUR\_Pool\_agEUR    | 0x49db5F5b460f41c0a4cD5751413236BA55523330 |
| MultiRewarderPerSec\_V3\_Asset\_frxETH\_Pool\_WETH    | 0xA0e74F3BabAc535D417983d30647F7648261025a |
| MultiRewarderPerSec\_V3\_Asset\_frxETH\_Pool\_frxETH  | 0x1f0Ae4aa83374ebE9020c18791FDF7Ad8A4b09B2 |
| MultiRewarderPerSec\_V3\_Asset\_frxETH\_Pool\_sfrxETH | 0xE9e88bD4A796C28bCF2826737D4bFFEcb81DF733 |
| MultiRewarderPerSec\_V3\_Asset\_wstETH\_Pool\_WETH    | 0x12491142cBE5Da821D9F08327bcbF881aDed89d3 |
| MultiRewarderPerSec\_V3\_Asset\_wstETH\_Pool\_wstETH  | 0xa2cBE329659fFAB7AB70fe90Ac58070e78aD2F40 |


# Scroll

### Pool

<table><thead><tr><th width="193">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Router</td><td>0x010931D4d82ff3F5Ae8bD94e0752570711f78959</td></tr><tr><td>CoreV3</td><td>0x9a59F56F96A780F74167eC911ca59699bfc73bA6</td></tr><tr><td><strong>Cross Chain Pool</strong></td><td>0x80f088ae72DB6d1AC337340cd6Aa0EB1F67337CE</td></tr><tr><td>LP-USDC</td><td>0xE2a60C52C4abB9fbc3f711da3cb9E633269DBC67</td></tr><tr><td>LP-USDT</td><td>0xe43c1695df76CcA4D6079061924D7150Fd553c21</td></tr></tbody></table>

### Wombat Proxy Admin

<table><thead><tr><th width="295">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Default Proxy Admin (Proxy Admin)</td><td>0x20d7B9Ed2c4E2DCC55F9B463975b21bBf2A6eCd1</td></tr></tbody></table>

### Gnosis Safe

<table><thead><tr><th width="295">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Gnosis Multisig</td><td>0xdCC1Ec48909Ec724E8FbD19bb49B388C740732b7</td></tr></tbody></table>


# Avalanche

### Pool

<table><thead><tr><th width="193">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Router</td><td>0x4A88C44B8D9B9f3F2BA4D97236F737CF03DF76CD</td></tr><tr><td>CoreV3</td><td>0xc6bc781E20f9323012F6e422bdf552Ff06bA6CD1</td></tr><tr><td>Wormhole Adaptor</td><td>0x489833311676B566f888119c29bd997Dc6C95830</td></tr><tr><td><strong>Cross Chain Pool</strong></td><td>0xC9bFC3eFeFe4CF96877009F75a61F5c1937e5d1a</td></tr><tr><td>LP-USDC</td><td>0xd05CF2BCaaee3a221E9effF58bF2874b9F11E47b</td></tr><tr><td>LP-USDT</td><td>0x375883a1F801138B6f5EE953a7A11072129Ac624</td></tr><tr><td><strong>sAVAX Pool</strong></td><td>0xE3Abc29B035874a9f6dCDB06f8F20d9975069D87</td></tr><tr><td>LP-WAVAX</td><td>0x29eeB257a2A6eCDE2984aCeDF80A1B687f18eC91</td></tr><tr><td>LP-sAVAX</td><td>0xC096FF2606152eD2A06dd12F15A3c0466Aa5A9fa</td></tr><tr><td><strong>USDV Pool</strong></td><td>0x108c990c93Fa8E3cD88DDb13594D39f09D9B3C02</td></tr><tr><td>LP-USDV</td><td>0x8B2aB4EB32695cB3Fc0D6Ac440dC6b90fE18a09D</td></tr><tr><td>LP-USDT</td><td>0xAB8D5b703edBed5733271d1Af5134e1C667dda0D</td></tr></tbody></table>

### Wombat Proxy Admin

<table><thead><tr><th width="295">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Default Proxy Admin (Proxy Admin)</td><td>0xd673F385624aC80b8Bc0436a566c6030f2C70fb8</td></tr></tbody></table>

### Governance

<table><thead><tr><th width="281.33247689258917">Contract</th><th>Address</th></tr></thead><tbody><tr><td>WOM</td><td>0xa15E4544D141aa98C4581a1EA10Eb9048c3b3382</td></tr><tr><td>MasterWombat Proxy</td><td>0x6521a549834F5E6d253CD2e5F4fbe4048f86cd7b</td></tr></tbody></table>


# Arbitrum

### Pool

<table><thead><tr><th width="208.5">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Router</td><td>0xc4B2F992496376C6127e73F1211450322E580668</td></tr><tr><td>CoreV3</td><td>0xae5E8171707d1eF76208700555a32F572A5ECBdC</td></tr><tr><td>Wormhole Adaptor</td><td>0xdAA1918e5C8Ed59C9889adb171F0ef7a09170211</td></tr><tr><td><strong>Cross Chain Pool</strong></td><td>0xe78876C360716f2225F55A6726B32324FE1B1145</td></tr><tr><td>LP-USDC</td><td>0x9121af8B7Bbdd76dc6f67051c417D007483C6BE2</td></tr><tr><td>LP-USDT</td><td>0x9a24055aF7dc84df05906aCfbf5DE694cd3e975D</td></tr><tr><td><strong>Main Pool</strong></td><td>0xc6bc781E20f9323012F6e422bdf552Ff06bA6CD1</td></tr><tr><td>LP-USDT</td><td>0x85cEBD962861be410a777755dFa06914de6af003</td></tr><tr><td>LP-USDC</td><td>0xE5232c2837204ee66952f365f104C09140FB2E43</td></tr><tr><td>LP-USDC.e</td><td>0x2977b0B54a76c2b56D32cef19f8ea83Cc766cFD9</td></tr><tr><td>LP-DAI</td><td>0x0Fa7b744F18D8E8c3D61B64b110F25CC27E73055</td></tr><tr><td><strong>Overnight Pool</strong></td><td>0xCF20fDA54e37f3fB456930f02fb07FccF49e4849</td></tr><tr><td>LP-USD+</td><td>0xBd7568d25338940ba212e3F299D2cCC138fA35F0</td></tr><tr><td>LP-DAI+</td><td>0x51E073D92b0c226F7B0065909440b18A85769606</td></tr><tr><td>LP-USDC.e</td><td>0x6ADd078996308547C57B052549a19c5f66BF42C8</td></tr><tr><td><strong>MIM Pool</strong></td><td>0x29eeB257a2A6eCDE2984aCeDF80A1B687f18eC91</td></tr><tr><td>LP-MIM</td><td>0x7A8ce23c361a6A93AD8f443a31b20a8617d1A59a</td></tr><tr><td>LP-USDT</td><td>0x4552E884da00BacEB30D86458460C24957e65C1F</td></tr><tr><td><strong>BOB Pool</strong></td><td>0x917caF2b4D6040a9D67A5F8CEfC4F89d1b214c1A</td></tr><tr><td>LP-BOB</td><td>0x06228b709Ed3c8344ae61e64b48204174d2e48B5</td></tr><tr><td>LP-USDC.e</td><td>0x75Eaa804518a66196946598317Aed57Ef86235Fe</td></tr><tr><td><strong>mWOM Pool</strong></td><td>0x90eCddEC4E4116E30769A4e1EA52c319aca338B6</td></tr><tr><td>LP-mWOM</td><td>0xDdDC78F940E012CfC1Ad04DE2Ca089eb94900145</td></tr><tr><td>LP-WOM</td><td>0x59d8DCA660b71Ba97a16f781A40809a0fC350769</td></tr><tr><td><strong>wmxWOM Pool</strong></td><td>0xEE9b42b40852a53c7361F527e638B485D49750cD</td></tr><tr><td>LP-wmxWOM</td><td>0xB9e272ff4BfEf5D18d83bc63b845E83e9df5612B</td></tr><tr><td>LP-WOM</td><td>0xB1Ad5C2573867E8157deD08d065fc761d606C3D9</td></tr><tr><td><strong>qWOM Pool</strong></td><td>0x12Fa5AB079CFf564d599466d39715D35d90Af978</td></tr><tr><td>LP-qWOM</td><td>0xeF9187a5f03b988326a79eBd21569A2319DF2486</td></tr><tr><td>LP-WOM</td><td>0x6B7C9dB425951543aA556b984869C50e6a18C7B2</td></tr><tr><td><strong>frxETH Pool</strong></td><td>0x20D7ee728900848752FA280fAD51aF40c47302f1</td></tr><tr><td>LP-frxETH</td><td>0x6966553568634F4225330D559a8783DE7649C7D3</td></tr><tr><td>LP-sfrxETH</td><td>0x2a20202A6F740200BA188F6D72fa72a08a346Aaa</td></tr><tr><td>LP-WETH</td><td>0xe62880CC6872c9E9Fb1DDd73f400850fdaBE798D</td></tr><tr><td><strong>wstETH Pool</strong></td><td>0xe14302040c0A1eb6fB5A4A79EfA46D60029358d9</td></tr><tr><td>LP-wstETH</td><td>0xEB7e2f8Efac7Ab8079837417b65cD927f05F7465</td></tr><tr><td>LP-ETH</td><td>0x90971596f486521F496dC05fAEb90837a5F19108</td></tr><tr><td><strong>ankrETH Pool</strong></td><td>0xB9bdfE449Da096256Fe7954Ef61A18eE195Db77B</td></tr><tr><td>LP-ankrETH</td><td>0x2290281060F2cE6BB73DcCF9b1735bC366f3f2C4</td></tr><tr><td>LP-ETH</td><td>0x35c462B3396359CAe6c5b40c24e0859B1f1Bc6aC</td></tr><tr><td><strong>FRAX-MAI-USD+ Pool</strong></td><td>0x4a8686df475D4c44324210FFA3Fc1DEA705296e0</td></tr><tr><td>LP-FRAX</td><td>0xf4B72e9a18E4b7C65165E437c57ff6b6202E4505</td></tr><tr><td>LP-MAI</td><td>0x51880CEE87bF2F5ffb1AbC84E20889771b025D0A</td></tr><tr><td>LP-USD+</td><td>0xF9C2356a21B60c0c4DDF2397f828dd158f82a274</td></tr><tr><td>LP-USDC.e</td><td>0x502a88FFCeb9363BEFD1B1c78265FC3ac8ABd3a2</td></tr><tr><td><strong>jUSDC Pool</strong></td><td>0xc7a6bA5F28993BaDb566007bD2E0CB253c431974</td></tr><tr><td>LP-jUSDC</td><td>0xde509fE1555ab907E5C29f987ba0BE1AC0626dAe</td></tr><tr><td>LP-USDC.e</td><td>0x4688300D46eF400C3506a165d5bDCa6A51350978</td></tr><tr><td><strong>fUSDC Pool</strong></td><td>0x956454C7BE9318863297309183C79b793D370401</td></tr><tr><td>LP-fUSDC</td><td>0xc74a9d15037886Ea357F0ef243C50010B11133cB</td></tr><tr><td>LP-USDC.e</td><td>0xB75eD91d1654e586015d72cAbBc8F4B8B9AA0fD9</td></tr><tr><td><strong>mPENDLE Pool</strong></td><td>0xe7159f15e7b1d6045506B228A1ed2136dcc56F48</td></tr><tr><td>LP-mPENDLE</td><td>0x5aD0b68c8544D475ee73ffd4c8dfe7E273b01266</td></tr><tr><td>LP-PENDLE</td><td>0xb4bEb0fDf0163a39D39b175942E7973da2c336Fb</td></tr><tr><td><strong>USDV Pool</strong></td><td>0xa6eF6C45EbFDBc13f6D032fbDFeC9b389C1603E5</td></tr><tr><td>LP-USDV</td><td>0x87800497C0f2b565578A483E6Ea06744F15eD525</td></tr><tr><td>LP-USDT</td><td>0x08C6E91BDF4b7133381a3CC06e497bF14Bd3Fd4D</td></tr><tr><td><strong>FRAX-USDV Pool</strong></td><td>0x3cc8c886575968642Cab9F430261c81C5b044d4b</td></tr><tr><td>LP-FRAX</td><td>0xbCd5E80dAc3925416A8605b158Cac3a2cc1EBd6E</td></tr><tr><td>LP-USDV</td><td>0xbCf4C3AC471686E4bf7Bf2E38b2141eE1A47A661</td></tr></tbody></table>

### Wombat Proxy Admin

<table><thead><tr><th width="295">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Default Proxy Admin (Proxy Admin)</td><td>0xa75F185888F1E8d2320e80dCd2e7a4c9A17e013B</td></tr></tbody></table>

### Treasury

<table><thead><tr><th width="299">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Multisig</td><td>0xC37a89CdB064aC2921Fcc8B3538aC0d6a3AaDF48</td></tr></tbody></table>

### Governance

| Contract              | Address                                    |
| --------------------- | ------------------------------------------ |
| WOM                   | 0x7b5eb3940021ec0e8e463d5dbb4b7b09a89ddf96 |
| veWOM Proxy           | 0x488B34F704a601DAeEf14135146a3dA79F2d3EFC |
| MasterWombatV3 Proxy  | 0x62A83C6791A3d7950D823BB71a38e47252b6b6F4 |
| Voter Proxy           | 0x3f90a5a47364c0467031fB00246192d40E3D2D9D |
| Whitelist (for veWOM) | 0x9A65781bFff8E43E4345D6B1b5157B2657F2735D |

### Bribes&#x20;

| Contract                                  | Address                                    |
| ----------------------------------------- | ------------------------------------------ |
| Bribe\_Asset\_USDPlus\_Pool\_USD+         | 0x8cd967EA785E5C947559C58DD8A8c572EA6980DE |
| Bribe\_Asset\_USDPlus\_Pool\_DAI+         | 0x8b892b6Ea1d0e5B29b719d6Bd6eb9354f1cDE060 |
| Bribe\_Asset\_USDPlus\_Pool\_USDC.e       | 0x1edFA9c9Ae18ccC4525c20F698a13D464515Bf03 |
| Bribe\_Asset\_MIM\_Pool\_MIM              | 0xD58d5E0bB8E669d9F9127CaBb39bAF309aB163BA |
| Bribe\_Asset\_MIM\_Pool\_USDT             | 0xDC82b78423fB816a5fAA4357AF21cFd8Fa419D5f |
| Bribe\_Asset\_BOB\_Pool\_BOB              | 0xe933e227315FeA19A4130F65EFfF7A12F50f762E |
| Bribe\_Asset\_BOB\_Pool\_USDC.e           | 0xA1fdb8D04C2950D163017B990230bD1784692979 |
| Bribe\_Asset\_mWOM\_Pool\_mWOM            | 0x259ccd824d4162f41D8BB52e56B15445a21a33Ee |
| Bribe\_Asset\_mWOM\_Pool\_WOM             | 0x096f99AF43B96e87659668A5f9397FeC724D7B24 |
| Bribe\_Asset\_wmxWOM\_Pool\_wmxWOM        | 0x3324303607b0Fbc2f59E045612eE34C08C7AE41e |
| Bribe\_Asset\_wmxWOM\_Pool\_WOM           | 0x6f70C8832a8661113b935453835f20b0C46ae695 |
| Bribe\_Asset\_qWOM\_Pool\_qWOM            | 0x5A65Cb65C601A396e79Ff9e03650Bdc97Ed2dE8B |
| Bribe\_Asset\_qWOM\_Pool\_WOM             | 0x38169243f4743De770B64acd987d89E8BD58B54C |
| Bribe\_Asset\_frxETH\_Pool\_frxETH        | 0x96412caB79c3A4c5cACD8b6fbFbEa36F4cA3791a |
| Bribe\_Asset\_frxETH\_Pool\_sfrxETH       | 0x765fDA4B8f57587B9A6d525b81a2130679075543 |
| Bribe\_Asset\_frxETH\_Pool\_WETH          | 0x4f7f9B195eAE3Bd3D933fA9708c9B7ADbFb52ac2 |
| Bribe\_Asset\_FRAX-MAI-USD+\_Pool\_FRAX   | 0xe3c747896C76aEE3f4c18F34A36eE58b425B8E17 |
| Bribe\_Asset\_FRAX-MAI-USD+\_Pool\_MAI    | 0x7b604147a84b5968815347c1D73fCDA2235b7C64 |
| Bribe\_Asset\_FRAX-MAI-USD+\_Pool\_USD+   | 0x5Fb5225FeA83440B8f764639D9b6309E56562F54 |
| Bribe\_Asset\_FRAX-MAI-USD+\_Pool\_USDC.e | 0xa9a08133af8241e36193b57E4dFE43D147Cd23cC |
| Bribe\_Asset\_jUSDC\_Pool\_jUSDC          | 0xF760094A46bC456a1e3fd0A00ccf98108f9B35D0 |
| Bribe\_Asset\_jUSDC\_Pool\_USDC.e         | 0x19f477e5864Fec9Cc8f91Fd9F6eD71F6ce13d3b3 |
| Bribe\_Asset\_ankrETH\_Pool\_ankrETH      | 0x9f3F1e89831391214fAA57ee7e27667156140655 |
| Bribe\_Asset\_ankrETH\_Pool\_WETH         | 0x4ce537d187c97B7a5696B38f5de41aA4e57a08BA |
| Bribe\_Asset\_WstETH\_Pool\_wstETH        | 0xcE2bb46e4121819d5Bf77e28480393083738549A |
| Bribe\_Asset\_WstETH\_Pool\_WETH          | 0x8e16b6c0C6121c58733Af331B07F1C2fda7F8561 |

### Wombat Rewarders

| Contract                                         | Address                                    |
| ------------------------------------------------ | ------------------------------------------ |
| MultiRewarderPerSec\_V3\_Asset\_qWOM\_Pool\_qWOM | 0x6001f4726F11155533630cb9936436CdB7631bb9 |
| MultiRewarderPerSec\_V3\_Asset\_qWOM\_Pool\_WOM  | 0xF1dB5B1f92dbe4A34B9FC0CF629E6b013d7dE18d |
| MultiRewarderPerSec\_V3\_Asset\_FRAX\_Pool\_USDC | 0xa9a08133af8241e36193b57E4dFE43D147Cd23cC |


# Optimism

### Pool

<table><thead><tr><th width="193">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Router</td><td>0x35d531Fd45D5E3A5d407A4898360c757C98Bdf79</td></tr><tr><td>CoreV3</td><td>0x1414CD7F8e384B875bFBbabcacAAE592C2B4f8f8</td></tr><tr><td><strong>Cross Chain Pool</strong></td><td>0x50a39b94B1Dc8472faa08c36a3Ef5b0A01c5BD10</td></tr><tr><td>LP-USDC</td><td>0x20D7ee728900848752FA280fAD51aF40c47302f1</td></tr><tr><td>LP-USDT</td><td>0xEE9b42b40852a53c7361F527e638B485D49750cD</td></tr><tr><td><strong>Frax Pool</strong></td><td>0x6BB82A9b0b9b9716B885baeEfDBE47b685a0F919</td></tr><tr><td>LP-FRAX</td><td>0x8F5e6fD62B4385E74E35D2B93034DbBc353B62dE</td></tr><tr><td>LP-USDC</td><td>0x0321D1D769cc1e81Ba21a157992b635363740f86</td></tr><tr><td><strong>USDV Pool</strong></td><td>0x1a023186eF2994249120CC7fAEdBEA07F40C6fbd</td></tr><tr><td>LP-USDV</td><td>0x49db5F5b460f41c0a4cD5751413236BA55523330</td></tr><tr><td>LP-USDT</td><td>0xe933e227315FeA19A4130F65EFfF7A12F50f762E</td></tr><tr><td><strong>Dola Pool</strong></td><td>0x489818F2eeAef737105887710F7C5b9323Ad3d01</td></tr><tr><td>LP-USDCe</td><td>0xE314d3cD7ccFf1bA32abA52E4215fA338D7F9b2C</td></tr><tr><td>LP-DOLA</td><td>0x12491142cBE5Da821D9F08327bcbF881aDed89d3</td></tr><tr><td><strong>frxETH Pool</strong></td><td>0xB86BA65b75D34402bf377cF83b184554a18Fcafa</td></tr><tr><td>LP-frxETH</td><td>0xCaA5A97037a4695D0E96Cb4d564d0Acb24848555</td></tr><tr><td>LP-wETH</td><td>0xEF0B4d9Dba6ea82B59437Fe5E37b16A2896aAF94</td></tr><tr><td>LP-sfrxETH</td><td>0x2bb4Ea0266734Fdaa1d255Db7A2651C27990e29C</td></tr></tbody></table>

### Wombat Proxy Admin

<table><thead><tr><th width="295">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Default Proxy Admin (Proxy Admin)</td><td>0x20d7B9Ed2c4E2DCC55F9B463975b21bBf2A6eCd1</td></tr></tbody></table>


# Base

### Pool

<table><thead><tr><th width="193">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Router</td><td>0x4A88C44B8D9B9f3F2BA4D97236F737CF03DF76CD</td></tr><tr><td>CoreV3</td><td>0xc6bc781E20f9323012F6e422bdf552Ff06bA6CD1</td></tr><tr><td><strong>Cross Chain Pool</strong></td><td>0xC9bFC3eFeFe4CF96877009F75a61F5c1937e5d1a</td></tr><tr><td>LP-USDC</td><td>0xd05CF2BCaaee3a221E9effF58bF2874b9F11E47b</td></tr><tr><td>LP-USDbC</td><td>0x375883a1F801138B6f5EE953a7A11072129Ac624</td></tr><tr><td><strong>USDS Pool</strong></td><td>0x20d7B9Ed2c4E2DCC55F9B463975b21bBf2A6eCd1</td></tr><tr><td>LP-USDS</td><td>0xe07829c8B7F934e03C83B0dC1fd2cCC9b62036D8</td></tr><tr><td>LP-USDbC</td><td>0xE2a60C52C4abB9fbc3f711da3cb9E633269DBC67</td></tr></tbody></table>

### Wombat Proxy Admin

<table><thead><tr><th width="295">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Default Proxy Admin (Proxy Admin)</td><td>0xd673F385624aC80b8Bc0436a566c6030f2C70fb8</td></tr><tr><td>veWOM Proxy</td><td>0x34E2F923bBa206358EcE221af73E8d121837F873</td></tr><tr><td>BoostedMasterWombat Proxy</td><td>0x6521a549834F5E6d253CD2e5F4fbe4048f86cd7b</td></tr></tbody></table>


# Integration Guideline

This page provides a high-level guide on integrating with Wombat on various projects.

### Swap

You will want to use the [`Router`](/developers/integration-guideline/router) contract. To get a quote, use [`getAmountOut`](/developers/integration-guideline/router#function-getamountout). To swap BEP20 tokens, use [`swapExactTokensForTokens`](/developers/integration-guideline/router#function-swapexacttokensfortokens). Each swap in the path will incur a haircut fee, which can differ for each pool.

### Yield Farming

First, [`deposit`](/developers/integration-guideline/pool#function-deposit) your tokens to a [`Pool`](/developers/integration-guideline/pool) (which may trigger a deposit gain). You'll get LP tokens in BEP20 format.

Then, use [`MasterWombat`](/developers/integration-guideline/masterwombatv2)'s [`getAssetPid`](/developers/integration-guideline/masterwombatv2#function-getassetpid) to find the id of the asset. Use the id to [`deposit`](/developers/integration-guideline/masterwombatv2#function-deposit) the LP tokens into MasterWombat. Alternatively, you may set the param `shouldStake` to be true while calling`Pool.deposit` (This feature is experimental. Please use it with caution).

To view a user's position, you may read the value `amount` returned by [MasterWombat.userInfo](/developers/integration-guideline/masterwombatv2#function-userinfo).

After the deposit, you may use [`pendingTokens`](/developers/integration-guideline/masterwombatv2#function-pendingtokens) to check for any pending rewards. Note that there may be more than one reward token. To claim rewards, you can either do a [`deposit`](/developers/integration-guideline/masterwombatv2#function-deposit) (with zero amount), [`withdraw`](/developers/integration-guideline/masterwombatv2#function-withdraw) (with zero amount), or call [`multiClaim`](/developers/integration-guideline/masterwombatv2#function-multiclaim) to claim one or more positions.

The withdrawal flow is similar to the above in reverse.

### veWOM

You may call [VeWom.mint](/developers/integration-guideline/vewom#function-mint) to lock WOM into the contract and mint veWOM with a length of 7 days to 1461 days. Up to 10000 positions could be locked for each user. To view locked positions, call [VeWom.getUserInfo](/developers/integration-guideline/vewom#function-getuserinfo). After the locking period, call [VeWom.burn](/developers/integration-guideline/vewom#function-burn) to burn veWOM and get back locked WOM.

### Questions

Please use our [discord](/resources/links#discord) if you have any questions.


# Pool

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

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 |


# Asset

Contract presenting LP tokens in a pool.

contracts/wombat-core/asset/Asset.sol

> Title: Asset

> Notice: Contract presenting an asset in a pool

> Details: Expect to be owned by Timelock for management, and pool links to Pool for coordination

### *constructor*

***constructor(underlyingToken\_, name\_, symbol\_)***

Arguments

| **name**          | **type** | **description** |
| ----------------- | -------- | --------------- |
| underlyingToken\_ | address  |                 |
| name\_            | string   |                 |
| symbol\_          | string   |                 |

### *event* Approval

\*\*\*Asset.Approval(owner, spender, value) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| owner    | address  | indexed         |
| spender  | address  | indexed         |
| value    | uint256  | not indexed     |

### *event* OwnershipTransferred

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

Arguments

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

### *event* SetMaxSupply

\*\*\*Asset.SetMaxSupply(previousMaxSupply, newMaxSupply) \*\*\*

> Notice: An event thats emitted when max supply is updated

Arguments

| **name**          | **type** | **description** |
| ----------------- | -------- | --------------- |
| previousMaxSupply | uint256  | not indexed     |
| newMaxSupply      | uint256  | not indexed     |

### *event* SetPool

\*\*\*Asset.SetPool(previousPoolAddr, newPoolAddr) \*\*\*

> Notice: An event thats emitted when pool address is updated

Arguments

| **name**         | **type** | **description** |
| ---------------- | -------- | --------------- |
| previousPoolAddr | address  | not indexed     |
| newPoolAddr      | address  | not indexed     |

### *event* Transfer

\*\*\*Asset.Transfer(from, to, value) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| from     | address  | indexed         |
| to       | address  | indexed         |
| value    | uint256  | not indexed     |

### *stateVariable* cash

***Asset.cash() view***

> Notice: Cash balance, normally it should align with IERC20(underlyingToken).balanceOf(address(this))

> Details: 18.18 fixed point decimals

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint120  |                 |

### *stateVariable* liability

***Asset.liability() view***

> Notice: Total liability, equals to the sum of deposit and dividend

> Details: 18.18 fixed point decimals

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint120  |                 |

### *stateVariable* maxSupply

***Asset.maxSupply() view***

> Notice: maxSupply the maximum amount of asset the pool is allowed to mint. The unit is the same as the underlying token

> Details: if 0, means asset has no max

Outputs

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

### *function* DOMAIN\_SEPARATOR

***Asset.DOMAIN\_SEPARATOR() view***

> Details: See {IERC20Permit-DOMAIN\_SEPARATOR}.

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | bytes32  |                 |

### *function* addCash

\*\*\*Asset.addCash(amount) \*\*\*

> Notice: Adds cash, expects actual ERC20 underlyingToken got transferred in. Can only be called by Pool.

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| amount   | uint256  | amount to add   |

### *function* addLiability

\*\*\*Asset.addLiability(amount) \*\*\*

> Notice: Adds deposit or dividend, expect LP underlyingToken minted in case of deposit. Can only be called by Pool.

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| amount   | uint256  | amount to add   |

### *function* allowance

***Asset.allowance(owner, spender) view***

> Details: See {IERC20-allowance}.

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| owner    | address  |                 |
| spender  | address  |                 |

Outputs

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

### *function* approve

\*\*\*Asset.approve(spender, amount) \*\*\*

> Details: See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.

Arguments

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

Outputs

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

### *function* balanceOf

***Asset.balanceOf(account) view***

> Details: See {IERC20-balanceOf}.

Arguments

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

Outputs

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

### *function* burn

\*\*\*Asset.burn(to, amount) \*\*\*

> Notice: Burn ERC20 Asset LP Token, expect pool coordinates other state updates. Can only be called by Pool.

Arguments

| **name** | **type** | **description**            |
| -------- | -------- | -------------------------- |
| to       | address  | address holding the tokens |
| amount   | uint256  | amount to burn             |

### *function* decimals

***Asset.decimals() view***

> Notice: Returns the decimals of Asset, fixed to 18 decimals

Outputs

| **name** | **type** | **description**    |
| -------- | -------- | ------------------ |
|          | uint8    | decimals for asset |

### *function* decreaseAllowance

\*\*\*Asset.decreaseAllowance(spender, subtractedValue) \*\*\*

> Details: Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.

Arguments

| **name**        | **type** | **description** |
| --------------- | -------- | --------------- |
| spender         | address  |                 |
| subtractedValue | uint256  |                 |

Outputs

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

### *function* increaseAllowance

\*\*\*Asset.increaseAllowance(spender, addedValue) \*\*\*

> Details: Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.

Arguments

| **name**   | **type** | **description** |
| ---------- | -------- | --------------- |
| spender    | address  |                 |
| addedValue | uint256  |                 |

Outputs

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

### *function* mint

\*\*\*Asset.mint(to, amount) \*\*\*

> Notice: Mint ERC20 Asset LP Token, expect pool coordinates other state updates. Can only be called by Pool.

Arguments

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

### *function* name

***Asset.name() view***

> Details: Returns the name of the token.

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | string   |                 |

### *function* nonces

***Asset.nonces(owner) view***

> Details: See {IERC20Permit-nonces}.

Arguments

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

Outputs

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

### *function* owner

***Asset.owner() view***

> Details: Returns the address of the current owner.

Outputs

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

### *function* permit

\*\*\*Asset.permit(owner, spender, value, deadline, v, r, s) \*\*\*

> Details: See {IERC20Permit-permit}.

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| owner    | address  |                 |
| spender  | address  |                 |
| value    | uint256  |                 |
| deadline | uint256  |                 |
| v        | uint8    |                 |
| r        | bytes32  |                 |
| s        | bytes32  |                 |

### *function* pool

***Asset.pool() view***

> Notice: The Pool

Outputs

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

### *function* removeCash

\*\*\*Asset.removeCash(amount) \*\*\*

> Notice: Deducts cash, expect actual ERC20 got transferred out (by transferUnderlyingToken()). Can only be called by Pool.

Arguments

| **name** | **type** | **description**  |
| -------- | -------- | ---------------- |
| amount   | uint256  | amount to remove |

### *function* removeLiability

\*\*\*Asset.removeLiability(amount) \*\*\*

> Notice: Removes deposit and dividend earned, expect LP underlyingToken burnt. Can only be called by Pool.

Arguments

| **name** | **type** | **description**  |
| -------- | -------- | ---------------- |
| amount   | uint256  | amount to remove |

### *function* renounceOwnership

\*\*\*Asset.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* setMaxSupply

\*\*\*Asset.setMaxSupply(maxSupply\_) \*\*\*

> Notice: Changes asset max supply. Can only be set by the contract owner. 18 decimals

Arguments

| **name**    | **type** | **description**            |
| ----------- | -------- | -------------------------- |
| maxSupply\_ | uint256  | the new asset's max supply |

### *function* setPool

\*\*\*Asset.setPool(pool\_) \*\*\*

> Notice: TODO: move pool address setup within contract initializationChanges the pool. Can only be set by the contract owner.

Arguments

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

### *function* symbol

***Asset.symbol() view***

> Details: Returns the symbol of the token, usually a shorter version of the name.

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | string   |                 |

### *function* totalSupply

***Asset.totalSupply() view***

> Details: See {IERC20-totalSupply}.

Outputs

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

### *function* transfer

\*\*\*Asset.transfer(recipient, amount) \*\*\*

> Details: See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.

Arguments

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

Outputs

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

### *function* transferFrom

\*\*\*Asset.transferFrom(sender, recipient, amount) \*\*\*

> Details: See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for `sender`'s tokens of at least `amount`.

Arguments

| **name**  | **type** | **description** |
| --------- | -------- | --------------- |
| sender    | address  |                 |
| recipient | address  |                 |
| amount    | uint256  |                 |

Outputs

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

### *function* transferOwnership

\*\*\*Asset.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* transferUnderlyingToken

\*\*\*Asset.transferUnderlyingToken(to, amount) \*\*\*

> Notice: Transfers ERC20 underlyingToken from this contract to another account. Can only be called by Pool.

> Details: Not to be confused with transferring Wombat Assets.

Arguments

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

### *function* underlyingToken

***Asset.underlyingToken() view***

> Notice: The underlying underlyingToken represented by this asset

Outputs

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

### *function* underlyingTokenBalance

***Asset.underlyingTokenBalance() view***

> Notice: Get underlying Token Balance

Outputs

| **name** | **type** | **description**                                     |
| -------- | -------- | --------------------------------------------------- |
|          | uint256  | Returns the actual balance of ERC20 underlyingToken |

### *function* underlyingTokenDecimals

***Asset.underlyingTokenDecimals() view***

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint8    |                 |


# Router

contracts/wombat-core/libraries/WombatRouter.sol

> Title: WombatRouter

> Notice: Allows routing on different wombat pools

> Details: Owner is allowed and required to approve token spending by pools via approveSpendingByPool function. With great thanks to the uniswap team for your contribution to the opensource community reference: <https://github.com/Uniswap/v2-periphery/blob/master/contracts/UniswapV2Router02.sol>

### *constructor*

***constructor(\_wNative)***

Arguments

| **name**  | **type** | **description** |
| --------- | -------- | --------------- |
| \_wNative | address  |                 |

### *event* OwnershipTransferred

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

Arguments

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

### *function* addLiquidityNative

***WombatRouter.addLiquidityNative(pool, minimumLiquidity, to, deadline, shouldStake) payable***

Arguments

| **name**         | **type** | **description** |
| ---------------- | -------- | --------------- |
| pool             | address  |                 |
| minimumLiquidity | uint256  |                 |
| to               | address  |                 |
| deadline         | uint256  |                 |
| shouldStake      | bool     |                 |

Outputs

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

### *function* approveSpendingByPool

\*\*\*WombatRouter.approveSpendingByPool(tokens, pool) \*\*\*

> Notice: approve spending of router tokens by pool

> Details: needs to be done after asset deployment for router to be able to support the tokens

Arguments

| **name** | **type**   | **description**                |
| -------- | ---------- | ------------------------------ |
| tokens   | address\[] | array of tokens to be approved |
| pool     | address    | to be approved to spend        |

### *function* getAmountIn

***WombatRouter.getAmountIn(tokenPath, poolPath, amountOut) view***

> Notice: Returns the minimum input asset amount required to buy the given output asset amount (accounting for fees and slippage) Note: This function should be used as estimation only. The actual swap amount might be different due to precision error (the error is typically under 1e-6)

Arguments

| **name**  | **type**   | **description**     |
| --------- | ---------- | ------------------- |
| tokenPath | address\[] | The token swap path |
| poolPath  | address\[] | The token pool path |
| amountOut | uint256    | The to amount       |

Outputs

| **name** | **type**   | **description**                               |
| -------- | ---------- | --------------------------------------------- |
| amountIn | uint256    | The potential final amount user would receive |
| haircuts | uint256\[] |                                               |

### *function* getAmountOut

***WombatRouter.getAmountOut(tokenPath, poolPath, amountIn) view***

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

Arguments

| **name**  | **type**   | **description**     |
| --------- | ---------- | ------------------- |
| tokenPath | address\[] | The token swap path |
| poolPath  | address\[] | The token pool path |
| amountIn  | int256     | The from amount     |

Outputs

| **name**  | **type**   | **description**                               |
| --------- | ---------- | --------------------------------------------- |
| amountOut | uint256    | The potential final amount user would receive |
| haircuts  | uint256\[] |                                               |

### *function* owner

***WombatRouter.owner() view***

> Details: Returns the address of the current owner.

Outputs

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

### *function* removeLiquidityFromOtherAssetAsNative

\*\*\*WombatRouter.removeLiquidityFromOtherAssetAsNative(pool, fromToken, liquidity, minimumAmount, to, deadline) \*\*\*

Arguments

| **name**      | **type** | **description** |
| ------------- | -------- | --------------- |
| pool          | address  |                 |
| fromToken     | address  |                 |
| liquidity     | uint256  |                 |
| minimumAmount | uint256  |                 |
| to            | address  |                 |
| deadline      | uint256  |                 |

Outputs

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

### *function* removeLiquidityNative

\*\*\*WombatRouter.removeLiquidityNative(pool, liquidity, minimumAmount, to, deadline) \*\*\*

Arguments

| **name**      | **type** | **description** |
| ------------- | -------- | --------------- |
| pool          | address  |                 |
| liquidity     | uint256  |                 |
| minimumAmount | uint256  |                 |
| to            | address  |                 |
| deadline      | uint256  |                 |

Outputs

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

### *function* renounceOwnership

\*\*\*WombatRouter.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* swapExactNativeForTokens

***WombatRouter.swapExactNativeForTokens(tokenPath, poolPath, minimumamountOut, to, deadline) payable***

Arguments

| **name**         | **type**   | **description** |
| ---------------- | ---------- | --------------- |
| tokenPath        | address\[] |                 |
| poolPath         | address\[] |                 |
| minimumamountOut | uint256    |                 |
| to               | address    |                 |
| deadline         | uint256    |                 |

Outputs

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

### *function* swapExactTokensForNative

\*\*\*WombatRouter.swapExactTokensForNative(tokenPath, poolPath, amountIn, minimumamountOut, to, deadline) \*\*\*

Arguments

| **name**         | **type**   | **description** |
| ---------------- | ---------- | --------------- |
| tokenPath        | address\[] |                 |
| poolPath         | address\[] |                 |
| amountIn         | uint256    |                 |
| minimumamountOut | uint256    |                 |
| to               | address    |                 |
| deadline         | uint256    |                 |

Outputs

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

### *function* swapExactTokensForTokens

\*\*\*WombatRouter.swapExactTokensForTokens(tokenPath, poolPath, amountIn, minimumamountOut, to, deadline) \*\*\*

> Notice: Swaps an exact amount of input tokens for as many output tokens as possible, along the route determined by the path

Arguments

| **name**         | **type**   | **description**                                                                         |
| ---------------- | ---------- | --------------------------------------------------------------------------------------- |
| tokenPath        | address\[] | The first element of the path is the input token, the last element is the output token. |
| poolPath         | address\[] | An array of pool addresses. The pools where the pathTokens are contained in order.      |
| amountIn         | uint256    | the amount in                                                                           |
| minimumamountOut | uint256    | the minimum amount to get for user                                                      |
| to               | address    | the user to send the tokens to                                                          |
| deadline         | uint256    | the deadline to respect                                                                 |

Outputs

| **name**  | **type** | **description**  |
| --------- | -------- | ---------------- |
| amountOut | uint256  | received by user |

### *function* transferOwnership

\*\*\*WombatRouter.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* wNative

***WombatRouter.wNative() view***

Outputs

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


# MasterWombatV2

contracts/wombat-governance/MasterWombatV2.sol

> Title: MasterWombatV2

> Notice: MasterWombat is a boss. He is not afraid of any snakes. In fact, he drinks their venoms. So, veWom holders boost their (boosted) emissions. This contract rewards users in function of their amount of lp staked (base pool) factor (boosted pool) Factor and sumOfFactors are updated by contract VeWom.sol after any veWom minting/burning (veERC20Upgradeable hook). Note that it's ownable and the owner wields tremendous power. The ownership will be transferred to a governance smart contract once Wombat is sufficiently distributed and the community can show to govern itself.

> Details: Updates: - pack struct - move pendingWom into UserInfo - use MultiRewarderPerSec

### *event* Add

\*\*\*MasterWombatV2.Add(pid, allocPoint, lpToken, rewarder) \*\*\*

Arguments

| **name**   | **type** | **description** |
| ---------- | -------- | --------------- |
| pid        | uint256  | indexed         |
| allocPoint | uint256  | not indexed     |
| lpToken    | address  | indexed         |
| rewarder   | address  | indexed         |

### *event* Deposit

\*\*\*MasterWombatV2.Deposit(user, pid, amount) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| user     | address  | indexed         |
| pid      | uint256  | indexed         |
| amount   | uint256  | not indexed     |

### *event* DepositFor

\*\*\*MasterWombatV2.DepositFor(user, pid, amount) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| user     | address  | indexed         |
| pid      | uint256  | indexed         |
| amount   | uint256  | not indexed     |

### *event* EmergencyWithdraw

\*\*\*MasterWombatV2.EmergencyWithdraw(user, pid, amount) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| user     | address  | indexed         |
| pid      | uint256  | indexed         |
| amount   | uint256  | not indexed     |

### *event* EmergencyWomWithdraw

\*\*\*MasterWombatV2.EmergencyWomWithdraw(owner, balance) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| owner    | address  | not indexed     |
| balance  | uint256  | not indexed     |

### *event* Harvest

\*\*\*MasterWombatV2.Harvest(user, pid, amount) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| user     | address  | indexed         |
| pid      | uint256  | indexed         |
| amount   | uint256  | not indexed     |

### *event* OwnershipTransferred

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

Arguments

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

### *event* Paused

\*\*\*MasterWombatV2.Paused(account) \*\*\*

Arguments

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

### *event* Set

\*\*\*MasterWombatV2.Set(pid, allocPoint, rewarder, overwrite) \*\*\*

Arguments

| **name**   | **type** | **description** |
| ---------- | -------- | --------------- |
| pid        | uint256  | indexed         |
| allocPoint | uint256  | not indexed     |
| rewarder   | address  | indexed         |
| overwrite  | bool     | not indexed     |

### *event* Unpaused

\*\*\*MasterWombatV2.Unpaused(account) \*\*\*

Arguments

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

### *event* UpdateEmissionPartition

\*\*\*MasterWombatV2.UpdateEmissionPartition(user, basePartition, boostedPartition) \*\*\*

Arguments

| **name**         | **type** | **description** |
| ---------------- | -------- | --------------- |
| user             | address  | indexed         |
| basePartition    | uint256  | not indexed     |
| boostedPartition | uint256  | not indexed     |

### *event* UpdateEmissionRate

\*\*\*MasterWombatV2.UpdateEmissionRate(user, womPerSec) \*\*\*

Arguments

| **name**  | **type** | **description** |
| --------- | -------- | --------------- |
| user      | address  | indexed         |
| womPerSec | uint256  | not indexed     |

### *event* UpdatePool

\*\*\*MasterWombatV2.UpdatePool(pid, lastRewardTimestamp, lpSupply, accWomPerShare) \*\*\*

Arguments

| **name**            | **type** | **description** |
| ------------------- | -------- | --------------- |
| pid                 | uint256  | indexed         |
| lastRewardTimestamp | uint256  | not indexed     |
| lpSupply            | uint256  | not indexed     |
| accWomPerShare      | uint256  | not indexed     |

### *event* UpdateVeWOM

\*\*\*MasterWombatV2.UpdateVeWOM(user, oldVeWOM, newVeWOM) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| user     | address  | indexed         |
| oldVeWOM | address  | not indexed     |
| newVeWOM | address  | not indexed     |

### *event* Withdraw

\*\*\*MasterWombatV2.Withdraw(user, pid, amount) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| user     | address  | indexed         |
| pid      | uint256  | indexed         |
| amount   | uint256  | not indexed     |

### *function* add

\*\*\*MasterWombatV2.add(\_allocPoint, \_lpToken, \_rewarder) \*\*\*

> Notice: Add a new lp to the pool. Can only be called by the owner.

> Details: Reverts if the same LP token is added more than once.

Arguments

| **name**     | **type** | **description**               |
| ------------ | -------- | ----------------------------- |
| \_allocPoint | uint96   | allocation points for this LP |
| \_lpToken    | address  | the corresponding lp token    |
| \_rewarder   | address  | the rewarder                  |

### *function* basePartition

***MasterWombatV2.basePartition() view***

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint16   |                 |

### *function* boostedPartition

***MasterWombatV2.boostedPartition() view***

Outputs

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

### *function* deposit

\*\*\*MasterWombatV2.deposit(\_pid, \_amount) \*\*\*

> Notice: Deposit LP tokens to MasterChef for WOM allocation.

> Details: it is possible to call this function with \_amount == 0 to claim current rewards

Arguments

| **name** | **type** | **description**   |
| -------- | -------- | ----------------- |
| \_pid    | uint256  | the pool id       |
| \_amount | uint256  | amount to deposit |

Outputs

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

### *function* depositFor

\*\*\*MasterWombatV2.depositFor(\_pid, \_amount, \_user) \*\*\*

> Notice: Deposit LP tokens to MasterChef for WOM allocation on behalf of user

> Details: user must initiate transaction from masterchef

Arguments

| **name** | **type** | **description**            |
| -------- | -------- | -------------------------- |
| \_pid    | uint256  | the pool id                |
| \_amount | uint256  | amount to deposit          |
| \_user   | address  | the user being represented |

### *function* emergencyWithdraw

\*\*\*MasterWombatV2.emergencyWithdraw(\_pid) \*\*\*

> Notice: Withdraw without caring about rewards. EMERGENCY ONLY.

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| \_pid    | uint256  | the pool id     |

### *function* emergencyWomWithdraw

\*\*\*MasterWombatV2.emergencyWomWithdraw() \*\*\*

> Notice: In case we need to manually migrate WOM funds from MasterChef Sends all remaining wom from the contract to the owner

### *function* getAssetPid

***MasterWombatV2.getAssetPid(asset) view***

Arguments

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

Outputs

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

### *function* initialize

\*\*\*MasterWombatV2.initialize(\_wom, \_veWom, \_womPerSec, \_basePartition, \_startTimestamp) \*\*\*

Arguments

| **name**         | **type** | **description** |
| ---------------- | -------- | --------------- |
| \_wom            | address  |                 |
| \_veWom          | address  |                 |
| \_womPerSec      | uint104  |                 |
| \_basePartition  | uint16   |                 |
| \_startTimestamp | uint40   |                 |

### *function* massUpdatePools

\*\*\*MasterWombatV2.massUpdatePools() \*\*\*

> Notice: Update reward variables for all pools.

> Details: Be careful of gas spending!

### *function* migrate

\*\*\*MasterWombatV2.migrate(\_pids) \*\*\*

> Notice: Helper function to migrate fund from multiple pools to the new MasterWombat.user must initiate transaction from masterchef

> Details: Assume the orginal MasterWombat has stopped emisions hence we can skip updatePool() to save gas cost

Arguments

| **name** | **type**   | **description** |
| -------- | ---------- | --------------- |
| \_pids   | uint256\[] |                 |

### *function* multiClaim

\*\*\*MasterWombatV2.multiClaim(\_pids) \*\*\*

> Notice: claims rewards for multiple pids

Arguments

| **name** | **type**   | **description**            |
| -------- | ---------- | -------------------------- |
| \_pids   | uint256\[] | array pids, pools to claim |

Outputs

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

### *function* owner

***MasterWombatV2.owner() view***

> Details: Returns the address of the current owner.

Outputs

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

### *function* pause

\*\*\*MasterWombatV2.pause() \*\*\*

> Details: pause pool, restricting certain operations

### *function* paused

***MasterWombatV2.paused() view***

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

Outputs

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

### *function* pendingTokens

***MasterWombatV2.pendingTokens(\_pid, \_user) view***

> Notice: View function to see pending WOMs on frontend.

Arguments

| **name** | **type** | **description**  |
| -------- | -------- | ---------------- |
| \_pid    | uint256  | the pool id      |
| \_user   | address  | the user address |

Outputs

| **name**            | **type**   | **description** |
| ------------------- | ---------- | --------------- |
| pendingRewards      | uint256    |                 |
| bonusTokenAddresses | address\[] |                 |
| bonusTokenSymbols   | string\[]  |                 |
| pendingBonusRewards | uint256\[] |                 |

### *function* poolInfo

***MasterWombatV2.poolInfo() view***

Arguments

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

Outputs

| **name**             | **type** | **description** |
| -------------------- | -------- | --------------- |
| lpToken              | address  |                 |
| allocPoint           | uint96   |                 |
| rewarder             | address  |                 |
| sumOfFactors         | uint256  |                 |
| accWomPerShare       | uint104  |                 |
| accWomPerFactorShare | uint104  |                 |
| lastRewardTimestamp  | uint40   |                 |

### *function* poolLength

***MasterWombatV2.poolLength() view***

> Notice: returns pool length

Outputs

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

### *function* renounceOwnership

\*\*\*MasterWombatV2.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* rewarderBonusTokenInfo

***MasterWombatV2.rewarderBonusTokenInfo(\_pid) view***

> Notice: Get bonus token info from the rewarder contract for a given pool, if it is a double reward farm

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| \_pid    | uint256  | the pool id     |

Outputs

| **name**            | **type**   | **description** |
| ------------------- | ---------- | --------------- |
| bonusTokenAddresses | address\[] |                 |
| bonusTokenSymbols   | string\[]  |                 |

### *function* set

\*\*\*MasterWombatV2.set(\_pid, \_allocPoint, \_rewarder, overwrite) \*\*\*

> Notice: Update the given pool's WOM allocation point. Can only be called by the owner.

Arguments

| **name**     | **type** | **description**     |
| ------------ | -------- | ------------------- |
| \_pid        | uint256  | the pool id         |
| \_allocPoint | uint96   | allocation points   |
| \_rewarder   | address  | the rewarder        |
| overwrite    | bool     | overwrite rewarder? |

### *function* setNewMasterWombat

\*\*\*MasterWombatV2.setNewMasterWombat(\_newMasterWombat) \*\*\*

Arguments

| **name**          | **type** | **description** |
| ----------------- | -------- | --------------- |
| \_newMasterWombat | address  |                 |

### *function* setVeWom

\*\*\*MasterWombatV2.setVeWom(\_newVeWom) \*\*\*

> Notice: updates veWom address

Arguments

| **name**   | **type** | **description**       |
| ---------- | -------- | --------------------- |
| \_newVeWom | address  | the new VeWom address |

### *function* startTimestamp

***MasterWombatV2.startTimestamp() view***

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint40   |                 |

### *function* totalAllocPoint

***MasterWombatV2.totalAllocPoint() view***

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint96   |                 |

### *function* transferOwnership

\*\*\*MasterWombatV2.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* unpause

\*\*\*MasterWombatV2.unpause() \*\*\*

> Details: unpause pool, enabling certain operations

### *function* updateEmissionPartition

\*\*\*MasterWombatV2.updateEmissionPartition(\_basePartition) \*\*\*

> Notice: updates emission partition

Arguments

| **name**        | **type** | **description**           |
| --------------- | -------- | ------------------------- |
| \_basePartition | uint16   | the future base partition |

### *function* updateEmissionRate

\*\*\*MasterWombatV2.updateEmissionRate(\_womPerSec) \*\*\*

> Notice: updates emission rate

> Details: Pancake has to add hidden dummy pools inorder to alter the emission,here we make it simple and transparent to all.

Arguments

| **name**    | **type** | **description**          |
| ----------- | -------- | ------------------------ |
| \_womPerSec | uint104  | wom amount to be updated |

### *function* updateFactor

\*\*\*MasterWombatV2.updateFactor(\_user, \_newVeWomBalance) \*\*\*

> Notice: updates factor after any veWom token operation (minting/burning)

> Details: can only be called by veWom

Arguments

| **name**          | **type** | **description**     |
| ----------------- | -------- | ------------------- |
| \_user            | address  | the user to update  |
| \_newVeWomBalance | uint256  | the amount of veWOM |

### *function* updatePool

\*\*\*MasterWombatV2.updatePool(\_pid) \*\*\*

> Notice: Update reward variables of the given pool to be up-to-date.

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| \_pid    | uint256  | the pool id     |

### *function* userInfo

***MasterWombatV2.userInfo(, ) view***

Arguments

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

Outputs

| **name**   | **type** | **description** |
| ---------- | -------- | --------------- |
| amount     | uint128  |                 |
| factor     | uint128  |                 |
| rewardDebt | uint128  |                 |
| pendingWom | uint128  |                 |

### *function* veWom

***MasterWombatV2.veWom() view***

Outputs

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

### *function* withdraw

\*\*\*MasterWombatV2.withdraw(\_pid, \_amount) \*\*\*

> Notice: Withdraw LP tokens from MasterWombat.Automatically harvest pending rewards and sends to user

Arguments

| **name** | **type** | **description**        |
| -------- | -------- | ---------------------- |
| \_pid    | uint256  | the pool id            |
| \_amount | uint256  | the amount to withdraw |

Outputs

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

### *function* wom

***MasterWombatV2.wom() view***

Outputs

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

### *function* womPerSec

***MasterWombatV2.womPerSec() view***

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint104  |                 |


# MasterWombatV3

contracts/wombat-governance/MasterWombatV3.sol

> Title: MasterWombatV3

> Notice: MasterWombat is a boss. He is not afraid of any snakes. In fact, he drinks their venoms. So, veWom holders boost their (boosted) emissions. This contract rewards users in function of their amount of lp staked (base pool) factor (boosted pool) Factor and sumOfFactors are updated by contract VeWom.sol after any veWom minting/burning (veERC20Upgradeable hook). Note that it's ownable and the owner wields tremendous power. The ownership will be transferred to a governance smart contract once Wombat is sufficiently distributed and the community can show to govern itself.

> Details: Updates: - Compatible with gauge voting

### *event* Add

\*\*\*MasterWombatV3.Add(pid, lpToken, rewarder) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| pid      | uint256  | indexed         |
| lpToken  | address  | indexed         |
| rewarder | address  | not indexed     |

### *event* Deposit

\*\*\*MasterWombatV3.Deposit(user, pid, amount) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| user     | address  | indexed         |
| pid      | uint256  | indexed         |
| amount   | uint256  | not indexed     |

### *event* DepositFor

\*\*\*MasterWombatV3.DepositFor(user, pid, amount) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| user     | address  | indexed         |
| pid      | uint256  | indexed         |
| amount   | uint256  | not indexed     |

### *event* EmergencyWithdraw

\*\*\*MasterWombatV3.EmergencyWithdraw(user, pid, amount) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| user     | address  | indexed         |
| pid      | uint256  | indexed         |
| amount   | uint256  | not indexed     |

### *event* EmergencyWomWithdraw

\*\*\*MasterWombatV3.EmergencyWomWithdraw(owner, balance) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| owner    | address  | not indexed     |
| balance  | uint256  | not indexed     |

### *event* Harvest

\*\*\*MasterWombatV3.Harvest(user, pid, amount) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| user     | address  | indexed         |
| pid      | uint256  | indexed         |
| amount   | uint256  | not indexed     |

### *event* Initialized

\*\*\*MasterWombatV3.Initialized(version) \*\*\*

> Details: Triggered when the contract has been initialized or reinitialized.

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| version  | uint8    | not indexed     |

### *event* OwnershipTransferred

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

Arguments

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

### *event* Paused

\*\*\*MasterWombatV3.Paused(account) \*\*\*

> Details: Emitted when the pause is triggered by `account`.

Arguments

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

### *event* SetRewarder

\*\*\*MasterWombatV3.SetRewarder(pid, rewarder) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| pid      | uint256  | indexed         |
| rewarder | address  | not indexed     |

### *event* Unpaused

\*\*\*MasterWombatV3.Unpaused(account) \*\*\*

> Details: Emitted when the pause is lifted by `account`.

Arguments

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

### *event* UpdateEmissionPartition

\*\*\*MasterWombatV3.UpdateEmissionPartition(user, basePartition, boostedPartition) \*\*\*

Arguments

| **name**         | **type** | **description** |
| ---------------- | -------- | --------------- |
| user             | address  | indexed         |
| basePartition    | uint256  | not indexed     |
| boostedPartition | uint256  | not indexed     |

### *event* UpdateVeWOM

\*\*\*MasterWombatV3.UpdateVeWOM(user, oldVeWOM, newVeWOM) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| user     | address  | indexed         |
| oldVeWOM | address  | not indexed     |
| newVeWOM | address  | not indexed     |

### *event* UpdateVoter

\*\*\*MasterWombatV3.UpdateVoter(user, oldVoter, newVoter) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| user     | address  | indexed         |
| oldVoter | address  | not indexed     |
| newVoter | address  | not indexed     |

### *event* Withdraw

\*\*\*MasterWombatV3.Withdraw(user, pid, amount) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| user     | address  | indexed         |
| pid      | uint256  | indexed         |
| amount   | uint256  | not indexed     |

### *function* ACC\_TOKEN\_PRECISION

***MasterWombatV3.ACC\_TOKEN\_PRECISION() view***

Outputs

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

### *function* REWARD\_DURATION

***MasterWombatV3.REWARD\_DURATION() view***

Outputs

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

### *function* add

\*\*\*MasterWombatV3.add(\_lpToken, \_rewarder) \*\*\*

> Notice: Add a new lp to the pool. Can only be called by the owner.

> Details: Reverts if the same LP token is added more than once.

Arguments

| **name**   | **type** | **description**            |
| ---------- | -------- | -------------------------- |
| \_lpToken  | address  | the corresponding lp token |
| \_rewarder | address  | the rewarder               |

### *function* basePartition

***MasterWombatV3.basePartition() view***

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint16   |                 |

### *function* boostedPartition

***MasterWombatV3.boostedPartition() view***

Outputs

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

### *function* calRewardPerUnit

***MasterWombatV3.calRewardPerUnit(\_pid) view***

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| \_pid    | uint256  |                 |

Outputs

| **name**             | **type** | **description** |
| -------------------- | -------- | --------------- |
| accWomPerShare       | uint256  |                 |
| accWomPerFactorShare | uint256  |                 |

### *function* deposit

\*\*\*MasterWombatV3.deposit(\_pid, \_amount) \*\*\*

> Notice: Deposit LP tokens to MasterChef for WOM allocation.

> Details: it is possible to call this function with \_amount == 0 to claim current rewards

Arguments

| **name** | **type** | **description**   |
| -------- | -------- | ----------------- |
| \_pid    | uint256  | the pool id       |
| \_amount | uint256  | amount to deposit |

Outputs

| **name**          | **type**   | **description** |
| ----------------- | ---------- | --------------- |
| reward            | uint256    |                 |
| additionalRewards | uint256\[] |                 |

### *function* depositFor

\*\*\*MasterWombatV3.depositFor(\_pid, \_amount, \_user) \*\*\*

> Notice: Deposit LP tokens to MasterChef for WOM allocation on behalf of user

> Details: user must initiate transaction from masterchef

Arguments

| **name** | **type** | **description**            |
| -------- | -------- | -------------------------- |
| \_pid    | uint256  | the pool id                |
| \_amount | uint256  | amount to deposit          |
| \_user   | address  | the user being represented |

### *function* emergencyWithdraw

\*\*\*MasterWombatV3.emergencyWithdraw(\_pid) \*\*\*

> Notice: Withdraw without caring about rewards. EMERGENCY ONLY.

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| \_pid    | uint256  | the pool id     |

### *function* emergencyWomWithdraw

\*\*\*MasterWombatV3.emergencyWomWithdraw() \*\*\*

> Notice: In case we need to manually migrate WOM funds from MasterChef Sends all remaining wom from the contract to the owner

### *function* getAssetPid

***MasterWombatV3.getAssetPid(asset) view***

Arguments

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

Outputs

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

### *function* initialize

\*\*\*MasterWombatV3.initialize(\_wom, \_veWom, \_voter, \_basePartition) \*\*\*

Arguments

| **name**        | **type** | **description** |
| --------------- | -------- | --------------- |
| \_wom           | address  |                 |
| \_veWom         | address  |                 |
| \_voter         | address  |                 |
| \_basePartition | uint16   |                 |

### *function* lastTimeRewardApplicable

***MasterWombatV3.lastTimeRewardApplicable(\_periodFinish) view***

Arguments

| **name**       | **type** | **description** |
| -------------- | -------- | --------------- |
| \_periodFinish | uint256  |                 |

Outputs

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

### *function* massUpdatePools

\*\*\*MasterWombatV3.massUpdatePools() \*\*\*

> Notice: Update reward variables for all pools.

> Details: Be careful of gas spending!

### *function* migrate

\*\*\*MasterWombatV3.migrate(\_pids) \*\*\*

> Notice: Helper function to migrate fund from multiple pools to the new MasterWombat.user must initiate transaction from masterchef

> Details: Assume the orginal MasterWombat has stopped emisions hence we skip IVoter(voter).distribute() to save gas cost

Arguments

| **name** | **type**   | **description** |
| -------- | ---------- | --------------- |
| \_pids   | uint256\[] |                 |

### *function* multiClaim

\*\*\*MasterWombatV3.multiClaim(\_pids) \*\*\*

> Notice: claims rewards for multiple pids

Arguments

| **name** | **type**   | **description**            |
| -------- | ---------- | -------------------------- |
| \_pids   | uint256\[] | array pids, pools to claim |

Outputs

| **name**          | **type**      | **description** |
| ----------------- | ------------- | --------------- |
| reward            | uint256       |                 |
| amounts           | uint256\[]    |                 |
| additionalRewards | uint256\[]\[] |                 |

### *function* notifyRewardAmount

\*\*\*MasterWombatV3.notifyRewardAmount(\_lpToken, \_amount) \*\*\*

> Notice: Distribute WOM over a period of 7 days

> Details: Refer to synthetix/StakingRewards.sol notifyRewardAmount Note: This looks safe from reentrancy.

Arguments

| **name**  | **type** | **description** |
| --------- | -------- | --------------- |
| \_lpToken | address  |                 |
| \_amount  | uint256  |                 |

### *function* owner

***MasterWombatV3.owner() view***

> Details: Returns the address of the current owner.

Outputs

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

### *function* pause

\*\*\*MasterWombatV3.pause() \*\*\*

> Details: pause pool, restricting certain operations

### *function* paused

***MasterWombatV3.paused() view***

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

Outputs

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

### *function* pendingTokens

***MasterWombatV3.pendingTokens(\_pid, \_user) view***

> Notice: View function to see pending WOMs on frontend.

Arguments

| **name** | **type** | **description**  |
| -------- | -------- | ---------------- |
| \_pid    | uint256  | the pool id      |
| \_user   | address  | the user address |

Outputs

| **name**            | **type**   | **description** |
| ------------------- | ---------- | --------------- |
| pendingRewards      | uint256    |                 |
| bonusTokenAddresses | address\[] |                 |
| bonusTokenSymbols   | string\[]  |                 |
| pendingBonusRewards | uint256\[] |                 |

### *function* poolInfo

***MasterWombatV3.poolInfo(\_pid) view***

> Notice: \[Deprecated] A backward compatible function to return the PoolInfo struct in MasterWombatV2

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| \_pid    | uint256  |                 |

Outputs

| **name**             | **type** | **description** |
| -------------------- | -------- | --------------- |
| lpToken              | address  |                 |
| allocPoint           | uint96   |                 |
| rewarder             | address  |                 |
| sumOfFactors         | uint256  |                 |
| accWomPerShare       | uint104  |                 |
| accWomPerFactorShare | uint104  |                 |
| lastRewardTimestamp  | uint40   |                 |

### *function* poolInfoV3

***MasterWombatV3.poolInfoV3() view***

Arguments

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

Outputs

| **name**             | **type** | **description** |
| -------------------- | -------- | --------------- |
| lpToken              | address  |                 |
| rewarder             | address  |                 |
| periodFinish         | uint40   |                 |
| sumOfFactors         | uint128  |                 |
| rewardRate           | uint128  |                 |
| accWomPerShare       | uint104  |                 |
| accWomPerFactorShare | uint104  |                 |
| lastRewardTimestamp  | uint40   |                 |

### *function* poolLength

***MasterWombatV3.poolLength() view***

> Notice: returns pool length

Outputs

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

### *function* renounceOwnership

\*\*\*MasterWombatV3.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* rewarderBonusTokenInfo

***MasterWombatV3.rewarderBonusTokenInfo(\_pid) view***

> Notice: Get bonus token info from the rewarder contract for a given pool, if it is a double reward farm

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| \_pid    | uint256  | the pool id     |

Outputs

| **name**            | **type**   | **description** |
| ------------------- | ---------- | --------------- |
| bonusTokenAddresses | address\[] |                 |
| bonusTokenSymbols   | string\[]  |                 |

### *function* setNewMasterWombat

\*\*\*MasterWombatV3.setNewMasterWombat(\_newMasterWombat) \*\*\*

Arguments

| **name**          | **type** | **description** |
| ----------------- | -------- | --------------- |
| \_newMasterWombat | address  |                 |

### *function* setRewarder

\*\*\*MasterWombatV3.setRewarder(\_pid, \_rewarder) \*\*\*

> Notice: Update the given pool's rewarder

Arguments

| **name**   | **type** | **description** |
| ---------- | -------- | --------------- |
| \_pid      | uint256  | the pool id     |
| \_rewarder | address  | the rewarder    |

### *function* setVeWom

\*\*\*MasterWombatV3.setVeWom(\_newVeWom) \*\*\*

> Notice: updates veWom address

Arguments

| **name**   | **type** | **description**       |
| ---------- | -------- | --------------------- |
| \_newVeWom | address  | the new VeWom address |

### *function* setVoter

\*\*\*MasterWombatV3.setVoter(\_newVoter) \*\*\*

> Notice: updates voter address

Arguments

| **name**   | **type** | **description**       |
| ---------- | -------- | --------------------- |
| \_newVoter | address  | the new Voter address |

### *function* transferOwnership

\*\*\*MasterWombatV3.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* unpause

\*\*\*MasterWombatV3.unpause() \*\*\*

> Details: unpause pool, enabling certain operations

### *function* updateEmissionPartition

\*\*\*MasterWombatV3.updateEmissionPartition(\_basePartition) \*\*\*

> Notice: updates emission partition

Arguments

| **name**        | **type** | **description**           |
| --------------- | -------- | ------------------------- |
| \_basePartition | uint16   | the future base partition |

### *function* updateFactor

\*\*\*MasterWombatV3.updateFactor(\_user, \_newVeWomBalance) \*\*\*

> Notice: updates factor after any veWom token operation (minting/burning)

> Details: can only be called by veWom

Arguments

| **name**          | **type** | **description**     |
| ----------------- | -------- | ------------------- |
| \_user            | address  | the user to update  |
| \_newVeWomBalance | uint256  | the amount of veWOM |

### *function* updatePool

\*\*\*MasterWombatV3.updatePool(\_pid) \*\*\*

> Notice: Update reward variables of the given pool

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| \_pid    | uint256  | the pool id     |

### *function* userInfo

***MasterWombatV3.userInfo(, ) view***

Arguments

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

Outputs

| **name**   | **type** | **description** |
| ---------- | -------- | --------------- |
| amount     | uint128  |                 |
| factor     | uint128  |                 |
| rewardDebt | uint128  |                 |
| pendingWom | uint128  |                 |

### *function* veWom

***MasterWombatV3.veWom() view***

Outputs

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

### *function* voter

***MasterWombatV3.voter() view***

Outputs

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

### *function* withdraw

\*\*\*MasterWombatV3.withdraw(\_pid, \_amount) \*\*\*

> Notice: Withdraw LP tokens from MasterWombat.Automatically harvest pending rewards and sends to user

Arguments

| **name** | **type** | **description**        |
| -------- | -------- | ---------------------- |
| \_pid    | uint256  | the pool id            |
| \_amount | uint256  | the amount to withdraw |

Outputs

| **name**          | **type**   | **description** |
| ----------------- | ---------- | --------------- |
| reward            | uint256    |                 |
| additionalRewards | uint256\[] |                 |

### *function* wom

***MasterWombatV3.wom() view***

Outputs

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


# Voter

contracts/wombat-governance/gauge/Voter.sol

> Notice: Voter can handle gauge voting. WOM rewards are distributed to different gauges (MasterWombat->LpToken pair) according to the base allocation & voting weights. veWOM holders can participate in gauge voting to determine `voteAllocation()` of the WOM emission. They can allocate their vote (1 veWOM = 1 vote) to one or more gauges. WOM accumulation to a gauge is proportional to the amount of vote it receives. Real-time WOM accumulation and epoch-based WOM distribution: Voting gauges accumulates WOM seconds by seconds according to the voting weight. When a user applies new allocation for their votes, accumulation rate of WOM of the gauge updates immediately. Note that only whitelisted gauges are able to accumulate WOM from users' votes. Accumulated WOM is distributed to LP in the next epoch at an even rate. 1 epoch last for 7 days. Base Allocation: `baseAllocation` of WOM emissions is distributed to gauges according to the allocation by `owner`. Other WOM emissions are deteremined by `votes` of veWOM holders. Flow to distribute reward: 1. `Voter.distribute(lpToken)` is called 2. WOM index (`baseIndex` and `voteIndex`) is updated and corresponding WOM accumulated over this period (`GaugeInfo.claimable`) is updated. 3. At the beginning of each epoch, `GaugeInfo.claimable` amount of WOM is sent to the respective gauge via `MasterWombat.notifyRewardAmount(IERC20 _lpToken, uint256 _amount)` 4. MasterWombat will update the corresponding `pool.rewardRate` and `pool.periodFinish` Bribe Bribe is natively supported by `Voter`. Third Party protocols can bribe to attract more votes from veWOM holders to increase WOM emissions to their tokens. Flow of bribe: 1. When users vote/unvote, `bribe.onVote` is called. The bribe contract works similar to `MultiRewarderPerSec`. Note: This should also works with boosted pool. But it doesn't work with interest rate model Note 2: Please refer to the comment of MasterWombatV3.notifyRewardAmount for front-running risk

### *event* DistributeReward

\*\*\*Voter.DistributeReward(lpToken, amount) \*\*\*

Arguments

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

### *event* Initialized

\*\*\*Voter.Initialized(version) \*\*\*

> Details: Triggered when the contract has been initialized or reinitialized.

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| version  | uint8    | not indexed     |

### *event* OwnershipTransferred

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

Arguments

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

### *event* Paused

\*\*\*Voter.Paused(account) \*\*\*

> Details: Emitted when the pause is triggered by `account`.

Arguments

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

### *event* Unpaused

\*\*\*Voter.Unpaused(account) \*\*\*

> Details: Emitted when the pause is lifted by `account`.

Arguments

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

### *event* UpdateEmissionPartition

\*\*\*Voter.UpdateEmissionPartition(baseAllocation, votePartition) \*\*\*

Arguments

| **name**       | **type** | **description** |
| -------------- | -------- | --------------- |
| baseAllocation | uint256  | not indexed     |
| votePartition  | uint256  | not indexed     |

### *event* UpdateVote

\*\*\*Voter.UpdateVote(user, lpToken, amount) \*\*\*

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| user     | address  | not indexed     |
| lpToken  | address  | not indexed     |
| amount   | uint256  | not indexed     |

### *function* add

\*\*\*Voter.add(\_gaugeManager, \_lpToken, \_bribe) \*\*\*

> Notice: Add LP token into the Voter

Arguments

| **name**       | **type** | **description** |
| -------------- | -------- | --------------- |
| \_gaugeManager | address  |                 |
| \_lpToken      | address  |                 |
| \_bribe        | address  |                 |

### *function* baseAllocation

***Voter.baseAllocation() view***

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint16   |                 |

### *function* baseIndex

***Voter.baseIndex() view***

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint104  |                 |

### *function* claimBribes

\*\*\*Voter.claimBribes(\_lpTokens) \*\*\*

> Notice: Claim bribes for LP tokens

> Details: This function looks safe from re-entrancy attack

Arguments

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

Outputs

| **name**     | **type**      | **description** |
| ------------ | ------------- | --------------- |
| bribeRewards | uint256\[]\[] |                 |

### *function* distribute

\*\*\*Voter.distribute(\_lpToken) \*\*\*

> Details: This function looks safe from re-entrancy attack

Arguments

| **name**  | **type** | **description** |
| --------- | -------- | --------------- |
| \_lpToken | address  |                 |

### *function* emergencyWomWithdraw

\*\*\*Voter.emergencyWomWithdraw() \*\*\*

> Notice: In case we need to manually migrate WOM funds from Voter Sends all remaining wom from the contract to the owner

### *function* firstEpochStartTime

***Voter.firstEpochStartTime() view***

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint40   |                 |

### *function* getUserVotes

***Voter.getUserVotes(\_user, \_lpToken) view***

> Notice: getter function to return vote of a LP token for a user

Arguments

| **name**  | **type** | **description** |
| --------- | -------- | --------------- |
| \_user    | address  |                 |
| \_lpToken | address  |                 |

Outputs

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

### *function* infos

***Voter.infos() view***

Arguments

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

Outputs

| **name**           | **type** | **description** |
| ------------------ | -------- | --------------- |
| supplyBaseIndex    | uint104  |                 |
| supplyVoteIndex    | uint104  |                 |
| nextEpochStartTime | uint40   |                 |
| claimable          | uint128  |                 |
| whitelist          | bool     |                 |
| gaugeManager       | address  |                 |
| bribe              | address  |                 |

### *function* initialize

\*\*\*Voter.initialize(\_wom, \_veWom, \_womPerSec, \_startTimestamp, \_firstEpochStartTime, \_baseAllocation) \*\*\*

Arguments

| **name**              | **type** | **description** |
| --------------------- | -------- | --------------- |
| \_wom                 | address  |                 |
| \_veWom               | address  |                 |
| \_womPerSec           | uint88   |                 |
| \_startTimestamp      | uint40   |                 |
| \_firstEpochStartTime | uint40   |                 |
| \_baseAllocation      | uint16   |                 |

### *function* lastRewardTimestamp

***Voter.lastRewardTimestamp() view***

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint40   |                 |

### *function* lpTokenLength

***Voter.lpTokenLength() view***

> Notice: returns LP tokens length

Outputs

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

### *function* lpTokens

***Voter.lpTokens() view***

Arguments

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

Outputs

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

### *function* owner

***Voter.owner() view***

> Details: Returns the address of the current owner.

Outputs

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

### *function* pauseAll

\*\*\*Voter.pauseAll() \*\*\*

> Notice: Pause vote accumulation of WOM tokens for all assets Users can still vote/unvote and receive bribes.

### *function* pauseVoteEmission

\*\*\*Voter.pauseVoteEmission(\_lpToken) \*\*\*

> Notice: Pause vote emission of WOM tokens for the gauge. Users can still vote/unvote and receive bribes.

Arguments

| **name**  | **type** | **description** |
| --------- | -------- | --------------- |
| \_lpToken | address  |                 |

### *function* paused

***Voter.paused() view***

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

Outputs

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

### *function* pendingBribes

***Voter.pendingBribes(\_lpTokens, \_user) view***

> Notice: Get pending bribes for LP tokens

Arguments

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

Outputs

| **name**            | **type**      | **description** |
| ------------------- | ------------- | --------------- |
| bribeTokenAddresses | address\[]\[] |                 |
| bribeTokenSymbols   | string\[]\[]  |                 |
| bribeRewards        | uint256\[]\[] |                 |

### *function* pendingWom

***Voter.pendingWom(\_lpToken) view***

> Notice: Amount of pending WOM for the LP token

Arguments

| **name**  | **type** | **description** |
| --------- | -------- | --------------- |
| \_lpToken | address  |                 |

Outputs

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

### *function* renounceOwnership

\*\*\*Voter.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* resumeAll

\*\*\*Voter.resumeAll() \*\*\*

> Notice: Resume vote accumulation of WOM tokens for all assets

### *function* resumeVoteEmission

\*\*\*Voter.resumeVoteEmission(\_lpToken) \*\*\*

> Notice: Resume vote accumulation of WOM tokens for the gauge.

Arguments

| **name**  | **type** | **description** |
| --------- | -------- | --------------- |
| \_lpToken | address  |                 |

### *function* setAllocPoint

\*\*\*Voter.setAllocPoint(\_lpToken, \_allocPoint) \*\*\*

Arguments

| **name**     | **type** | **description** |
| ------------ | -------- | --------------- |
| \_lpToken    | address  |                 |
| \_allocPoint | uint128  |                 |

### *function* setBaseAllocation

\*\*\*Voter.setBaseAllocation(\_baseAllocation) \*\*\*

> Notice: update the base and vote partition

Arguments

| **name**         | **type** | **description** |
| ---------------- | -------- | --------------- |
| \_baseAllocation | uint16   |                 |

### *function* setBribe

\*\*\*Voter.setBribe(\_lpToken, \_bribe) \*\*\*

> Notice: get bribe address for LP token

Arguments

| **name**  | **type** | **description** |
| --------- | -------- | --------------- |
| \_lpToken | address  |                 |
| \_bribe   | address  |                 |

### *function* setGauge

\*\*\*Voter.setGauge(\_lpToken, \_gaugeManager) \*\*\*

> Notice: get gaugeManager address for LP token

Arguments

| **name**       | **type** | **description** |
| -------------- | -------- | --------------- |
| \_lpToken      | address  |                 |
| \_gaugeManager | address  |                 |

### *function* setWomPerSec

\*\*\*Voter.setWomPerSec(\_womPerSec) \*\*\*

Arguments

| **name**    | **type** | **description** |
| ----------- | -------- | --------------- |
| \_womPerSec | uint88   |                 |

### *function* totalAllocPoint

***Voter.totalAllocPoint() view***

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint128  |                 |

### *function* totalWeight

***Voter.totalWeight() view***

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint128  |                 |

### *function* transferOwnership

\*\*\*Voter.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* veWom

***Voter.veWom() view***

Outputs

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

### *function* vote

\*\*\*Voter.vote(\_lpVote, \_deltas) \*\*\*

> Notice: Vote and unvote WOM emission for LP tokens. User can vote/unvote a un-whitelisted pool. But no WOM will be emitted. Bribes are also distributed by the Bribe contract. Amount of vote should be checked by veWom.vote(). This can also used to distribute bribes when \_deltas are set to 0

Arguments

| **name** | **type**   | **description**                   |
| -------- | ---------- | --------------------------------- |
| \_lpVote | address\[] | address to LP tokens to vote      |
| \_deltas | int256\[]  | change of vote for each LP tokens |

Outputs

| **name**     | **type**      | **description** |
| ------------ | ------------- | --------------- |
| bribeRewards | uint256\[]\[] |                 |

### *function* voteAllocation

***Voter.voteAllocation() view***

> Notice: Read-only functions

Outputs

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

### *function* voteIndex

***Voter.voteIndex() view***

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint104  |                 |

### *function* votes

***Voter.votes(, ) view***

Arguments

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

Outputs

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

### *function* weights

***Voter.weights() view***

Arguments

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

Outputs

| **name**   | **type** | **description** |
| ---------- | -------- | --------------- |
| allocPoint | uint128  |                 |
| voteWeight | uint128  |                 |

### *function* wom

***Voter.wom() view***

Outputs

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

### *function* womPerSec

***Voter.womPerSec() view***

Outputs

| **name** | **type** | **description**                  |
| -------- | -------- | -------------------------------- |
|          | uint88   | 4c5d8d635e8645fc848a12d25d5f5c97 |


# veWOM

contracts/wombat-governance/VeWom.sol

> Title: VeWom

> Notice: Wombat Waddle: the staking contract for WOM, as well as the token used for governance. Note Waddling does not seem to slow the Wombat, it only makes it sturdier. Note that it's ownable and the owner wields tremendous power. The ownership will be transferred to a governance smart contract once Wombat is sufficiently distributed and the community can show to govern itself.

### *event* Burn

\*\*\*VeWom.Burn(account, value) \*\*\*

Arguments

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

### *event* Enter

\*\*\*VeWom.Enter(addr, unlockTime, womAmount, veWomAmount) \*\*\*

Arguments

| **name**    | **type** | **description** |
| ----------- | -------- | --------------- |
| addr        | address  | not indexed     |
| unlockTime  | uint256  | not indexed     |
| womAmount   | uint256  | not indexed     |
| veWomAmount | uint256  | not indexed     |

### *event* Exit

\*\*\*VeWom.Exit(addr, unlockTime, womAmount, veWomAmount) \*\*\*

Arguments

| **name**    | **type** | **description** |
| ----------- | -------- | --------------- |
| addr        | address  | not indexed     |
| unlockTime  | uint256  | not indexed     |
| womAmount   | uint256  | not indexed     |
| veWomAmount | uint256  | not indexed     |

### *event* Mint

\*\*\*VeWom.Mint(beneficiary, value) \*\*\*

Arguments

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

### *event* OwnershipTransferred

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

Arguments

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

### *event* Paused

\*\*\*VeWom.Paused(account) \*\*\*

Arguments

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

### *event* SetMasterWombat

\*\*\*VeWom.SetMasterWombat(addr) \*\*\*

Arguments

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

### *event* SetMaxBreedingLength

\*\*\*VeWom.SetMaxBreedingLength(len) \*\*\*

Arguments

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

### *event* SetWhiteList

\*\*\*VeWom.SetWhiteList(addr) \*\*\*

Arguments

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

### *event* Unpaused

\*\*\*VeWom.Unpaused(account) \*\*\*

Arguments

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

### *stateVariable* whitelist

***VeWom.whitelist() view***

> Notice: whitelist wallet checker

> Details: contract addresses are by default unable to stake wom, they must be previously whitelisted to stake wom

Outputs

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

### *function* balanceOf

***VeWom.balanceOf(account) view***

> Details: explicity override multiple inheritance

Arguments

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

Outputs

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

### *function* burn

\*\*\*VeWom.burn(slot) \*\*\*

Arguments

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

### *function* decimals

***VeWom.decimals() view***

> Details: Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for *display* purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | uint8    |                 |

### *function* getUserInfo

***VeWom.getUserInfo(addr) view***

Arguments

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

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | tuple    |                 |

### *function* initialize

\*\*\*VeWom.initialize(\_wom, \_masterWombat) \*\*\*

Arguments

| **name**       | **type** | **description** |
| -------------- | -------- | --------------- |
| \_wom          | address  |                 |
| \_masterWombat | address  |                 |

### *function* isUser

***VeWom.isUser(\_addr) view***

> Notice: checks wether user \_addr has wom staked

Arguments

| **name** | **type** | **description**           |
| -------- | -------- | ------------------------- |
| \_addr   | address  | the user address to check |

Outputs

| **name** | **type** | **description**                                    |
| -------- | -------- | -------------------------------------------------- |
|          | bool     | true if the user has wom in stake, false otherwise |

### *function* masterWombat

***VeWom.masterWombat() view***

> Notice: the masterWombat contract

Outputs

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

### *function* mint

\*\*\*VeWom.mint(amount, lockDays) \*\*\*

> Notice: lock WOM into contract and mint veWOM

Arguments

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
| amount   | uint256  |                 |
| lockDays | uint256  |                 |

Outputs

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

### *function* name

***VeWom.name() view***

> Details: Returns the name of the token.

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | string   |                 |

### *function* owner

***VeWom.owner() view***

> Details: Returns the address of the current owner.

Outputs

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

### *function* pause

\*\*\*VeWom.pause() \*\*\*

> Details: pause pool, restricting certain operations

### *function* paused

***VeWom.paused() view***

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

Outputs

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

### *function* renounceOwnership

\*\*\*VeWom.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* setMasterWombat

\*\*\*VeWom.setMasterWombat(\_masterWombat) \*\*\*

> Notice: sets masterWombat address

Arguments

| **name**       | **type** | **description**              |
| -------------- | -------- | ---------------------------- |
| \_masterWombat | address  | the new masterWombat address |

### *function* setMaxBreedingLength

\*\*\*VeWom.setMaxBreedingLength(\_maxBreedingLength) \*\*\*

Arguments

| **name**            | **type** | **description** |
| ------------------- | -------- | --------------- |
| \_maxBreedingLength | uint256  |                 |

### *function* setWhitelist

\*\*\*VeWom.setWhitelist(\_whitelist) \*\*\*

> Notice: sets whitelist address

Arguments

| **name**    | **type** | **description**           |
| ----------- | -------- | ------------------------- |
| \_whitelist | address  | the new whitelist address |

### *function* symbol

***VeWom.symbol() view***

> Details: Returns the symbol of the token, usually a shorter version of the name.

Outputs

| **name** | **type** | **description** |
| -------- | -------- | --------------- |
|          | string   |                 |

### *function* totalSupply

***VeWom.totalSupply() view***

> Details: explicity override multiple inheritance

Outputs

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

### *function* transferOwnership

\*\*\*VeWom.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* unpause

\*\*\*VeWom.unpause() \*\*\*

> Details: unpause pool, enabling certain operations

### *function* wom

***VeWom.wom() view***

> Notice: the wom token

Outputs

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


