use std::fmt::Display;
use async_trait::async_trait;
use crate::{
phron_primitives::BlockNumber,
party::{backup::ABFTBackup, manager::AuthorityTask},
AuthorityId, NodeIndex, SessionId,
};
pub trait ChainState {
fn best_block_number(&self) -> BlockNumber;
fn finalized_number(&self) -> BlockNumber;
}
#[async_trait]
pub trait NodeSessionManager {
type Error: Display;
async fn spawn_authority_task_for_session(
&self,
session: SessionId,
node_id: NodeIndex,
backup: ABFTBackup,
authorities: &[AuthorityId],
) -> AuthorityTask;
fn early_start_validator_session(
&self,
session: SessionId,
node_id: NodeIndex,
authorities: &[AuthorityId],
) -> Result<(), Self::Error>;
fn start_nonvalidator_session(
&self,
session: SessionId,
authorities: &[AuthorityId],
) -> Result<(), Self::Error>;
fn stop_session(&self, session: SessionId) -> Result<(), Self::Error>;
fn node_idx(&self, authorities: &[AuthorityId]) -> Option<NodeIndex>;
}