mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 09:21:05 +00:00
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:
@@ -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);
|
||||
|
||||
@@ -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]);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user