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,
}
cw-cyber/contracts/litium-stake/src/msg.rs
ฯ 0.0%
use ;
use ;
use Cw20ReceiveMsg;