Beefy: Provide well-formed ValidatorSet (#10445)

* beefy: provide well-formed ValidatorSet

* pallet-beefy: use well-formed ValidatorSet

* pallet-beefy-mmr: use well-formed ValidatorSet

* beefy-gadget: fail votes early when ValidatorSet empty

* beefy: small efficiency improvements

* address review comments

Signed-off-by: acatangiu <adrian@parity.io>
This commit is contained in:
Adrian Catangiu
2021-12-21 16:34:32 +02:00
committed by GitHub
parent 2d347e68f2
commit 3d8ce67383
7 changed files with 146 additions and 99 deletions
+11 -9
View File
@@ -97,8 +97,10 @@ pub mod pallet {
impl<T: Config> Pallet<T> {
/// Return the current active BEEFY validator set.
pub fn validator_set() -> ValidatorSet<T::BeefyId> {
ValidatorSet::<T::BeefyId> { validators: Self::authorities(), id: Self::validator_set_id() }
pub fn validator_set() -> Option<ValidatorSet<T::BeefyId>> {
let validators: Vec<T::BeefyId> = Self::authorities();
let id: beefy_primitives::ValidatorSetId = Self::validator_set_id();
ValidatorSet::<T::BeefyId>::new(validators, id)
}
fn change_authorities(new: Vec<T::BeefyId>, queued: Vec<T::BeefyId>) {
@@ -109,13 +111,13 @@ impl<T: Config> Pallet<T> {
let next_id = Self::validator_set_id() + 1u64;
<ValidatorSetId<T>>::put(next_id);
let log = DigestItem::Consensus(
BEEFY_ENGINE_ID,
ConsensusLog::AuthoritiesChange(ValidatorSet { validators: new, id: next_id })
.encode(),
);
<frame_system::Pallet<T>>::deposit_log(log);
if let Some(validator_set) = ValidatorSet::<T::BeefyId>::new(new, next_id) {
let log = DigestItem::Consensus(
BEEFY_ENGINE_ID,
ConsensusLog::AuthoritiesChange(validator_set).encode(),
);
<frame_system::Pallet<T>>::deposit_log(log);
}
}
<NextAuthorities<T>>::put(&queued);
+15 -16
View File
@@ -70,10 +70,9 @@ fn session_change_updates_authorities() {
assert!(1 == Beefy::validator_set_id());
let want = beefy_log(ConsensusLog::AuthoritiesChange(ValidatorSet {
validators: vec![mock_beefy_id(3), mock_beefy_id(4)],
id: 1,
}));
let want = beefy_log(ConsensusLog::AuthoritiesChange(
ValidatorSet::new(vec![mock_beefy_id(3), mock_beefy_id(4)], 1).unwrap(),
));
let log = System::digest().logs[0].clone();
@@ -109,11 +108,11 @@ fn validator_set_at_genesis() {
let want = vec![mock_beefy_id(1), mock_beefy_id(2)];
new_test_ext(vec![1, 2, 3, 4]).execute_with(|| {
let vs = Beefy::validator_set();
let vs = Beefy::validator_set().unwrap();
assert_eq!(vs.id, 0u64);
assert_eq!(vs.validators[0], want[0]);
assert_eq!(vs.validators[1], want[1]);
assert_eq!(vs.id(), 0u64);
assert_eq!(vs.validators()[0], want[0]);
assert_eq!(vs.validators()[1], want[1]);
});
}
@@ -124,18 +123,18 @@ fn validator_set_updates_work() {
new_test_ext(vec![1, 2, 3, 4]).execute_with(|| {
init_block(1);
let vs = Beefy::validator_set();
let vs = Beefy::validator_set().unwrap();
assert_eq!(vs.id, 0u64);
assert_eq!(want[0], vs.validators[0]);
assert_eq!(want[1], vs.validators[1]);
assert_eq!(vs.id(), 0u64);
assert_eq!(want[0], vs.validators()[0]);
assert_eq!(want[1], vs.validators()[1]);
init_block(2);
let vs = Beefy::validator_set();
let vs = Beefy::validator_set().unwrap();
assert_eq!(vs.id, 1u64);
assert_eq!(want[2], vs.validators[0]);
assert_eq!(want[3], vs.validators[1]);
assert_eq!(vs.id(), 1u64);
assert_eq!(want[2], vs.validators()[0]);
assert_eq!(want[3], vs.validators()[1]);
});
}