1use crate::asset::{Asset, AssetInfo};
2use crate::factory::UpdateAddr;
3use cosmwasm_schema::cw_serde;
4use cosmwasm_std::{Addr, Decimal, Uint128, Uint64};
5use schemars::JsonSchema;
6use serde::{Deserialize, Serialize};
7
8#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
9pub struct InstantiateMsg {
10 pub owner: String,
11 pub astro_token_contract: String,
12 pub factory_contract: String,
13 pub staking_contract: String,
14 pub governance_contract: Option<String>,
15 pub governance_percent: Option<Uint64>,
16 pub max_spread: Option<Decimal>,
17}
18
19#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
20#[serde(rename_all = "snake_case")]
21pub enum ExecuteMsg {
22 Collect {
23 assets: Vec<AssetWithLimit>,
24 },
25 UpdateConfig {
26 factory_contract: Option<String>,
27 staking_contract: Option<String>,
28 governance_contract: Option<UpdateAddr>,
29 governance_percent: Option<Uint64>,
30 max_spread: Option<Decimal>,
31 },
32 UpdateBridges {
33 add: Option<Vec<(AssetInfo, AssetInfo)>>,
34 remove: Option<Vec<AssetInfo>>,
35 },
36 SwapBridgeAssets {
37 assets: Vec<AssetInfo>,
38 depth: u64,
39 },
40 ProposeNewOwner {
41 owner: String,
42 expires_in: u64,
43 },
44 DropOwnershipProposal {},
45 ClaimOwnership {},
46 EnableRewards {
47 blocks: u64,
48 },
49}
50
51#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
52#[serde(rename_all = "snake_case")]
53pub enum QueryMsg {
54 Config {},
55 Balances { assets: Vec<AssetInfo> },
56 Bridges {},
57}
58
59#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
61pub struct ConfigResponse {
62 pub owner: Addr,
63 pub astro_token_contract: Addr,
64 pub factory_contract: Addr,
65 pub staking_contract: Addr,
66 pub governance_contract: Option<Addr>,
67 pub governance_percent: Uint64,
68 pub max_spread: Decimal,
69 pub remainder_reward: Uint128,
70 pub pre_upgrade_astro_amount: Uint128,
71}
72
73#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
75pub struct BalancesResponse {
76 pub balances: Vec<Asset>,
77}
78
79#[cw_serde]
80pub struct AssetWithLimit {
81 pub info: AssetInfo,
82 pub limit: Option<Uint128>,
83}