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 pub asset_infos: [AssetInfo; 2],
18 pub token_code_id: u64,
20 pub factory_addr: Addr,
22 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 {
32 assets: [Asset; 2],
33 slippage_tolerance: Option<Decimal>,
34 auto_stake: Option<bool>,
35 receiver: Option<String>,
36 },
37 Swap {
39 offer_asset: Asset,
40 belief_price: Option<Decimal>,
41 max_spread: Option<Decimal>,
42 to: Option<String>,
43 },
44 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 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#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
76pub struct PoolResponse {
77 pub assets: [Asset; 2],
78 pub total_share: Uint128,
79}
80
81#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
83pub struct ConfigResponse {
84 pub block_time_last: u64,
85 pub params: Option<Binary>,
86}
87
88#[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#[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#[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#[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}