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

Last updated