substrate_relay_helper/cli/
detect_equivocations.rs1use crate::{
20 cli::{bridge::*, chain_schema::*, PrometheusParams},
21 equivocation,
22 equivocation::SubstrateEquivocationDetectionPipeline,
23};
24
25use async_trait::async_trait;
26use clap::Parser;
27use relay_substrate_client::{ChainWithTransactions, Client};
28
29#[derive(Parser)]
31pub struct DetectEquivocationsParams {
32 #[command(flatten)]
33 source: SourceConnectionParams,
34 #[command(flatten)]
35 source_sign: SourceSigningParams,
36 #[command(flatten)]
37 target: TargetConnectionParams,
38 #[command(flatten)]
39 prometheus_params: PrometheusParams,
40}
41
42#[async_trait]
44pub trait EquivocationsDetector: RelayToRelayEquivocationDetectionCliBridge
45where
46 Self::Source: ChainWithTransactions,
47{
48 async fn start(data: DetectEquivocationsParams) -> anyhow::Result<()> {
50 let source_client = data.source.into_client::<Self::Source>().await?;
51 Self::Equivocation::start_relay_guards(
52 &source_client,
53 source_client.can_start_version_guard(),
54 )
55 .await?;
56
57 equivocation::run::<Self::Equivocation>(
58 source_client,
59 data.target.into_client::<Self::Target>().await?,
60 data.source_sign.transaction_params::<Self::Source>()?,
61 data.prometheus_params.into_metrics_params()?,
62 )
63 .await
64 }
65}