use zksync_concurrency::ctx;
use zksync_config::configs::consensus::{ConsensusConfig, ConsensusSecrets};
use zksync_dal::Core;
use zksync_node_sync::{sync_action::ActionQueueSender, SyncState};
use zksync_web3_decl::client::{DynClient, L2};
use super::{en, mn, storage::ConnectionPool};
pub async fn run_main_node(
ctx: &ctx::Ctx,
cfg: ConsensusConfig,
secrets: ConsensusSecrets,
pool: zksync_dal::ConnectionPool<Core>,
) -> anyhow::Result<()> {
if let Err(err) = mn::run_main_node(ctx, cfg, secrets, ConnectionPool(pool)).await {
tracing::error!("Consensus actor failed: {err:#}");
} else {
tracing::info!("Consensus actor stopped");
}
Ok(())
}
pub async fn run_external_node(
ctx: &ctx::Ctx,
cfg: Option<(ConsensusConfig, ConsensusSecrets)>,
pool: zksync_dal::ConnectionPool<Core>,
sync_state: SyncState,
main_node_client: Box<DynClient<L2>>,
actions: ActionQueueSender,
) -> anyhow::Result<()> {
let en = en::EN {
pool: ConnectionPool(pool),
sync_state: sync_state.clone(),
client: main_node_client.for_component("block_fetcher"),
};
let res = match cfg {
Some((cfg, secrets)) => en.run(ctx, actions, cfg, secrets).await,
None => en.run_fetcher(ctx, actions).await,
};
tracing::info!("Consensus actor stopped");
res
}