Skip to content

Commit

Permalink
Add ChunkValidatorStats::v1 function
Browse files Browse the repository at this point in the history
  • Loading branch information
birchmd committed Apr 20, 2024
1 parent c5d1afc commit 66a8124
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 73 deletions.
30 changes: 6 additions & 24 deletions chain/epoch-manager/src/reward_calculator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -249,10 +249,7 @@ mod tests {
"test2".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 0, expected: 1 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats {
produced: 0,
expected: 1,
}),
chunk_stats: ChunkValidatorStats::v1(0, 1),
},
),
]);
Expand Down Expand Up @@ -296,30 +293,21 @@ mod tests {
"test1".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 945, expected: 1000 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats {
produced: 945,
expected: 1000,
}),
chunk_stats: ChunkValidatorStats::v1(945, 1000),
},
),
(
"test2".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 999, expected: 1000 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats {
produced: 999,
expected: 1000,
}),
chunk_stats: ChunkValidatorStats::v1(999, 1000),
},
),
(
"test3".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 850, expected: 1000 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats {
produced: 850,
expected: 1000,
}),
chunk_stats: ChunkValidatorStats::v1(850, 1000),
},
),
]);
Expand Down Expand Up @@ -370,21 +358,15 @@ mod tests {
"test1".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 945, expected: 1000 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats {
produced: 945,
expected: 1000,
}),
chunk_stats: ChunkValidatorStats::v1(945, 1000),
},
),
// chunk only producer
(
"test2".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 0, expected: 0 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats {
produced: 999,
expected: 1000,
}),
chunk_stats: ChunkValidatorStats::v1(999, 1000),
},
),
// block only producer (not implemented right now, just for testing)
Expand Down
69 changes: 24 additions & 45 deletions chain/epoch-manager/src/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -729,7 +729,7 @@ fn test_validator_reward_one_validator() {
"test2".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 1, expected: 1 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats { produced: 1, expected: 1 }),
chunk_stats: ChunkValidatorStats::v1(1, 1),
},
);
let mut validator_stakes = HashMap::new();
Expand Down Expand Up @@ -819,14 +819,14 @@ fn test_validator_reward_weight_by_stake() {
"test1".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 1, expected: 1 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats { produced: 1, expected: 1 }),
chunk_stats: ChunkValidatorStats::v1(1, 1),
},
);
validator_online_ratio.insert(
"test2".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 1, expected: 1 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats { produced: 1, expected: 1 }),
chunk_stats: ChunkValidatorStats::v1(1, 1),
},
);
let mut validators_stakes = HashMap::new();
Expand Down Expand Up @@ -942,7 +942,7 @@ fn test_reward_multiple_shards() {
"test2".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 1, expected: 1 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats { produced: 1, expected: 1 }),
chunk_stats: ChunkValidatorStats::v1(1, 1),
},
);
let mut validators_stakes = HashMap::new();
Expand Down Expand Up @@ -2591,18 +2591,18 @@ fn test_validator_kickout_sanity() {
(
0,
HashMap::from([
(0, ChunkValidatorStats::V1(ValidatorStats { produced: 100, expected: 100 })),
(1, ChunkValidatorStats::V1(ValidatorStats { produced: 80, expected: 100 })),
(2, ChunkValidatorStats::V1(ValidatorStats { produced: 70, expected: 100 })),
(0, ChunkValidatorStats::v1(100, 100)),
(1, ChunkValidatorStats::v1(80, 100)),
(2, ChunkValidatorStats::v1(70, 100)),
]),
),
(
1,
HashMap::from([
(0, ChunkValidatorStats::V1(ValidatorStats { produced: 70, expected: 100 })),
(1, ChunkValidatorStats::V1(ValidatorStats { produced: 79, expected: 100 })),
(3, ChunkValidatorStats::V1(ValidatorStats { produced: 100, expected: 100 })),
(4, ChunkValidatorStats::V1(ValidatorStats { produced: 100, expected: 100 })),
(0, ChunkValidatorStats::v1(70, 100)),
(1, ChunkValidatorStats::v1(79, 100)),
(3, ChunkValidatorStats::v1(100, 100)),
(4, ChunkValidatorStats::v1(100, 100)),
]),
),
]),
Expand All @@ -2624,50 +2624,35 @@ fn test_validator_kickout_sanity() {
"test0".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 100, expected: 100 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats {
produced: 170,
expected: 200
})
chunk_stats: ChunkValidatorStats::v1(170, 200),
}
),
(
"test1".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 90, expected: 100 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats {
produced: 159,
expected: 200
})
chunk_stats: ChunkValidatorStats::v1(159, 200),
}
),
(
"test2".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 100, expected: 100 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats {
produced: 70,
expected: 100
})
chunk_stats: ChunkValidatorStats::v1(70, 100),
}
),
(
"test3".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 89, expected: 100 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats {
produced: 100,
expected: 100
})
chunk_stats: ChunkValidatorStats::v1(100, 100),
}
),
(
"test4".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 0, expected: 0 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats {
produced: 100,
expected: 100
})
chunk_stats: ChunkValidatorStats::v1(100, 100),
}
),
])
Expand Down Expand Up @@ -2711,15 +2696,15 @@ fn test_max_kickout_stake_ratio() {
(
0,
HashMap::from([
(0, ChunkValidatorStats::V1(ValidatorStats { produced: 0, expected: 100 })),
(1, ChunkValidatorStats::V1(ValidatorStats { produced: 0, expected: 100 })),
(0, ChunkValidatorStats::v1(0, 100)),
(1, ChunkValidatorStats::v1(0, 100)),
]),
),
(
1,
HashMap::from([
(2, ChunkValidatorStats::V1(ValidatorStats { produced: 100, expected: 100 })),
(4, ChunkValidatorStats::V1(ValidatorStats { produced: 50, expected: 100 })),
(2, ChunkValidatorStats::v1(100, 100)),
(4, ChunkValidatorStats::v1(50, 100)),
]),
),
]);
Expand Down Expand Up @@ -2750,24 +2735,21 @@ fn test_max_kickout_stake_ratio() {
"test0".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 50, expected: 100 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats { produced: 0, expected: 100 }),
chunk_stats: ChunkValidatorStats::v1(0, 100),
},
),
(
"test1".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 70, expected: 100 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats { produced: 0, expected: 100 }),
chunk_stats: ChunkValidatorStats::v1(0, 100),
},
),
(
"test2".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 70, expected: 100 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats {
produced: 100,
expected: 100,
}),
chunk_stats: ChunkValidatorStats::v1(100, 100),
},
),
(
Expand All @@ -2781,10 +2763,7 @@ fn test_max_kickout_stake_ratio() {
"test4".parse().unwrap(),
BlockChunkValidatorStats {
block_stats: ValidatorStats { produced: 0, expected: 0 },
chunk_stats: ChunkValidatorStats::V1(ValidatorStats {
produced: 50,
expected: 100,
}),
chunk_stats: ChunkValidatorStats::v1(50, 100),
},
),
]);
Expand Down
12 changes: 8 additions & 4 deletions core/primitives/src/types/chunk_validator_stats.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ impl ChunkValidatorStats {
})
}

pub const fn v1(produced: u64, expected: u64) -> Self {
Self::V1(ValidatorStats { produced, expected })
}

pub const fn new_with_endorsement(produced: u64, expected: u64) -> Self {
Self::V2(ChunkValidatorStatsV2 {
production: ValidatorStats { produced: 0, expected: 0 },
Expand Down Expand Up @@ -129,13 +133,13 @@ fn v1_v2_eq(v1: &ValidatorStats, v2: &ChunkValidatorStatsV2) -> bool {

#[test]
fn test_mutability() {
let mut stats = ChunkValidatorStats::V1(ValidatorStats::default());
let mut stats = ChunkValidatorStats::v1(0, 0);

*stats.expected_mut() += 1;
assert_eq!(stats, ChunkValidatorStats::V1(ValidatorStats { produced: 0, expected: 1 }));
assert_eq!(stats, ChunkValidatorStats::v1(0, 1));

*stats.produced_mut() += 1;
assert_eq!(stats, ChunkValidatorStats::V1(ValidatorStats { produced: 1, expected: 1 }));
assert_eq!(stats, ChunkValidatorStats::v1(1, 1));

// Getting endorsement stats for V1 automatically upgrades to V2.
let endorsement_stats = stats.endorsement_stats_mut();
Expand Down Expand Up @@ -185,7 +189,7 @@ fn test_mutability() {
fn test_eq() {
const PRODUCED: u64 = 123;
const EXPECTED: u64 = 456;
let v1 = ChunkValidatorStats::V1(ValidatorStats { produced: PRODUCED, expected: EXPECTED });
let v1 = ChunkValidatorStats::v1(PRODUCED, EXPECTED);
let v2 = ChunkValidatorStats::new_with_production(PRODUCED, EXPECTED);

// V1 and V2 can be equal if the endorsements parts of V2 are zero.
Expand Down

0 comments on commit 66a8124

Please sign in to comment.