mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 03:31:05 +00:00
Add block event forwarding into the Overseer (#1192)
* Add block event forwarding into the Overseer * Add a doc comment * Fix a doc comment
This commit is contained in:
Generated
+1
@@ -3309,6 +3309,7 @@ dependencies = [
|
|||||||
"kv-log-macro",
|
"kv-log-macro",
|
||||||
"log 0.4.8",
|
"log 0.4.8",
|
||||||
"polkadot-primitives",
|
"polkadot-primitives",
|
||||||
|
"sc-client-api",
|
||||||
"streamunordered",
|
"streamunordered",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ log = "0.4.8"
|
|||||||
futures-timer = "3.0.2"
|
futures-timer = "3.0.2"
|
||||||
streamunordered = "0.5.1"
|
streamunordered = "0.5.1"
|
||||||
polkadot-primitives = { path = "../primitives" }
|
polkadot-primitives = { path = "../primitives" }
|
||||||
|
client = { package = "sc-client-api", git = "https://github.com/paritytech/substrate", branch = "master" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
futures = { version = "0.3.5", features = ["thread-pool"] }
|
futures = { version = "0.3.5", features = ["thread-pool"] }
|
||||||
|
|||||||
@@ -71,7 +71,8 @@ use futures::{
|
|||||||
use futures_timer::Delay;
|
use futures_timer::Delay;
|
||||||
use streamunordered::{StreamYield, StreamUnordered};
|
use streamunordered::{StreamYield, StreamUnordered};
|
||||||
|
|
||||||
use polkadot_primitives::{BlockNumber, Hash};
|
use polkadot_primitives::{Block, BlockNumber, Hash};
|
||||||
|
use client::{BlockImportNotification, BlockchainEvents, FinalityNotification};
|
||||||
|
|
||||||
/// An error type that describes faults that may happen
|
/// An error type that describes faults that may happen
|
||||||
///
|
///
|
||||||
@@ -154,6 +155,26 @@ pub struct BlockInfo {
|
|||||||
pub number: BlockNumber,
|
pub number: BlockNumber,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<BlockImportNotification<Block>> for BlockInfo {
|
||||||
|
fn from(n: BlockImportNotification<Block>) -> Self {
|
||||||
|
BlockInfo {
|
||||||
|
hash: n.hash,
|
||||||
|
parent_hash: n.header.parent_hash,
|
||||||
|
number: n.header.number,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<FinalityNotification<Block>> for BlockInfo {
|
||||||
|
fn from(n: FinalityNotification<Block>) -> Self {
|
||||||
|
BlockInfo {
|
||||||
|
hash: n.hash,
|
||||||
|
parent_hash: n.header.parent_hash,
|
||||||
|
number: n.header.number,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Some event from outer world.
|
/// Some event from outer world.
|
||||||
enum Event {
|
enum Event {
|
||||||
BlockImported(BlockInfo),
|
BlockImported(BlockInfo),
|
||||||
@@ -172,6 +193,7 @@ pub enum OutboundMessage {
|
|||||||
/// A handler used to communicate with the [`Overseer`].
|
/// A handler used to communicate with the [`Overseer`].
|
||||||
///
|
///
|
||||||
/// [`Overseer`]: struct.Overseer.html
|
/// [`Overseer`]: struct.Overseer.html
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct OverseerHandler {
|
pub struct OverseerHandler {
|
||||||
events_tx: mpsc::Sender<Event>,
|
events_tx: mpsc::Sender<Event>,
|
||||||
}
|
}
|
||||||
@@ -206,6 +228,43 @@ impl OverseerHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Glues together the [`Overseer`] and `BlockchainEvents` by forwarding
|
||||||
|
/// import and finality notifications into the [`OverseerHandler`].
|
||||||
|
///
|
||||||
|
/// [`Overseer`]: struct.Overseer.html
|
||||||
|
/// [`OverseerHandler`]: struct.OverseerHandler.html
|
||||||
|
pub async fn forward_events<P: BlockchainEvents<Block>>(
|
||||||
|
client: P,
|
||||||
|
mut handler: OverseerHandler,
|
||||||
|
) -> SubsystemResult<()> {
|
||||||
|
let mut finality = client.finality_notification_stream();
|
||||||
|
let mut imports = client.import_notification_stream();
|
||||||
|
|
||||||
|
loop {
|
||||||
|
select! {
|
||||||
|
f = finality.next() => {
|
||||||
|
match f {
|
||||||
|
Some(block) => {
|
||||||
|
handler.block_finalized(block.into()).await?;
|
||||||
|
}
|
||||||
|
None => break,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
i = imports.next() => {
|
||||||
|
match i {
|
||||||
|
Some(block) => {
|
||||||
|
handler.block_imported(block.into()).await?;
|
||||||
|
}
|
||||||
|
None => break,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
complete => break,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
impl Debug for ToOverseer {
|
impl Debug for ToOverseer {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
|
|||||||
Reference in New Issue
Block a user