πββοΈConstant Product Pool
The famous xy=k pool implementation
1. Overview
The constant product pool uses the widely known xy=k formula. More details around how the pool functions can be found here.
2. Variables & Functions
Constants
CONTRACT_NAME
The constant product contract name
CONTRACT_VERSION
The contract version
INSTANTIATE_TOKEN_REPLY_ID
A reply call code ID used for sub-messages
DEFAULT_SLIPPAGE
Default slippage tolerance enforced on swaps
MAX_ALLOWED_SLIPPAGE
The maximum possible slippage tolerance
TWAP_PRECISION
Decimal precision for TWAP results
Structs
Config
This struct holds general contract parameters
pair_info- General pair information (e.g pair type)factory_addr- The Astroport factory contract addressblock_time_last- The last timestamp when the pair contract update the asset cumulative pricesprice0_cumulative_last- The last cumulative price for asset 0price1_cumulative_last- The last cumulative price for asset 1
InstantiateMsg
This struct holds parameters used to instantiate the pair contract
asset_infos- Information about the two assets in the pooltoken_code_id- The token contract code ID used for the tokens in the poolfactory_addr- The factory contract addressinit_params- Optional binary serialised parameters for custom pool types
PoolResponse
This struct is used to return a query result with the total amount of LP tokens and the two assets in a specific pool
assets- The assets in the pool together with asset amountstotal_share- The total amount of LP tokens currently issued
ConfigResponse
This struct is used to return a query result with the general contract configuration
block_time_last- Last timestamp when the cumulative prices in the pool were updatedparams- The pool's parameters
SimulationResponse
This structure holds the parameters that are returned from a swap simulation response
return_amount- The amount of ask assets returned by the swapspread_amount- The spread used in the swap operationcommission_amount- The amount of fees charged by the transaction
ReverseSimulationResponse
This structure holds the parameters that are returned from a reverse swap simulation response
offer_amount- The amount of offer assets returned by the reverse swapspread_amount- The spread used in the swap operationcommission_amount- The amount of fees charged by the transaction
CumulativePricesResponse
This structure is used to return a cumulative prices query response
assets- The two assets in the pool to querytotal_share- The total amount of LP tokens currently issuedprice0_cumulative_last- The last value for thetoken0cumulative priceprice1_cumulative_last- The last value for thetoken1cumulative price
Functions
instantiate
(deps: DepsMut, _env: Env, _info: MessageInfo, msg: InstantiateMsg) -> Result<Response, ContractError>
Instantiate the pair contract
reply
(deps: DepsMut, _env: Env, msg: Reply) -> Result<Response, ContractError>
The entry point to the contract for processing replies from submessages
execute
(deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg) -> Result<Response, ContractError>
Execute a function from the contract
receive_cw20
(deps: DepsMut, env: Env, info: MessageInfo, cw20_msg: Cw20ReceiveMsg) -> Result<Response, ContractError>
Receives a message of type [Cw20ReceiveMsg] and processes it depending on the received template
provide_liquidity
(deps: DepsMut, env: Env, info: MessageInfo, assets: [Asset; 2], slippage_tolerance: Option<Decimal>, auto_stake: Option<bool>, receiver: Option<String>) -> Result<Response, ContractError>
Provide liquidity in the pair. Asset is imported from the asset file
mint_liquidity_token_message
(deps: Deps, config: &Config, env: Env, recipient: Addr, amount: Uint128, auto_stake: bool) -> Result<Vec, ContractError>
Internal function used to mint LP tokens for a beneficiary and auto stake the tokens in the Generator contract (if auto staking is specified)
withdraw_liquidity
(deps: DepsMut, env: Env, info: MessageInfo, sender: Addr, amount: Uint128) -> Result<Response, ContractError>
Withdraw liquidity from the pool
get_share_in_assets
(pools: &[Asset; 2], amount: Uint128, total_share: Uint128) -> Vec<Asset>
Returns the amount of pool assets that correspond to an amount of LP tokens. Asset is imported from the asset file
swap
(deps: DepsMut, env: Env, info: MessageInfo, sender: Addr, offer_asset: Asset, belief_price: Option<Decimal>, max_spread: Option<Decimal>, to: Option<Addr>) -> Result<Response, ContractError>
Performs an swap operation with the specified parameters. Asset is imported from the asset file
accumulate_prices
(env: Env, config: &Config, x: Uint128, y: Uint128) -> StdResult<Option<(Uint128, Uint128, u64)>>
Internal function used to accumulate token prices for the assets in the pool. Note that this function shifts block_time when any of the token prices is zero in order to not fill an accumulator with a null price for that period
calculate_maker_fee
(pool_info: AssetInfo, commission_amount: Uint128, maker_commission_rate: Decimal) -> Option<Asset>
Internal function used to calculate the amount of fees the Maker contract gets according to specified pair parameters. AssetInfo is imported from the asset file
migrate
(_deps: DepsMut, _env: Env, _msg: MigrateMsg) -> StdResult<Response>
Used for the contract migration
query
(deps: Deps, env: Env, msg: QueryMsg) -> StdResult<Binary>
Query the contract
query_pair_info
(deps: Deps) -> StdResult<PairInfo>
Returns information about the pair contract. PairInfo is imported from the asset file
query_pool
(deps: Deps) -> StdResult<PoolResponse>
Returns the amounts of assets in the pair contract as well as the amount of LP tokens currently issued
query_share
(deps: Deps, amount: Uint128) -> StdResult<Vec<Asset>>
Returns the amount of assets that could be withdrawn from the pool using a specific amount of LP tokens. Asset is imported from the asset file
query_simulation
(deps: Deps, offer_asset: Asset) -> StdResult<SimulationResponse>
Returns information about a swap simulation. Asset is imported from the asset file
query_reverse_simulation
(deps: Deps, ask_asset: Asset) -> StdResult<ReverseSimulationResponse>
Returns information about a reverse swap simulation. Asset is imported from the asset file
query_cumulative_prices
(deps: Deps, env: Env) -> StdResult<CumulativePricesResponse>
Returns information about cumulative prices for the assets in the pool
query_config
(deps: Deps) -> StdResult<ConfigResponse>
Returns the pair contract configuration
amount_of
(coins: &[Coin], denom: String) -> Uint128
Returns an amount of coins
compute_swap
(offer_pool: Uint128, ask_pool: Uint128, offer_amount: Uint128, commission_rate: Decimal) -> StdResult<(Uint128, Uint128, Uint128)>
Returns the result of a swap
compute_offer_amount
(offer_pool: Uint128, ask_pool: Uint128, ask_amount: Uint128, commission_rate: Decimal) -> StdResult<(Uint128, Uint128, Uint128)>
Returns an amount of offer assets for a specified amount of ask assets
assert_max_spread
(belief_price: Option<Decimal>, max_spread: Option<Decimal>, offer_amount: Uint128, return_amount: Uint128, spread_amount: Uint128) -> Result<(), ContractError>
This is an internal function; if belief_price and max_spread are both specified, we compute a new spread, otherwise we just use the swap spread to check max_spread
assert_slippage_tolerance
(slippage_tolerance: Option<Decimal>, deposits: &[Uint128; 2], pools: &[Asset; 2]) -> Result<(), ContractError>
This is an internal function that enforces slippage tolerance for swaps. Asset is imported from the asset file
pool_info
(deps: Deps, config: Config) -> StdResult<([Asset; 2], Uint128)>
Returns the total amount of assets in the pool as well as
Last updated