openzeppelin_relayer/bootstrap/
initialize_relayers.rs

1//! Relayer initialization
2//!
3//! This module contains functions for initializing relayers, ensuring they are
4//! properly configured and ready for operation.
5use crate::{
6    domain::{get_network_relayer, Relayer},
7    models::DefaultAppState,
8    repositories::Repository,
9};
10use actix_web::web::ThinData;
11
12use color_eyre::{eyre::WrapErr, Report, Result};
13use futures::future::try_join_all;
14use log::info;
15
16async fn initialize_relayer(
17    relayer_id: String,
18    app_state: ThinData<DefaultAppState>,
19) -> Result<()> {
20    let relayer_service = get_network_relayer(relayer_id.clone(), &app_state).await?;
21
22    info!("Initializing relayer: {}", relayer_id.clone());
23
24    relayer_service.initialize_relayer().await?;
25
26    Ok::<(), Report>(())
27}
28
29pub async fn initialize_relayers(app_state: ThinData<DefaultAppState>) -> Result<()> {
30    let relayers = app_state.relayer_repository.list_all().await?;
31
32    let relayer_futures = relayers.iter().map(|relayer| {
33        let app_state = app_state.clone();
34        async move { initialize_relayer(relayer.id.clone(), app_state).await }
35    });
36
37    try_join_all(relayer_futures)
38        .await
39        .wrap_err("Failed to initialize relayers")?;
40    Ok(())
41}