From 1ce5cae3a4a2962cfd34712806b145f65c0030e9 Mon Sep 17 00:00:00 2001 From: Howard Wu <9260812+howardwu@users.noreply.github.com> Date: Sat, 25 Nov 2023 15:58:21 -0800 Subject: [PATCH 1/2] Fix the minimum committee size --- ledger/committee/src/lib.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ledger/committee/src/lib.rs b/ledger/committee/src/lib.rs index 5d81de4414..217ee8249d 100644 --- a/ledger/committee/src/lib.rs +++ b/ledger/committee/src/lib.rs @@ -49,16 +49,14 @@ impl Committee { /// Initializes a new `Committee` instance. pub fn new_genesis(members: IndexMap, (u64, bool)>) -> Result { - // Ensure there are exactly 4 members. - ensure!(members.len() == 4, "Genesis committee must have 4 members"); // Return the new committee. Self::new(0u64, members) } /// Initializes a new `Committee` instance. pub fn new(starting_round: u64, members: IndexMap, (u64, bool)>) -> Result { - // Ensure there are at least 4 members. - ensure!(members.len() >= 4, "Committee must have at least 4 members"); + // Ensure there are at least 3 members. + ensure!(members.len() >= 3, "Committee must have at least 3 members"); // Ensure there are no more than the maximum number of members. ensure!( members.len() <= Self::MAX_COMMITTEE_SIZE as usize, From 4690056e8a6106d7fa67249098cd05d3560caecb Mon Sep 17 00:00:00 2001 From: Howard Wu <9260812+howardwu@users.noreply.github.com> Date: Sat, 25 Nov 2023 16:26:50 -0800 Subject: [PATCH 2/2] Fix test --- ledger/committee/src/lib.rs | 2 +- ledger/committee/src/prop_tests.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ledger/committee/src/lib.rs b/ledger/committee/src/lib.rs index 217ee8249d..7d5072835a 100644 --- a/ledger/committee/src/lib.rs +++ b/ledger/committee/src/lib.rs @@ -374,7 +374,7 @@ mod tests { // Set the number of rounds. const NUM_ROUNDS: u64 = 256 * 2_000; // Sample the number of members. - let num_members = rng.gen_range(4..50); + let num_members = rng.gen_range(3..50); // Sample a committee. let committee = crate::test_helpers::sample_committee_custom(num_members, rng); // Check the leader distribution. diff --git a/ledger/committee/src/prop_tests.rs b/ledger/committee/src/prop_tests.rs index c66769fa98..f0aa2e7bb2 100644 --- a/ledger/committee/src/prop_tests.rs +++ b/ledger/committee/src/prop_tests.rs @@ -125,7 +125,7 @@ impl Arbitrary for ValidatorSet { fn arbitrary_with(_: Self::Parameters) -> Self::Strategy { // use minimal validator set to speed up tests that require signing from the committee members - validator_set(any_valid_validator(), size_range(4..=4usize)).boxed() + validator_set(any_valid_validator(), size_range(3..=4usize)).boxed() } } @@ -149,7 +149,7 @@ pub fn any_valid_private_key() -> BoxedStrategy> { #[allow(dead_code)] fn too_small_committee() -> BoxedStrategy>> { - (1u64.., validator_set(any_valid_validator(), 0..4)).prop_map(to_committee).boxed() + (1u64.., validator_set(any_valid_validator(), 0..3)).prop_map(to_committee).boxed() } #[allow(dead_code)] @@ -199,5 +199,5 @@ fn invalid_stakes(#[strategy(too_low_stake_committee())] committee: Result>) { - assert!(matches!(committee, Err(e) if e.to_string().as_str() == "Committee must have at least 4 members")) + assert!(matches!(committee, Err(e) if e.to_string().as_str() == "Committee must have at least 3 members")) }