diff --git a/mithril-relay/src/commands/signer.rs b/mithril-relay/src/commands/signer.rs index 67d7b5f32ca..cf9982e0960 100644 --- a/mithril-relay/src/commands/signer.rs +++ b/mithril-relay/src/commands/signer.rs @@ -1,3 +1,5 @@ +use std::time::Duration; + use clap::Parser; use config::{builder::DefaultState, ConfigBuilder}; use libp2p::Multiaddr; @@ -23,6 +25,10 @@ pub struct SignerCommand { /// Aggregator endpoint URL. #[clap(long, env = "AGGREGATOR_ENDPOINT")] aggregator_endpoint: String, + + /// Signer registration repeater delay in milliseconds (defaults to 1 hour) + #[clap(long, env = "SIGNER_REPEATER_DELAY", default_value_t = 3_600 * 1_000)] + signer_repeater_delay: u64, } impl SignerCommand { @@ -32,8 +38,15 @@ impl SignerCommand { let dial_to = self.dial_to.to_owned(); let addr: Multiaddr = format!("/ip4/0.0.0.0/tcp/{}", self.listen_port).parse()?; let aggregator_endpoint = self.aggregator_endpoint.to_owned(); - - let mut relay = SignerRelay::start(&addr, &server_port, &aggregator_endpoint).await?; + let signer_repeater_delay = Duration::from_millis(self.signer_repeater_delay.to_owned()); + + let mut relay = SignerRelay::start( + &addr, + &server_port, + &aggregator_endpoint, + &signer_repeater_delay, + ) + .await?; if let Some(dial_to_address) = dial_to { relay.dial_peer(dial_to_address.clone())?; } diff --git a/mithril-relay/src/relay/signer.rs b/mithril-relay/src/relay/signer.rs index 3c5cd46e7ed..7a7c57930cf 100644 --- a/mithril-relay/src/relay/signer.rs +++ b/mithril-relay/src/relay/signer.rs @@ -28,12 +28,15 @@ impl SignerRelay { address: &Multiaddr, server_port: &u16, aggregator_endpoint: &str, + signer_repeater_delay: &Duration, ) -> StdResult { debug!("SignerRelay: starting..."); let (signature_tx, signature_rx) = unbounded_channel::(); let (signer_tx, signer_rx) = unbounded_channel::(); - let repeat_frequency = Duration::from_secs(30); - let signer_repeater = Arc::new(MessageRepeater::new(signer_tx.clone(), repeat_frequency)); + let signer_repeater = Arc::new(MessageRepeater::new( + signer_tx.clone(), + signer_repeater_delay.to_owned(), + )); let peer = Peer::new(address).start().await?; let server = Self::start_http_server( server_port, diff --git a/mithril-relay/tests/register_signer_signature.rs b/mithril-relay/tests/register_signer_signature.rs index 3a80990563d..4e706aa6882 100644 --- a/mithril-relay/tests/register_signer_signature.rs +++ b/mithril-relay/tests/register_signer_signature.rs @@ -1,4 +1,4 @@ -use std::sync::Arc; +use std::{sync::Arc, time::Duration}; use libp2p::{gossipsub, Multiaddr}; use mithril_common::messages::{RegisterSignatureMessage, RegisterSignerMessage}; @@ -35,9 +35,15 @@ async fn should_receive_registrations_from_signers_when_subscribed_to_pubsub() { let addr: Multiaddr = "/ip4/0.0.0.0/tcp/0".parse().unwrap(); let server_port = 0; let aggregator_endpoint = "http://0.0.0.0:1234".to_string(); - let mut signer_relay = SignerRelay::start(&addr, &server_port, &aggregator_endpoint) - .await - .expect("Relay start failed"); + let signer_repeater_delay = Duration::from_secs(100); + let mut signer_relay = SignerRelay::start( + &addr, + &server_port, + &aggregator_endpoint, + &signer_repeater_delay, + ) + .await + .expect("Relay start failed"); let relay_address = signer_relay.address(); let relay_peer_address = signer_relay.peer_address().unwrap(); info!("Test: relay_address is '{relay_address:?}'");