mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-31 00:31:02 +00:00
Import multiple authority set change blocks (#1808)
* core: implement logic for tracking dag of possible pending changes * core: move pending justifications dag to its own crate * core: remove unnecessary clone bounds on dag * core: request justifications in-order from the dag * core: dag: rename changes variables to node * core: dag: allow finalizing blocks not part of dag * core: dag: track best finalized number * core: dag: add more tests * core: sync: clean up pending justifications dag * core: dag: derive codec decode encode * core: dag: better error support * core: dag: add finalization guarded by predicate * core: grandpa: track multiple authority set changes in dag * core: dag: add pre-order iterator * core: grandpa: request justifications on startup * core: dag: rearrange order of definitions * core: rename util/dag to util/fork_tree * core: fork_tree: add docs * core: fork_tree: add more tests * core: fork_tree: fix issues found in tests * core: grandpa: fix authorities tests * core: grandpa: add docs for is_descendent_of * core: sync: add docs for PendingJustifications * core: sync: add test for justification requests across forks * core: sync: don't resend import or finality notifications in tests * core: grandpa: add test for importing multiple change blocks * core: grandpa: fix logic for checking if a block enacts a change * core: grandpa: fix authorities tests
This commit is contained in:
@@ -45,12 +45,12 @@
|
||||
//! logic is complex to compute because it requires looking arbitrarily far
|
||||
//! back in the chain.
|
||||
//!
|
||||
//! Instead, we keep track of a list of all signals we've seen so far,
|
||||
//! sorted ascending by the block number they would be applied at. We never vote
|
||||
//! on chains with number higher than the earliest handoff block number
|
||||
//! (this is num(signal) + N). When finalizing a block, we either apply or prune
|
||||
//! any signaled changes based on whether the signaling block is included in the
|
||||
//! newly-finalized chain.
|
||||
//! Instead, we keep track of a list of all signals we've seen so far (across
|
||||
//! all forks), sorted ascending by the block number they would be applied at.
|
||||
//! We never vote on chains with number higher than the earliest handoff block
|
||||
//! number (this is num(signal) + N). When finalizing a block, we either apply
|
||||
//! or prune any signaled changes based on whether the signaling block is
|
||||
//! included in the newly-finalized chain.
|
||||
|
||||
use futures::prelude::*;
|
||||
use log::{debug, info, warn};
|
||||
@@ -169,6 +169,8 @@ pub enum Error {
|
||||
Blockchain(String),
|
||||
/// Could not complete a round on disk.
|
||||
Client(ClientError),
|
||||
/// An invariant has been violated (e.g. not finalizing pending change blocks in-order)
|
||||
Safety(String),
|
||||
/// A timer failed to fire.
|
||||
Timer(::tokio::timer::Error),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user