dig_network_block/
emission_config.rs1use thiserror::Error;
11
12#[derive(Clone, Debug, PartialEq, Eq)]
14pub struct ConsensusEmissionConfig {
15 pub proposer_reward_share: u64,
17 pub attester_reward_share: u64,
20}
21
22impl ConsensusEmissionConfig {
23 pub fn new(proposer_reward_share: u64, attester_reward_share: u64) -> Self {
25 Self {
26 proposer_reward_share,
27 attester_reward_share,
28 }
29 }
30
31 pub fn validate_for_attesters(&self, attesters_len: usize) -> Result<(), EmissionConfigError> {
36 if attesters_len == 0 && self.attester_reward_share > 0 {
37 return Err(EmissionConfigError::NonZeroAttesterShareWithNoAttesters);
38 }
39 Ok(())
40 }
41}
42
43#[derive(Debug, Error)]
45pub enum EmissionConfigError {
46 #[error("non-zero attester share configured but no attesters provided")]
48 NonZeroAttesterShareWithNoAttesters,
49}
50
51#[cfg(test)]
52mod tests {
53 use super::*;
54
55 #[test]
56 fn validate_zero_attesters_policy() {
57 let cfg = ConsensusEmissionConfig::new(12, 0);
58 assert!(cfg.validate_for_attesters(0).is_ok());
59
60 let cfg_bad = ConsensusEmissionConfig::new(12, 1);
61 let err = cfg_bad.validate_for_attesters(0).unwrap_err();
62 match err {
63 EmissionConfigError::NonZeroAttesterShareWithNoAttesters => {}
64 }
65 }
66
67 #[test]
68 fn validate_with_attesters_ok() {
69 let cfg = ConsensusEmissionConfig::new(12, 88);
70 assert!(cfg.validate_for_attesters(3).is_ok());
71 }
72}