sui_bridge/sui_bridge_watchdog/
eth_bridge_status.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4//! The EthBridgeStatus observable monitors whether the Eth Bridge is paused.
5
6use crate::abi::EthSuiBridge::EthSuiBridgeInstance;
7use crate::sui_bridge_watchdog::Observable;
8use crate::utils::EthProvider;
9use alloy::primitives::Address as EthAddress;
10use async_trait::async_trait;
11use prometheus::IntGauge;
12use tokio::time::Duration;
13use tracing::{error, info};
14
15pub struct EthBridgeStatus {
16    bridge_contract: EthSuiBridgeInstance<EthProvider>,
17    metric: IntGauge,
18}
19
20impl EthBridgeStatus {
21    pub fn new(provider: EthProvider, bridge_address: EthAddress, metric: IntGauge) -> Self {
22        let bridge_contract = EthSuiBridgeInstance::new(bridge_address, provider.clone());
23        Self {
24            bridge_contract,
25            metric,
26        }
27    }
28}
29
30#[async_trait]
31impl Observable for EthBridgeStatus {
32    fn name(&self) -> &str {
33        "EthBridgeStatus"
34    }
35
36    async fn observe_and_report(&self) {
37        let status = self.bridge_contract.paused().call().await;
38        match status {
39            Ok(status) => {
40                self.metric.set(status as i64);
41                info!("Eth Bridge Status: {:?}", status);
42            }
43            Err(e) => {
44                error!("Error getting eth bridge status: {:?}", e);
45            }
46        }
47    }
48
49    fn interval(&self) -> Duration {
50        Duration::from_secs(10)
51    }
52}