use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use cosmwasm_std::{Decimal, Uint128};
use cw20::Cw20ReceiveMsg;
use terraswap::asset::Asset;
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct InstantiateMsg {
pub owner: String,
pub mirror_token: String,
pub mint_contract: String,
pub oracle_contract: String,
pub terraswap_factory: String,
pub base_denom: String,
pub premium_min_update_interval: u64,
pub short_reward_contract: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
Receive(Cw20ReceiveMsg),
UpdateConfig {
owner: Option<String>,
premium_min_update_interval: Option<u64>,
short_reward_contract: Option<String>,
},
RegisterAsset {
asset_token: String,
staking_token: String,
},
Unbond {
asset_token: String,
amount: Uint128,
},
Withdraw {
asset_token: Option<String>,
},
AutoStake {
assets: [Asset; 2],
slippage_tolerance: Option<Decimal>,
},
AutoStakeHook {
asset_token: String,
staking_token: String,
staker_addr: String,
prev_staking_token_amount: Uint128,
},
AdjustPremium {
asset_tokens: Vec<String>,
},
IncreaseShortToken {
asset_token: String,
staker_addr: String,
amount: Uint128,
},
DecreaseShortToken {
asset_token: String,
staker_addr: String,
amount: Uint128,
},
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum Cw20HookMsg {
Bond { asset_token: String },
DepositReward { rewards: Vec<(String, Uint128)> },
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct MigrateMsg {
pub mint_contract: String,
pub oracle_contract: String,
pub terraswap_factory: String,
pub base_denom: String,
pub premium_min_update_interval: u64,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
Config {},
PoolInfo {
asset_token: String,
},
RewardInfo {
staker_addr: String,
asset_token: Option<String>,
},
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct ConfigResponse {
pub owner: String,
pub mirror_token: String,
pub mint_contract: String,
pub oracle_contract: String,
pub terraswap_factory: String,
pub base_denom: String,
pub premium_min_update_interval: u64,
pub short_reward_contract: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct PoolInfoResponse {
pub asset_token: String,
pub staking_token: String,
pub total_bond_amount: Uint128,
pub total_short_amount: Uint128,
pub reward_index: Decimal,
pub short_reward_index: Decimal,
pub pending_reward: Uint128,
pub short_pending_reward: Uint128,
pub premium_rate: Decimal,
pub short_reward_weight: Decimal,
pub premium_updated_time: u64,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct RewardInfoResponse {
pub staker_addr: String,
pub reward_infos: Vec<RewardInfoResponseItem>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct RewardInfoResponseItem {
pub asset_token: String,
pub bond_amount: Uint128,
pub pending_reward: Uint128,
pub is_short: bool,
}