Skip to content

Commit bd48588

Browse files
committed
fetch pool urls from server
1 parent 9829a70 commit bd48588

3 files changed

Lines changed: 59 additions & 106 deletions

File tree

src/config.rs

Lines changed: 51 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use std::{
77
};
88
use tracing::{debug, error, info, warn};
99

10-
use crate::{HashUnit, DEFAULT_SV1_HASHPOWER};
10+
use crate::{HashUnit, DEFAULT_SV1_HASHPOWER, PRODUCTION_URL, STAGING_URL};
1111
lazy_static! {
1212
pub static ref CONFIG: Configuration = Configuration::load_config();
1313
}
@@ -29,12 +29,6 @@ struct Args {
2929
delay: Option<u64>,
3030
#[clap(long = "interval", short = 'i')]
3131
adjustment_interval: Option<u64>,
32-
#[clap(long = "pool", short = 'p', value_delimiter = ',')]
33-
pool_addresses: Option<Vec<String>>,
34-
#[clap(long = "staging-pool", value_delimiter = ',')]
35-
staging_pool_addresses: Option<Vec<String>>,
36-
#[clap(long = "local-pool", value_delimiter = ',')]
37-
local_pool_addresses: Option<Vec<String>>,
3832
#[clap(long)]
3933
token: Option<String>,
4034
#[clap(long)]
@@ -55,9 +49,6 @@ struct Args {
5549
struct ConfigFile {
5650
token: Option<String>,
5751
tp_address: Option<String>,
58-
pool_addresses: Option<Vec<String>>,
59-
staging_pool_addresses: Option<Vec<String>>,
60-
local_pool_addresses: Option<Vec<String>>,
6152
interval: Option<u64>,
6253
delay: Option<u64>,
6354
downstream_hashrate: Option<String>,
@@ -77,9 +68,6 @@ impl ConfigFile {
7768
ConfigFile {
7869
token: None,
7970
tp_address: None,
80-
pool_addresses: None,
81-
staging_pool_addresses: None,
82-
local_pool_addresses: None,
8371
interval: None,
8472
delay: None,
8573
downstream_hashrate: None,
@@ -99,9 +87,6 @@ impl ConfigFile {
9987
pub struct Configuration {
10088
token: Option<String>,
10189
tp_address: Option<String>,
102-
pool_addresses: Option<Vec<SocketAddr>>,
103-
staging_pool_addresses: Option<Vec<SocketAddr>>,
104-
local_pool_addresses: Option<Vec<SocketAddr>>,
10590
interval: u64,
10691
delay: u64,
10792
downstream_hashrate: f32,
@@ -124,14 +109,8 @@ impl Configuration {
124109
CONFIG.tp_address.clone()
125110
}
126111

127-
pub fn pool_address() -> Option<Vec<SocketAddr>> {
128-
if CONFIG.staging {
129-
CONFIG.staging_pool_addresses.clone() // Return staging pool addresses
130-
} else if CONFIG.local {
131-
CONFIG.local_pool_addresses.clone() // Return local pool addresses
132-
} else {
133-
CONFIG.pool_addresses.clone() // Return production pool addresses
134-
}
112+
pub async fn pool_address() -> Option<Vec<SocketAddr>> {
113+
fetch_pool_urls().await
135114
}
136115

137116
pub fn adjustment_interval() -> u64 {
@@ -232,78 +211,6 @@ impl Configuration {
232211
.or(config.tp_address)
233212
.or_else(|| std::env::var("TP_ADDRESS").ok());
234213

235-
let pool_addresses: Option<Vec<SocketAddr>> = args
236-
.pool_addresses
237-
.map(|addresses| {
238-
addresses
239-
.into_iter()
240-
.map(parse_address)
241-
.collect::<Vec<SocketAddr>>()
242-
})
243-
.or_else(|| {
244-
config.pool_addresses.map(|addresses| {
245-
addresses
246-
.into_iter()
247-
.map(parse_address)
248-
.collect::<Vec<SocketAddr>>()
249-
})
250-
})
251-
.or_else(|| {
252-
std::env::var("POOL_ADDRESSES").ok().map(|s| {
253-
s.split(',')
254-
.map(|s| parse_address(s.trim().to_string()))
255-
.collect::<Vec<SocketAddr>>()
256-
})
257-
});
258-
259-
let staging_pool_addresses: Option<Vec<SocketAddr>> = args
260-
.staging_pool_addresses
261-
.map(|addresses| {
262-
addresses
263-
.into_iter()
264-
.map(parse_address)
265-
.collect::<Vec<SocketAddr>>()
266-
})
267-
.or_else(|| {
268-
config.staging_pool_addresses.map(|addresses| {
269-
addresses
270-
.into_iter()
271-
.map(parse_address)
272-
.collect::<Vec<SocketAddr>>()
273-
})
274-
})
275-
.or_else(|| {
276-
std::env::var("STAGING_POOL_ADDRESSES").ok().map(|s| {
277-
s.split(',')
278-
.map(|s| parse_address(s.trim().to_string()))
279-
.collect::<Vec<SocketAddr>>()
280-
})
281-
});
282-
283-
let local_pool_addresses: Option<Vec<SocketAddr>> = args
284-
.local_pool_addresses
285-
.map(|addresses| {
286-
addresses
287-
.into_iter()
288-
.map(parse_address)
289-
.collect::<Vec<SocketAddr>>()
290-
})
291-
.or_else(|| {
292-
config.local_pool_addresses.map(|addresses| {
293-
addresses
294-
.into_iter()
295-
.map(parse_address)
296-
.collect::<Vec<SocketAddr>>()
297-
})
298-
})
299-
.or_else(|| {
300-
std::env::var("LOCAL_POOL_ADDRESSES").ok().map(|s| {
301-
s.split(',')
302-
.map(|s| parse_address(s.trim().to_string()))
303-
.collect::<Vec<SocketAddr>>()
304-
})
305-
});
306-
307214
let interval = args
308215
.adjustment_interval
309216
.or(config.interval)
@@ -388,9 +295,6 @@ impl Configuration {
388295
Configuration {
389296
token,
390297
tp_address,
391-
pool_addresses,
392-
staging_pool_addresses,
393-
local_pool_addresses,
394298
interval,
395299
delay,
396300
downstream_hashrate,
@@ -447,3 +351,51 @@ fn parse_address(addr: String) -> SocketAddr {
447351
.next()
448352
.expect("No socket address resolved")
449353
}
354+
355+
/// Fetches pool URLs from the server based on the environment.
356+
async fn fetch_pool_urls() -> Option<Vec<SocketAddr>> {
357+
if CONFIG.local {
358+
return Some(vec![parse_address("127.0.0.1:20000".to_string())]);
359+
};
360+
361+
let url = if CONFIG.staging {
362+
STAGING_URL
363+
} else {
364+
PRODUCTION_URL
365+
};
366+
let endpoint = format!("{}/pool/urls", url);
367+
debug!("Fetching pool URLs from: {}", endpoint);
368+
369+
let response = match reqwest::get(endpoint).await {
370+
Ok(resp) => resp,
371+
Err(e) => {
372+
error!("Failed to fetch pool urls: {}", e);
373+
return None;
374+
}
375+
};
376+
377+
let addresses: Vec<PoolAddress> = match response.json().await {
378+
Ok(addrs) => addrs,
379+
Err(e) => {
380+
error!("Failed to parse pool urls: {}", e);
381+
return None;
382+
}
383+
};
384+
385+
// Parse the addresses into SocketAddr
386+
let socket_addrs: Vec<SocketAddr> = addresses
387+
.into_iter()
388+
.map(|addr| {
389+
let address = format!("{}:{}", addr.host, addr.port);
390+
parse_address(address)
391+
})
392+
.collect();
393+
debug!("Pool addresses: {:?}", socket_addrs);
394+
Some(socket_addrs)
395+
}
396+
397+
#[derive(Debug, Deserialize)]
398+
struct PoolAddress {
399+
host: String,
400+
port: u16,
401+
}

src/main.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ const DEFAULT_LISTEN_ADDRESS: &str = "0.0.0.0:32767";
4242
const REPO_OWNER: &str = "demand-open-source";
4343
const REPO_NAME: &str = "demand-cli";
4444
const BIN_NAME: &str = "demand-cli";
45+
const STAGING_URL: &str = "https://staging-user-dashboard-server.dmnd.work";
46+
const LOCAL_URL: &str = "http://localhost:8787/api";
47+
const PRODUCTION_URL: &str = "https://user-dashboard-server.dmnd.work";
4548

4649
lazy_static! {
4750
static ref SV1_DOWN_LISTEN_ADDR: String =
@@ -101,6 +104,7 @@ async fn main() {
101104
let auth_pub_k: Secp256k1PublicKey = AUTH_PUB_KEY.parse().expect("Invalid public key");
102105

103106
let pool_addresses = Configuration::pool_address()
107+
.await
104108
.filter(|p| !p.is_empty())
105109
.unwrap_or_else(|| match Configuration::environment().as_str() {
106110
"staging" => panic!("Staging pool address is missing"),

src/shares_monitor.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,15 @@ use crate::{
99
config::Configuration,
1010
proxy_state::{DownstreamType, ProxyState},
1111
shared::error::Error,
12+
LOCAL_URL, PRODUCTION_URL, STAGING_URL,
1213
};
1314

14-
const STAGING_URL: &str = "http://staging-user-dashboard-server.dmnd.work/share/save";
15-
const LOCAL_URL: &str = "http://localhost:8787/api/share/save";
16-
const PRODUCTION_URL: &str = "http://user-dashboard-server.dmnd.work/share/save";
17-
1815
fn monitoring_server_url() -> String {
1916
// Determine the monitoring server URL based on the environment
2017
match Configuration::environment().as_str() {
21-
"staging" => STAGING_URL.to_string(),
22-
"local" => LOCAL_URL.to_string(),
23-
"production" => PRODUCTION_URL.to_string(),
18+
"staging" => format!("{}/share/save", STAGING_URL),
19+
"local" => format!("{}/share/save", LOCAL_URL),
20+
"production" => format!("{}/share/save", PRODUCTION_URL),
2421
_ => unreachable!(),
2522
}
2623
}

0 commit comments

Comments
 (0)