use cosmwasm_schema::{cw_serde, QueryResponses};
use cosmwasm_std::{Uint128, Uint256};
use cw20::Cw20ReceiveMsg;

#[cw_serde]
pub struct InstantiateMsg {
    /// litium-core contract address
    pub core_contract: String,
    /// litium-mine contract address
    pub mine_contract: String,
    /// litium-core CW-20 contract address (token to stake)
    pub token_contract: String,
    /// Unbonding period in seconds (default: 21 days = 1_814_400)
    pub unbonding_period_seconds: Option<u64>,
    /// Admin address (defaults to sender)
    pub admin: Option<String>,
}

#[cw_serde]
pub enum ExecuteMsg {
    /// Accrue staking reward from mining. Only litium-mine can call.
    AccrueReward {
        amount: Uint128,
    },
    /// Receive CW-20 tokens to stake. Called by litium-core CW-20.
    Receive(Cw20ReceiveMsg),
    /// Unstake LI tokens.
    Unstake {
        amount: Uint128,
    },
    /// Claim matured unbonding.
    ClaimUnbonding {},
    /// Claim accumulated staking rewards (mints via litium-core).
    ClaimStakingRewards {},
    /// Update config. Admin only.
    UpdateConfig {
        core_contract: Option<String>,
        mine_contract: Option<String>,
        token_contract: Option<String>,
        unbonding_period_seconds: Option<u64>,
        admin: Option<String>,
    },
    /// Testing helper: mutate critical runtime state in-place (admin only).
    ApplyTestingOverrides {
        overrides: TestingOverrides,
    },
    /// Full state reset for daily testing (admin only).
    /// Zeroes staking reserve, total staked, reward index, and all staker entries.
    ResetState {},
    Pause {},
    Unpause {},
}

#[cw_serde]
pub struct TestingOverrides {
    pub paused: Option<bool>,
    pub unbonding_period_seconds: Option<u64>,
    pub staking_reserve: Option<Uint128>,
    pub staking_total_staked: Option<Uint128>,
    pub staking_reward_index: Option<Uint256>,
    pub total_accrued_rewards: Option<Uint128>,
    pub total_claimed_rewards: Option<Uint128>,
}

#[cw_serde]
#[derive(QueryResponses)]
pub enum QueryMsg {
    #[returns(ConfigResponse)]
    Config {},
    #[returns(TotalStakedResponse)]
    TotalStaked {},
    #[returns(StakeInfoResponse)]
    StakeInfo { address: String },
    #[returns(StakingStatsResponse)]
    StakingStats {},
    #[returns(TotalPendingRewardsResponse)]
    TotalPendingRewards {},
}

#[cw_serde]
pub struct ConfigResponse {
    pub core_contract: String,
    pub mine_contract: String,
    pub token_contract: String,
    pub unbonding_period_seconds: u64,
    pub admin: String,
    pub paused: bool,
}

#[cw_serde]
pub struct TotalStakedResponse {
    pub total_staked: Uint128,
}

#[cw_serde]
pub struct StakeInfoResponse {
    pub address: String,
    pub staked_amount: Uint128,
    pub pending_unbonding: Uint128,
    pub pending_unbonding_until: u64,
    pub claimable_rewards: Uint128,
}

#[cw_serde]
pub struct StakingStatsResponse {
    pub reserve: Uint128,
    pub total_staked: Uint128,
    pub reward_index: String,
}

#[cw_serde]
pub struct TotalPendingRewardsResponse {
    pub total_pending_rewards: Uint128,
}

Dimensions

cw-cyber/contracts/graph-filter/src/msg.rs
cw-cyber/contracts/std-test/src/msg.rs
cw-cyber/packages/cyber-std/src/msg.rs
cw-cyber/contracts/hub-tokens/src/msg.rs
cw-cyber/contracts/hub-libs/src/msg.rs
cw-cyber/contracts/litium-refer/src/msg.rs
cw-cyber/contracts/litium-wrap/src/msg.rs
cw-cyber/contracts/hub-skills/src/msg.rs
cw-cyber/contracts/cw-cyber-passport/src/msg.rs
cw-cyber/contracts/litium-mine/src/msg.rs
cw-cyber/contracts/litium-core/src/msg.rs
cw-cyber/contracts/hub-protocols/src/msg.rs
cw-cyber/contracts/hub-networks/src/msg.rs
cw-cyber/contracts/cw-cyber-gift/src/msg.rs
cw-cyber/contracts/cw-cyber-subgraph/src/msg.rs
cw-cyber/contracts/cybernet/src/msg.rs
cw-cyber/contracts/hub-channels/src/msg.rs
cw-cyber/packages/cyber-std/src/tokenfactory/msg.rs

Local Graph