mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-27 15:07:59 +00:00
grandpa: fix enacting forced changes with no delay (#6828)
* grandpa: fix enacting forced changes with no delay * grandpa: fix formatting
This commit is contained in:
@@ -356,8 +356,9 @@ where
|
||||
.take_while(|c| c.effective_number() <= best_number) // to prevent iterating too far
|
||||
.filter(|c| c.effective_number() == best_number)
|
||||
{
|
||||
// check if the given best block is in the same branch as the block that signaled the change.
|
||||
if is_descendent_of(&change.canon_hash, &best_hash)? {
|
||||
// check if the given best block is in the same branch as
|
||||
// the block that signaled the change.
|
||||
if change.canon_hash == best_hash || is_descendent_of(&change.canon_hash, &best_hash)? {
|
||||
// apply this change: make the set canonical
|
||||
afg_log!(initial_sync,
|
||||
"👴 Applying authority set change forced at block #{:?}",
|
||||
@@ -984,6 +985,43 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn forced_changes_with_no_delay() {
|
||||
// NOTE: this is a regression test
|
||||
let mut authorities = AuthoritySet {
|
||||
current_authorities: Vec::new(),
|
||||
set_id: 0,
|
||||
pending_standard_changes: ForkTree::new(),
|
||||
pending_forced_changes: Vec::new(),
|
||||
};
|
||||
|
||||
let set_a = vec![(AuthorityId::from_slice(&[1; 32]), 5)];
|
||||
|
||||
// we create a forced change with no delay
|
||||
let change_a = PendingChange {
|
||||
next_authorities: set_a.clone(),
|
||||
delay: 0,
|
||||
canon_height: 5,
|
||||
canon_hash: "hash_a",
|
||||
delay_kind: DelayKind::Best {
|
||||
median_last_finalized: 0,
|
||||
},
|
||||
};
|
||||
|
||||
// and import it
|
||||
authorities
|
||||
.add_pending_change(change_a, &static_is_descendent_of(false))
|
||||
.unwrap();
|
||||
|
||||
// it should be enacted at the same block that signaled it
|
||||
assert!(
|
||||
authorities
|
||||
.apply_forced_changes("hash_a", 5, &static_is_descendent_of(false), false)
|
||||
.unwrap()
|
||||
.is_some()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn next_change_works() {
|
||||
let current_authorities = vec![(AuthorityId::from_slice(&[1; 32]), 1)];
|
||||
|
||||
Reference in New Issue
Block a user