mito-protocol 0.2.7-fixed-docs

A package for interacting with the Mito Protocol
Documentation
use cosmwasm_std::{Coin, CosmosMsg};
use injective_cosmwasm::{InjectiveMsgWrapper, SubaccountId};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use serde_cw_value::Value;

use crate::vault::{AmmRedeemSubscribeMsg, InstantiateVaultMsg, RedemptionType, Slippage, Vault};

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub struct InstantiateMsg {
    pub owner: String,
    pub distribution_contract: String, // collected rewards receiver
    pub mito_token: String,
    pub is_allowing_open_registrations: bool,
    pub is_opting_out_rewards: bool,
    pub permissionless_vault_registration_fee: Vec<Coin>,
    pub min_permissionless_vault_initial_funds: Vec<Coin>,
    pub mito_treasury_address: String,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
pub struct InjectiveForwardExec {
    pub vault_subaccount_id: SubaccountId,
    pub trader_subaccount_id: SubaccountId,
    pub msg: Value,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
pub struct AmmInjectiveForwardExec {
    pub vault_subaccount_id: SubaccountId,
    pub trader_subaccount_id: SubaccountId,
    pub msg: AmmRedeemSubscribeMsg,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
#[allow(clippy::large_enum_variant)]
pub enum MasterAmmExecuteMsg {
    InjectiveExec {
        origin: String,
        name: String,
        args: AmmInjectiveForwardExec,
    },
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub struct PermissionlessInfo {
    pub whitelisted_vault_code_id: u64,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub struct RestrictedInfo {
    pub vault_code_id: u64,
    pub vault_upgrade_admin: Option<String>, // None means immutable
    pub vault_label: String,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum RegistrationMode {
    Permissionless(PermissionlessInfo),
    Restricted(RestrictedInfo),
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
#[allow(clippy::large_enum_variant)]
pub enum ExecuteMsg {
    InjectiveExec {
        origin: String,
        name: String,
        args: InjectiveForwardExec,
    },
    AddAllowedVaultRegistrationAddress {
        address: String,
    },
    RemoveAllowedVaultRegistrationAddress {
        address: String,
    },
    AddOneTimeAllowedVaultRegistrationAddress {
        address: String,
        code_id: u64,
    },
    AddCodeIdToWhitelist {
        code_id: u64,
    },
    RemoveCodeIdFromWhitelist {
        code_id: u64,
    },
    UpdateConfig {
        owner: Option<String>,
        distribution_contract: Option<String>,
        is_allowing_open_registrations: Option<bool>,
        permissionless_vault_registration_fee: Option<Vec<Coin>>,
        min_permissionless_vault_initial_funds: Option<Vec<Coin>>,
        mito_treasury_address: Option<String>,
    },
    ExecuteMessagesForVault {
        injective_messages: Vec<CosmosMsg<InjectiveMsgWrapper>>,
    },
    RegisterVault {
        registration_mode: RegistrationMode,
        instantiate_vault_msg: InstantiateVaultMsg,
        is_subscribing_with_funds: bool,
    },
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
    Config {},
    GetLastRegisteredVault {},
    HasOneTimeAllowance {
        user_address: String,
        code_id: u64,
    },
    GetRegisteredVaults {
        start_after_vault_addr: Option<String>,
        start_after_subaccount: Option<SubaccountId>,
        limit: Option<u32>,
    },
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub struct RegisteredVault {
    pub vault: Vault,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub struct RegisteredVaultsResponse {
    pub registered_vaults: Vec<RegisteredVault>,
}

// We define a custom struct for each query response
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub struct ConfigResponse {
    pub owner: String,
    pub distribution_contract: String, // collected rewards receiver
    pub mito_token: String,
    pub mito_treasury_address: String,
    pub is_allowing_open_registrations: bool,
    pub permissionless_vault_registration_fee: Vec<Coin>,
    pub min_permissionless_vault_initial_funds: Vec<Coin>,
    pub version: String,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub struct VaultSubscribeArgs {
    pub vault_subaccount_id: SubaccountId,
    pub subscriber_subaccount_id: SubaccountId,
    pub slippage: Option<Slippage>,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub struct VaultRedeemArgs {
    pub vault_subaccount_id: SubaccountId,
    pub redeemer_subaccount_id: SubaccountId,
    pub redemption_type: RedemptionType,
    pub slippage: Option<Slippage>,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub enum VaultInputArgs {
    Subscribe { args: VaultSubscribeArgs },
    Redeem { args: VaultRedeemArgs },
}