# 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  |                 |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.wombat.exchange/developers/integration-guideline/masterwombatv3.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
