Skip to main content

lithium_cli/
contract_types.rs

1//! Serde types for the modular litium contracts.
2//!
3//! These mirror the on-chain JSON schemas but use plain `String` for
4//! `Uint128` fields (the RPC layer only does JSON anyway).
5
6use serde::{Deserialize, Serialize};
7
8// ═══════════════════════════════════════════════════════════════════
9// litium-core  (CW-20 token + burn stats)
10// ═══════════════════════════════════════════════════════════════════
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
13#[serde(rename_all = "snake_case")]
14pub enum CoreQueryMsg {
15    Config {},
16    BurnStats {},
17    TotalMinted {},
18    Balance { address: String },
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize)]
22#[serde(rename_all = "snake_case")]
23pub enum CoreExecuteMsg {
24    Transfer { recipient: String, amount: String },
25    Send { contract: String, amount: String, msg: String },
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct BalanceResponse {
30    pub balance: String,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct TotalMintedResponse {
35    pub total_minted: String,
36}
37
38#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct BurnStatsResponse {
40    pub total_burned: String,
41}
42
43// ═══════════════════════════════════════════════════════════════════
44// litium-mine  (proof submission, queries, emission)
45// ═══════════════════════════════════════════════════════════════════
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
48#[serde(rename_all = "snake_case")]
49pub enum MineExecuteMsg {
50    SubmitProof {
51        hash: String,
52        nonce: u64,
53        miner_address: String,
54        challenge: String,
55        difficulty: u32,
56        timestamp: u64,
57        referrer: Option<String>,
58    },
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize)]
62#[serde(rename_all = "snake_case")]
63pub enum MineQueryMsg {
64    Config {},
65    WindowStatus {},
66    Stats {},
67    MinerStats { address: String },
68    CalculateReward { difficulty_bits: u32 },
69    EmissionInfo {},
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize)]
73pub struct MineConfigResponse {
74    pub max_proof_age: u64,
75    pub estimated_gas_cost_uboot: String,
76    pub core_contract: String,
77    pub stake_contract: String,
78    pub refer_contract: String,
79    pub token_contract: String,
80    pub admin: String,
81    pub paused: bool,
82    pub window_size: u32,
83    pub pid_interval: u64,
84    pub genesis_time: u64,
85    pub min_difficulty: u32,
86    pub alpha: u64,
87    pub beta: u64,
88    pub fee_bucket_duration: u64,
89    pub fee_num_buckets: u32,
90    pub warmup_base_rate: String,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
94pub struct WindowStatusResponse {
95    pub proof_count: u64,
96    pub window_d_rate: String,
97    pub window_size: u32,
98    pub window_entries: u32,
99    pub base_rate: String,
100    pub alpha: String,
101    pub beta: String,
102}
103
104#[derive(Debug, Clone, Serialize, Deserialize)]
105pub struct MineEmissionInfoResponse {
106    pub alpha: u64,
107    pub beta: u64,
108    pub emission_rate: String,
109    pub gross_rate: String,
110    pub mining_rate: String,
111    pub staking_rate: String,
112    pub windowed_fees: String,
113}
114
115#[derive(Debug, Clone, Serialize, Deserialize)]
116pub struct MineStatsResponse {
117    pub total_proofs: u64,
118    pub total_rewards: String,
119    pub unique_miners: u64,
120    pub avg_difficulty: u32,
121}
122
123#[derive(Debug, Clone, Serialize, Deserialize)]
124pub struct MineMinerStatsResponse {
125    pub address: String,
126    pub proofs_submitted: u64,
127    pub total_rewards: String,
128    pub last_proof_time: u64,
129}
130
131#[derive(Debug, Clone, Serialize, Deserialize)]
132pub struct MineRewardResponse {
133    pub gross_reward: String,
134    pub estimated_gas_cost_uboot: String,
135    pub earns_reward: bool,
136}
137
138// ═══════════════════════════════════════════════════════════════════
139// litium-stake
140// ═══════════════════════════════════════════════════════════════════
141
142#[derive(Debug, Clone, Serialize, Deserialize)]
143#[serde(rename_all = "snake_case")]
144pub enum StakeQueryMsg {
145    Config {},
146    TotalStaked {},
147    StakeInfo { address: String },
148    StakingStats {},
149}
150
151#[derive(Debug, Clone, Serialize, Deserialize)]
152#[serde(rename_all = "snake_case")]
153pub enum StakeExecuteMsg {
154    Unstake { amount: String },
155    ClaimUnbonding {},
156    ClaimStakingRewards {},
157}
158
159#[derive(Debug, Clone, Serialize, Deserialize)]
160pub struct StakeInfoResponse {
161    pub address: String,
162    pub staked_amount: String,
163    pub pending_unbonding: String,
164    pub pending_unbonding_until: u64,
165    pub claimable_rewards: String,
166}
167
168// ═══════════════════════════════════════════════════════════════════
169// litium-refer
170// ═══════════════════════════════════════════════════════════════════
171
172#[derive(Debug, Clone, Serialize, Deserialize)]
173#[serde(rename_all = "snake_case")]
174pub enum ReferQueryMsg {
175    Config {},
176    ReferrerOf { miner: String },
177    ReferralInfo { address: String },
178    CommunityPoolBalance {},
179}
180
181#[derive(Debug, Clone, Serialize, Deserialize)]
182#[serde(rename_all = "snake_case")]
183pub enum ReferExecuteMsg {
184    ClaimRewards {},
185}
186
187#[derive(Debug, Clone, Serialize, Deserialize)]
188pub struct ReferralInfoResponse {
189    pub address: String,
190    pub referral_rewards: String,
191    pub referrals_count: u64,
192}