astroport_types/
pair.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use crate::asset::{Asset, AssetInfo};
5
6use cosmwasm_std::{Addr, Binary, Decimal, Uint128};
7use cw20::Cw20ReceiveMsg;
8
9pub const DEFAULT_SLIPPAGE: &str = "0.005";
10pub const MAX_ALLOWED_SLIPPAGE: &str = "0.5";
11
12pub const TWAP_PRECISION: u8 = 6;
13
14#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
15pub struct InstantiateMsg {
16    /// Asset infos
17    pub asset_infos: [AssetInfo; 2],
18    /// Token contract code id for initialization
19    pub token_code_id: u64,
20    /// Factory contract address
21    pub factory_addr: Addr,
22    /// Optional binary serialised parameters for custom pool types
23    pub init_params: Option<Binary>,
24}
25
26#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
27#[serde(rename_all = "snake_case")]
28pub enum ExecuteMsg {
29    Receive(Cw20ReceiveMsg),
30    /// ProvideLiquidity a user provides pool liquidity
31    ProvideLiquidity {
32        assets: [Asset; 2],
33        slippage_tolerance: Option<Decimal>,
34        auto_stake: Option<bool>,
35        receiver: Option<String>,
36    },
37    /// Swap an offer asset to the other
38    Swap {
39        offer_asset: Asset,
40        belief_price: Option<Decimal>,
41        max_spread: Option<Decimal>,
42        to: Option<String>,
43    },
44    /// Update pair config if required
45    UpdateConfig {
46        params: Binary,
47    },
48}
49
50#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
51#[serde(rename_all = "snake_case")]
52pub enum Cw20HookMsg {
53    /// Sell a given amount of asset
54    Swap {
55        belief_price: Option<Decimal>,
56        max_spread: Option<Decimal>,
57        to: Option<String>,
58    },
59    WithdrawLiquidity {},
60}
61
62#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
63#[serde(rename_all = "snake_case")]
64pub enum QueryMsg {
65    Pair {},
66    Pool {},
67    Config {},
68    Share { amount: Uint128 },
69    Simulation { offer_asset: Asset },
70    ReverseSimulation { ask_asset: Asset },
71    CumulativePrices {},
72}
73
74// We define a custom struct for each query response
75#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
76pub struct PoolResponse {
77    pub assets: [Asset; 2],
78    pub total_share: Uint128,
79}
80
81// We define a custom struct for each query response
82#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
83pub struct ConfigResponse {
84    pub block_time_last: u64,
85    pub params: Option<Binary>,
86}
87
88/// SimulationResponse returns swap simulation response
89#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
90pub struct SimulationResponse {
91    pub return_amount: Uint128,
92    pub spread_amount: Uint128,
93    pub commission_amount: Uint128,
94}
95
96/// ReverseSimulationResponse returns reverse swap simulation response
97#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
98pub struct ReverseSimulationResponse {
99    pub offer_amount: Uint128,
100    pub spread_amount: Uint128,
101    pub commission_amount: Uint128,
102}
103
104// We define a custom struct for each query response
105#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
106pub struct CumulativePricesResponse {
107    pub assets: [Asset; 2],
108    pub total_share: Uint128,
109    pub price0_cumulative_last: Uint128,
110    pub price1_cumulative_last: Uint128,
111}
112
113/// We currently take no arguments for migrations
114#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
115pub struct MigrateMsg {}
116
117#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
118#[serde(rename_all = "snake_case")]
119pub struct StablePoolParams {
120    pub amp: u64,
121}
122
123#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
124#[serde(rename_all = "snake_case")]
125pub struct StablePoolConfig {
126    pub amp: Decimal,
127}
128
129#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
130#[serde(rename_all = "snake_case")]
131pub enum StablePoolUpdateParams {
132    StartChangingAmp { next_amp: u64, next_amp_time: u64 },
133    StopChangingAmp {},
134}