use cosmwasm_schema::{cw_serde, QueryResponses};
use cosmwasm_std::Uint128;
#[cw_serde]
pub struct InstantiateMsg {
pub max_proof_age: u64,
pub estimated_gas_cost_uboot: Option<Uint128>,
pub core_contract: String,
pub stake_contract: String,
pub refer_contract: String,
pub token_contract: String,
pub admin: Option<String>,
pub window_size: Option<u32>,
pub pid_interval: Option<u64>,
pub genesis_time: Option<u64>,
pub warmup_base_rate: Uint128,
pub fee_bucket_duration: Option<u64>,
pub fee_num_buckets: Option<u32>,
}
#[cw_serde]
pub enum ExecuteMsg {
SubmitProof {
hash: String,
nonce: u64,
miner_address: String,
challenge: String,
difficulty: u32,
timestamp: u64,
referrer: Option<String>,
},
AccrueFees {
amount: Uint128,
},
UpdateConfig {
max_proof_age: Option<u64>,
admin: Option<String>,
estimated_gas_cost_uboot: Option<Uint128>,
core_contract: Option<String>,
stake_contract: Option<String>,
refer_contract: Option<String>,
warmup_base_rate: Option<Uint128>,
pid_interval: Option<u64>,
genesis_time: Option<u64>,
},
ApplyTestingOverrides {
overrides: TestingOverrides,
},
ResetState {
genesis_time: Option<u64>,
},
Pause {},
Unpause {},
}
#[cw_serde]
pub struct TestingOverrides {
pub max_proof_age: Option<u64>,
pub stats_total_proofs: Option<u64>,
pub stats_total_rewards: Option<Uint128>,
pub window_count: Option<u64>,
pub window_total_d: Option<u64>,
pub pid_alpha: Option<u64>,
pub pid_beta: Option<u64>,
pub override_windowed_fees: Option<Uint128>,
}
#[cw_serde]
#[derive(QueryResponses)]
pub enum QueryMsg {
#[returns(ConfigResponse)]
Config {},
#[returns(WindowStatusResponse)]
WindowStatus {},
#[returns(StatsResponse)]
Stats {},
#[returns(MinerStatsResponse)]
MinerStats { address: String },
#[returns(RewardCalculationResponse)]
CalculateReward { difficulty_bits: u32 },
#[returns(EmissionInfoResponse)]
EmissionInfo {},
}
#[cw_serde]
pub struct ConfigResponse {
pub max_proof_age: u64,
pub estimated_gas_cost_uboot: Uint128,
pub core_contract: String,
pub stake_contract: String,
pub refer_contract: String,
pub token_contract: String,
pub admin: String,
pub paused: bool,
pub window_size: u32,
pub pid_interval: u64,
pub genesis_time: u64,
pub min_profitable_difficulty: u32,
pub alpha: u64,
pub beta: u64,
pub fee_bucket_duration: u64,
pub fee_num_buckets: u32,
pub warmup_base_rate: Uint128,
}
#[cw_serde]
pub struct WindowStatusResponse {
pub proof_count: u64,
pub window_d_rate: String,
pub window_size: u32,
pub window_entries: u32,
pub base_rate: Uint128,
pub min_profitable_difficulty: u32,
pub alpha: String,
pub beta: String,
}
#[cw_serde]
pub struct EmissionInfoResponse {
pub alpha: u64,
pub beta: u64,
pub emission_rate: Uint128,
pub gross_rate: Uint128,
pub mining_rate: Uint128,
pub staking_rate: Uint128,
pub windowed_fees: Uint128,
}
#[cw_serde]
pub struct StatsResponse {
pub total_proofs: u64,
pub total_rewards: Uint128,
pub unique_miners: u64,
pub avg_difficulty: u32,
}
#[cw_serde]
pub struct MinerStatsResponse {
pub address: String,
pub proofs_submitted: u64,
pub total_rewards: Uint128,
pub last_proof_time: u64,
}
#[cw_serde]
pub struct RewardCalculationResponse {
pub gross_reward: Uint128,
pub estimated_gas_cost_uboot: Uint128,
pub earns_reward: bool,
}