use cosmwasm_schema::{cw_serde, QueryResponses};
use cosmwasm_std::Uint128;

#[cw_serde]
pub struct InstantiateMsg {
    /// litium-core contract address
    pub core_contract: String,
    /// litium-mine contract address
    pub mine_contract: String,
    /// Default community pool destination address
    pub community_pool_addr: Option<String>,
    /// Admin address (defaults to sender)
    pub admin: Option<String>,
}

#[cw_serde]
pub enum ExecuteMsg {
    /// Bind a referrer for a miner. Only litium-mine can call.
    BindReferrer {
        miner: String,
        referrer: String,
    },
    /// Accrue referral reward for a miner's referrer. Only litium-mine can call.
    /// If miner has no referrer, accrues to community pool.
    AccrueReward {
        miner: String,
        amount: Uint128,
    },
    /// Claim accumulated referral rewards. Called by referrer directly.
    ClaimRewards {},
    /// Claim community pool balance. Admin only.
    ClaimCommunityPool {
        to: String,
    },
    /// Update config. Admin only.
    UpdateConfig {
        core_contract: Option<String>,
        mine_contract: Option<String>,
        community_pool_addr: Option<String>,
        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 referral stats, community pool, and clears all referrer bindings.
    ResetState {},
    Pause {},
    Unpause {},
}

#[cw_serde]
pub struct TestingOverrides {
    pub paused: Option<bool>,
    pub community_pool_addr: Option<String>,
    pub community_pool_balance: Option<Uint128>,
    pub total_accrued_rewards: Option<Uint128>,
    pub total_claimed_rewards: Option<Uint128>,
}

#[cw_serde]
#[derive(QueryResponses)]
pub enum QueryMsg {
    #[returns(ConfigResponse)]
    Config {},
    #[returns(ReferrerOfResponse)]
    ReferrerOf { miner: String },
    #[returns(ReferralInfoResponse)]
    ReferralInfo { address: String },
    #[returns(CommunityPoolBalanceResponse)]
    CommunityPoolBalance {},
    #[returns(TotalPendingRewardsResponse)]
    TotalPendingRewards {},
}

#[cw_serde]
pub struct ConfigResponse {
    pub core_contract: String,
    pub mine_contract: String,
    pub community_pool_addr: Option<String>,
    pub admin: String,
    pub paused: bool,
}

#[cw_serde]
pub struct ReferrerOfResponse {
    pub miner: String,
    pub referrer: Option<String>,
}

#[cw_serde]
pub struct ReferralInfoResponse {
    pub address: String,
    pub referral_rewards: Uint128,
    pub referrals_count: u64,
}

#[cw_serde]
pub struct CommunityPoolBalanceResponse {
    pub balance: Uint128,
}

#[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/litium-stake/src/msg.rs
cw-cyber/contracts/hub-tokens/src/msg.rs
cw-cyber/contracts/hub-libs/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