mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-28 16:47:57 +00:00
f+1 validators always approve (#2699)
* f+1 always approves * guide * grumbles * grumbles * fix test * fix tests * Update roadmap/implementers-guide/src/node/approval/approval-voting.md Co-authored-by: Sergei Shulepov <sergei@parity.io> Co-authored-by: Sergei Shulepov <sergei@parity.io>
This commit is contained in:
committed by
GitHub
parent
e4d0afabce
commit
349879df6b
@@ -869,7 +869,52 @@ fn check_and_apply_full_approval_does_not_load_cached_block_from_db() {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn assignment_triggered_by_all_with_less_than_supermajority() {
|
||||
fn assignment_triggered_by_all_with_less_than_threshold() {
|
||||
let block_hash = Hash::repeat_byte(0x01);
|
||||
|
||||
let mut candidate_entry: CandidateEntry = {
|
||||
let approval_entry = approval_db::v1::ApprovalEntry {
|
||||
tranches: Vec::new(),
|
||||
backing_group: GroupIndex(0),
|
||||
our_assignment: Some(approval_db::v1::OurAssignment {
|
||||
cert: garbage_assignment_cert(
|
||||
AssignmentCertKind::RelayVRFModulo { sample: 0 }
|
||||
),
|
||||
tranche: 1,
|
||||
validator_index: ValidatorIndex(4),
|
||||
triggered: false,
|
||||
}),
|
||||
assignments: bitvec::bitvec![BitOrderLsb0, u8; 0; 4],
|
||||
approved: false,
|
||||
};
|
||||
|
||||
approval_db::v1::CandidateEntry {
|
||||
candidate: Default::default(),
|
||||
session: 1,
|
||||
block_assignments: vec![(block_hash, approval_entry)].into_iter().collect(),
|
||||
approvals: bitvec::bitvec![BitOrderLsb0, u8; 0; 4],
|
||||
}.into()
|
||||
};
|
||||
|
||||
// 1-of-4
|
||||
candidate_entry
|
||||
.approval_entry_mut(&block_hash)
|
||||
.unwrap()
|
||||
.import_assignment(0, ValidatorIndex(0), 0);
|
||||
|
||||
candidate_entry.mark_approval(ValidatorIndex(0));
|
||||
|
||||
let tranche_now = 1;
|
||||
assert!(should_trigger_assignment(
|
||||
candidate_entry.approval_entry(&block_hash).unwrap(),
|
||||
&candidate_entry,
|
||||
RequiredTranches::All,
|
||||
tranche_now,
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn assignment_not_triggered_by_all_with_threshold() {
|
||||
let block_hash = Hash::repeat_byte(0x01);
|
||||
|
||||
let mut candidate_entry: CandidateEntry = {
|
||||
@@ -910,63 +955,6 @@ fn assignment_triggered_by_all_with_less_than_supermajority() {
|
||||
candidate_entry.mark_approval(ValidatorIndex(0));
|
||||
candidate_entry.mark_approval(ValidatorIndex(1));
|
||||
|
||||
let tranche_now = 1;
|
||||
assert!(should_trigger_assignment(
|
||||
candidate_entry.approval_entry(&block_hash).unwrap(),
|
||||
&candidate_entry,
|
||||
RequiredTranches::All,
|
||||
tranche_now,
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn assignment_not_triggered_by_all_with_supermajority() {
|
||||
let block_hash = Hash::repeat_byte(0x01);
|
||||
|
||||
let mut candidate_entry: CandidateEntry = {
|
||||
let approval_entry = approval_db::v1::ApprovalEntry {
|
||||
tranches: Vec::new(),
|
||||
backing_group: GroupIndex(0),
|
||||
our_assignment: Some(approval_db::v1::OurAssignment {
|
||||
cert: garbage_assignment_cert(
|
||||
AssignmentCertKind::RelayVRFModulo { sample: 0 }
|
||||
),
|
||||
tranche: 1,
|
||||
validator_index: ValidatorIndex(4),
|
||||
triggered: false,
|
||||
}),
|
||||
assignments: bitvec::bitvec![BitOrderLsb0, u8; 0; 4],
|
||||
approved: false,
|
||||
};
|
||||
|
||||
approval_db::v1::CandidateEntry {
|
||||
candidate: Default::default(),
|
||||
session: 1,
|
||||
block_assignments: vec![(block_hash, approval_entry)].into_iter().collect(),
|
||||
approvals: bitvec::bitvec![BitOrderLsb0, u8; 0; 4],
|
||||
}.into()
|
||||
};
|
||||
|
||||
// 3-of-4
|
||||
candidate_entry
|
||||
.approval_entry_mut(&block_hash)
|
||||
.unwrap()
|
||||
.import_assignment(0, ValidatorIndex(0), 0);
|
||||
|
||||
candidate_entry
|
||||
.approval_entry_mut(&block_hash)
|
||||
.unwrap()
|
||||
.import_assignment(0, ValidatorIndex(1), 0);
|
||||
|
||||
candidate_entry
|
||||
.approval_entry_mut(&block_hash)
|
||||
.unwrap()
|
||||
.import_assignment(0, ValidatorIndex(2), 0);
|
||||
|
||||
candidate_entry.mark_approval(ValidatorIndex(0));
|
||||
candidate_entry.mark_approval(ValidatorIndex(1));
|
||||
candidate_entry.mark_approval(ValidatorIndex(2));
|
||||
|
||||
let tranche_now = 1;
|
||||
assert!(!should_trigger_assignment(
|
||||
candidate_entry.approval_entry(&block_hash).unwrap(),
|
||||
|
||||
Reference in New Issue
Block a user