dojoswap/
pair.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use crate::asset::{Asset, AssetInfo};
5
6use cosmwasm_std::{Decimal, Uint128};
7use cw20::Cw20ReceiveMsg;
8
9#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
10pub struct InstantiateMsg {
11    /// Asset infos
12    pub asset_infos: [AssetInfo; 2],
13    /// Token contract code id for initialization
14    pub token_code_id: u64,
15    pub asset_decimals: [u8; 2],
16}
17
18#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
19#[serde(rename_all = "snake_case")]
20pub enum ExecuteMsg {
21    Receive(Cw20ReceiveMsg),
22    /// ProvideLiquidity a user provides pool liquidity
23    ProvideLiquidity {
24        assets: [Asset; 2],
25        receiver: Option<String>,
26        deadline: Option<u64>,
27        slippage_tolerance: Option<Decimal>,
28    },
29    /// Swap an offer asset to the other
30    Swap {
31        offer_asset: Asset,
32        belief_price: Option<Decimal>,
33        max_spread: Option<Decimal>,
34        to: Option<String>,
35        deadline: Option<u64>,
36    },
37    AdminConfigure {
38        assets: [AssetInfo; 2],
39        asset_decimals: [u8; 2],
40    },
41}
42
43#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
44#[serde(rename_all = "snake_case")]
45pub enum Cw20HookMsg {
46    /// Sell a given amount of asset
47    Swap {
48        belief_price: Option<Decimal>,
49        max_spread: Option<Decimal>,
50        to: Option<String>,
51        deadline: Option<u64>,
52    },
53    WithdrawLiquidity {
54        min_assets: Option<[Asset; 2]>,
55        deadline: Option<u64>,
56    },
57}
58
59#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
60#[serde(rename_all = "snake_case")]
61pub enum QueryMsg {
62    Pair {},
63    Pool {},
64    Simulation { offer_asset: Asset },
65    ReverseSimulation { ask_asset: Asset },
66}
67
68// We define a custom struct for each query response
69#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
70pub struct PoolResponse {
71    pub assets: [Asset; 2],
72    pub total_share: Uint128,
73}
74
75/// SimulationResponse returns swap simulation response
76#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
77pub struct SimulationResponse {
78    pub return_amount: Uint128,
79    pub spread_amount: Uint128,
80    pub commission_amount: Uint128,
81}
82
83/// ReverseSimulationResponse returns reverse swap simulation response
84#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
85pub struct ReverseSimulationResponse {
86    pub offer_amount: Uint128,
87    pub spread_amount: Uint128,
88    pub commission_amount: Uint128,
89}
90
91/// We currently take no arguments for migrations
92#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
93pub struct MigrateMsg {}