pub const MOJO_PER_CHIA: u64 = 1_000_000_000_000;
pub const BLOCKS_PER_YEAR: u32 = 1_681_920;
#[must_use]
pub const fn calculate_pool_reward(height: u32) -> u64 {
if height == 0 {
(7_000_000_000_000 / 8) * 21_000_000
} else if height < 3 * BLOCKS_PER_YEAR {
7_000_000_000_000 / 4
} else if height < 6 * BLOCKS_PER_YEAR {
7_000_000_000_000 / 8
} else if height < 9 * BLOCKS_PER_YEAR {
7_000_000_000_000 / 16
} else if height < 12 * BLOCKS_PER_YEAR {
7_000_000_000_000 / 32
} else {
7_000_000_000_000 / 64
}
}
#[must_use]
pub const fn calculate_base_farmer_reward(height: u32) -> u64 {
if height == 0 {
(1_000_000_000_000 / 8) * 21_000_000
} else if height < 3 * BLOCKS_PER_YEAR {
1_000_000_000_000 / 4
} else if height < 6 * BLOCKS_PER_YEAR {
1_000_000_000_000 / 8
} else if height < 9 * BLOCKS_PER_YEAR {
1_000_000_000_000 / 16
} else if height < 12 * BLOCKS_PER_YEAR {
1_000_000_000_000 / 32
} else {
1_000_000_000_000 / 64
}
}
#[test]
fn test_reward_heights() {
assert_eq!(calculate_pool_reward(0), 18_375_000_000_000_000_000);
assert_eq!(calculate_pool_reward(1), 1_750_000_000_000);
assert_eq!(calculate_pool_reward(3 * BLOCKS_PER_YEAR), 875_000_000_000);
assert_eq!(calculate_pool_reward(6 * BLOCKS_PER_YEAR), 437_500_000_000);
assert_eq!(calculate_pool_reward(9 * BLOCKS_PER_YEAR), 218_750_000_000);
assert_eq!(calculate_pool_reward(12 * BLOCKS_PER_YEAR), 109_375_000_000);
assert_eq!(calculate_base_farmer_reward(0), 2_625_000_000_000_000_000);
assert_eq!(calculate_base_farmer_reward(1), 250_000_000_000);
assert_eq!(
calculate_base_farmer_reward(3 * BLOCKS_PER_YEAR),
125_000_000_000
);
assert_eq!(
calculate_base_farmer_reward(6 * BLOCKS_PER_YEAR),
62_500_000_000
);
assert_eq!(
calculate_base_farmer_reward(9 * BLOCKS_PER_YEAR),
31_250_000_000
);
assert_eq!(
calculate_base_farmer_reward(12 * BLOCKS_PER_YEAR),
15_625_000_000
);
assert_eq!(
calculate_base_farmer_reward(BLOCKS_PER_YEAR) + calculate_pool_reward(BLOCKS_PER_YEAR),
2_000_000_000_000
);
assert_eq!(
calculate_base_farmer_reward(3 * BLOCKS_PER_YEAR)
+ calculate_pool_reward(3 * BLOCKS_PER_YEAR),
1_000_000_000_000
);
assert_eq!(
calculate_base_farmer_reward(6 * BLOCKS_PER_YEAR)
+ calculate_pool_reward(6 * BLOCKS_PER_YEAR),
500_000_000_000
);
assert_eq!(
calculate_base_farmer_reward(9 * BLOCKS_PER_YEAR)
+ calculate_pool_reward(9 * BLOCKS_PER_YEAR),
250_000_000_000
);
assert_eq!(
calculate_base_farmer_reward(12 * BLOCKS_PER_YEAR)
+ calculate_pool_reward(12 * BLOCKS_PER_YEAR),
125_000_000_000
);
}