@@ -7,7 +7,7 @@ use std::{
77} ;
88use tracing:: { debug, error, info, warn} ;
99
10- use crate :: { HashUnit , DEFAULT_SV1_HASHPOWER } ;
10+ use crate :: { HashUnit , DEFAULT_SV1_HASHPOWER , PRODUCTION_URL , STAGING_URL } ;
1111lazy_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 {
5549struct 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 {
9987pub 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+ }
0 commit comments