anya_core/tokenomics/
engine.rs1use crate::AnyaResult;
3use std::sync::Arc;
4
5#[derive(Clone, Debug)]
7pub struct TokenomicsConfig {
8 pub enabled: bool,
10 pub base_reward_rate: f64,
12 pub minimum_stake: u64,
14}
15
16impl Default for TokenomicsConfig {
17 fn default() -> Self {
18 Self {
19 enabled: true,
20 base_reward_rate: 0.05,
21 minimum_stake: 100,
22 }
23 }
24}
25
26pub struct TokenomicsEngine {
28 config: TokenomicsConfig,
29}
30
31impl TokenomicsEngine {
32 pub fn new(config: TokenomicsConfig) -> AnyaResult<Arc<Self>> {
34 Ok(Arc::new(Self { config }))
35 }
36
37 pub async fn setup(config: TokenomicsConfig) -> AnyaResult<Arc<Self>> {
39 Ok(Arc::new(Self { config }))
42 }
43
44 pub fn calculate_rewards(&self, stake_amount: u64, days: u32) -> f64 {
46 if !self.config.enabled || stake_amount < self.config.minimum_stake {
47 return 0.0;
48 }
49
50 let reward_rate = self.config.base_reward_rate;
51 let stake = stake_amount as f64;
52 let time = days as f64 / 365.0;
53
54 stake * reward_rate * time
55 }
56}