diff --git a/roles/jd-client/src/lib/job_declarator/mod.rs b/roles/jd-client/src/lib/job_declarator/mod.rs index 1c019c85d..b9d0a9af2 100644 --- a/roles/jd-client/src/lib/job_declarator/mod.rs +++ b/roles/jd-client/src/lib/job_declarator/mod.rs @@ -11,7 +11,7 @@ use roles_logic_sv2::{ template_distribution_sv2::SetNewPrevHash, utils::{hash_lists_tuple, Mutex}, }; -use std::{collections::HashMap, convert::TryInto, str::FromStr}; +use std::{collections::HashMap, convert::TryInto}; use stratum_common::bitcoin::{util::psbt::serialize::Deserialize, Transaction}; use tokio::task::AbortHandle; use tracing::{error, info}; @@ -25,7 +25,7 @@ use roles_logic_sv2::{ utils::Id, }; use std::{ - net::{IpAddr, SocketAddr}, + net::SocketAddr, sync::Arc, }; @@ -90,17 +90,12 @@ impl JobDeclarator { .await .expect("impossible to connect"); - let proxy_address = SocketAddr::new( - IpAddr::from_str(&config.downstream_address).unwrap(), - config.downstream_port, - ); - info!( "JD proxy: setupconnection Proxy address: {:?}", - proxy_address + config.listen_address ); - SetupConnectionHandler::setup(&mut receiver, &mut sender, proxy_address) + SetupConnectionHandler::setup(&mut receiver, &mut sender, config.listen_address) .await .unwrap(); diff --git a/roles/jd-client/src/lib/mod.rs b/roles/jd-client/src/lib/mod.rs index 6c68bd8e4..8d3457158 100644 --- a/roles/jd-client/src/lib/mod.rs +++ b/roles/jd-client/src/lib/mod.rs @@ -194,6 +194,11 @@ impl JobDeclaratorClient { } } + + pub fn is_listening(&self) -> bool { + std::net::TcpStream::connect(self.config.listen_address).is_ok() + } + async fn initialize_jd_as_solo_miner( proxy_config: ProxyConfig, tx_status: async_channel::Sender>, @@ -206,15 +211,9 @@ impl JobDeclaratorClient { // SubmitSolution and send it to the TemplateReceiver let (send_solution, recv_solution) = bounded(10); - // Format `Downstream` connection address - let downstream_addr = SocketAddr::new( - IpAddr::from_str(&proxy_config.downstream_address).unwrap(), - proxy_config.downstream_port, - ); - // Wait for downstream to connect let downstream = downstream::listen_for_downstream_mining( - downstream_addr, + proxy_config.listen_address, None, send_solution, proxy_config.withhold, @@ -319,12 +318,6 @@ impl JobDeclaratorClient { panic!() } - // Format `Downstream` connection address - let downstream_addr = SocketAddr::new( - IpAddr::from_str(&proxy_config.downstream_address).unwrap(), - proxy_config.downstream_port, - ); - // Initialize JD part let mut parts = proxy_config.tp_address.split(':'); let ip_tp = parts.next().unwrap().to_string(); @@ -355,7 +348,7 @@ impl JobDeclaratorClient { // Wait for downstream to connect let downstream = match downstream::listen_for_downstream_mining( - downstream_addr, + proxy_config.listen_address, Some(upstream), send_solution, proxy_config.withhold, diff --git a/roles/jd-client/src/lib/proxy_config.rs b/roles/jd-client/src/lib/proxy_config.rs index f1df8fc45..36cceedf2 100644 --- a/roles/jd-client/src/lib/proxy_config.rs +++ b/roles/jd-client/src/lib/proxy_config.rs @@ -3,6 +3,7 @@ use key_utils::{Secp256k1PublicKey, Secp256k1SecretKey}; use roles_logic_sv2::{errors::Error, utils::CoinbaseOutput as CoinbaseOutput_}; use serde::Deserialize; use std::time::Duration; +use std::net::SocketAddr; use stratum_common::bitcoin::TxOut; #[derive(Debug, Deserialize, Clone)] @@ -36,8 +37,7 @@ impl TryFrom<&CoinbaseOutput> for CoinbaseOutput_ { #[derive(Debug, Deserialize, Clone)] pub struct ProxyConfig { - pub downstream_address: String, - pub downstream_port: u16, + pub listen_address: SocketAddr, pub max_supported_version: u16, pub min_supported_version: u16, pub min_extranonce2_size: u16, @@ -118,7 +118,7 @@ impl ProtocolConfig { impl ProxyConfig { pub fn new( - listening_address: std::net::SocketAddr, + listen_address: std::net::SocketAddr, protocol_config: ProtocolConfig, withhold: bool, pool_config: PoolConfig, @@ -127,8 +127,7 @@ impl ProxyConfig { timeout: Duration, ) -> Self { Self { - downstream_address: listening_address.ip().to_string(), - downstream_port: listening_address.port(), + listen_address, max_supported_version: protocol_config.max_supported_version, min_supported_version: protocol_config.min_supported_version, min_extranonce2_size: protocol_config.min_extranonce2_size,