@@ -7,7 +7,7 @@ use std::sync::Arc;
77
88use clap:: { Arg , Command } ;
99use dash_spv:: terminal:: TerminalGuard ;
10- use dash_spv:: { Config , DashSpvClient , LevelFilter , Network } ;
10+ use dash_spv:: { ConfigBuilder , DashSpvClient , LevelFilter } ;
1111use key_wallet:: wallet:: managed_wallet_info:: ManagedWalletInfo ;
1212use key_wallet_manager:: wallet_manager:: WalletManager ;
1313use tokio_util:: sync:: CancellationToken ;
@@ -169,10 +169,10 @@ async fn run() -> Result<(), Box<dyn std::error::Error>> {
169169
170170 // Parse network
171171 let network_str = matches. get_one :: < String > ( "network" ) . ok_or ( "Missing network argument" ) ?;
172- let network = match network_str. as_str ( ) {
173- "mainnet" => Network :: Dash ,
174- "testnet" => Network :: Testnet ,
175- "regtest" => Network :: Regtest ,
172+ let mut cfg_builder = match network_str. as_str ( ) {
173+ "mainnet" => ConfigBuilder :: mainnet ( ) ,
174+ "testnet" => ConfigBuilder :: testnet ( ) ,
175+ "regtest" => ConfigBuilder :: regtest ( ) ,
176176 n => return Err ( format ! ( "Invalid network: {}" , n) . into ( ) ) ,
177177 } ;
178178
@@ -244,65 +244,65 @@ async fn run() -> Result<(), Box<dyn std::error::Error>> {
244244 let _logging_guard = dash_spv:: init_logging ( logging_config) ?;
245245
246246 tracing:: info!( "Starting Dash SPV client" ) ;
247- tracing:: info!( "Network: {:?}" , network ) ;
247+ tracing:: info!( "Network: {:?}" , network_str ) ;
248248 tracing:: info!( "Data directory: {}" , data_dir. display( ) ) ;
249249 tracing:: info!( "Validation mode: {:?}" , validation_mode) ;
250250
251251 // Create configuration
252- let mut config = Config :: new ( network)
253- . with_storage_path ( data_dir. clone ( ) )
254- . with_validation_mode ( validation_mode) ;
255-
256- // Add custom peers if specified
257- if let Some ( peers) = matches. get_many :: < String > ( "peer" ) {
258- config. peers . clear ( ) ;
259- for peer in peers {
260- match peer. parse ( ) {
261- Ok ( addr) => config. add_peer ( addr) ,
262- Err ( e) => {
263- tracing:: error!( "Invalid peer address '{}': {}" , peer, e) ;
264- process:: exit ( 1 ) ;
265- }
266- } ;
267- }
268- }
252+ let config = cfg_builder. storage_path ( data_dir. clone ( ) ) . validation_mode ( validation_mode) ;
269253
270254 // Configure features
271255 if matches. get_flag ( "no-filters" ) {
272- config = config . without_filters ( ) ;
256+ config. enable_filters ( false ) ;
273257 }
274258 if matches. get_flag ( "no-masternodes" ) {
275- config = config . without_masternodes ( ) ;
259+ config. enable_masternodes ( false ) ;
276260 }
277261 if matches. get_flag ( "no-mempool" ) {
278- config. enable_mempool_tracking = false ;
262+ config. enable_mempool_tracking ( false ) ;
279263 }
280264
281265 // Set start height if specified
282266 if let Some ( start_height_str) = matches. get_one :: < String > ( "start-height" ) {
283267 if start_height_str == "now" {
284268 // Use a very high number to get the latest checkpoint
285- config. start_from_height = Some ( u32:: MAX ) ;
269+ config. start_from_height ( u32:: MAX ) ;
286270 tracing:: info!( "Will start syncing from the latest available checkpoint" ) ;
287271 } else {
288272 let start_height = start_height_str
289273 . parse :: < u32 > ( )
290274 . map_err ( |e| format ! ( "Invalid start height '{}': {}" , start_height_str, e) ) ?;
291- config. start_from_height = Some ( start_height) ;
275+ config. start_from_height ( start_height) ;
292276 tracing:: info!( "Will start syncing from height: {}" , start_height) ;
293277 }
294278 }
295279
296280 // Validate configuration
297- if let Err ( e) = config. validate ( ) {
298- tracing:: error!( "Configuration error: {}" , e) ;
299- process:: exit ( 1 ) ;
281+ let mut config = match config. build ( ) {
282+ Ok ( config) => config,
283+ Err ( e) => {
284+ tracing:: error!( "Configuration error: {}" , e) ;
285+ process:: exit ( 1 ) ;
286+ }
287+ } ;
288+
289+ // Add custom peers if specified
290+ if let Some ( peers) = matches. get_many :: < String > ( "peer" ) {
291+ for peer in peers {
292+ match peer. parse ( ) {
293+ Ok ( addr) => config. add_peer ( addr) ,
294+ Err ( e) => {
295+ tracing:: error!( "Invalid peer address '{}': {}" , peer, e) ;
296+ process:: exit ( 1 ) ;
297+ }
298+ } ;
299+ }
300300 }
301301
302302 tracing:: info!( "Sync strategy: Sequential" ) ;
303303
304304 // Create the wallet manager
305- let mut wallet_manager = WalletManager :: < ManagedWalletInfo > :: new ( config. network ) ;
305+ let mut wallet_manager = WalletManager :: < ManagedWalletInfo > :: new ( config. network ( ) ) ;
306306 let wallet_id = wallet_manager. create_wallet_from_mnemonic (
307307 mnemonic_phrase. as_str ( ) ,
308308 "" ,
@@ -342,7 +342,7 @@ async fn run() -> Result<(), Box<dyn std::error::Error>> {
342342}
343343
344344async fn run_client < S : dash_spv:: storage:: StorageManager > (
345- config : Config ,
345+ config : dash_spv :: Config ,
346346 network_manager : dash_spv:: network:: manager:: PeerNetworkManager ,
347347 storage_manager : S ,
348348 wallet : Arc < tokio:: sync:: RwLock < WalletManager < ManagedWalletInfo > > > ,
@@ -375,7 +375,7 @@ async fn run_client<S: dash_spv::storage::StorageManager>(
375375 match TerminalGuard :: new ( ui. clone ( ) ) {
376376 Ok ( guard) => {
377377 // Initial update with network info
378- let network_name = format ! ( "{:?}" , config. network) ;
378+ let network_name = format ! ( "{:?}" , config. network( ) ) ;
379379 let _ = ui
380380 . update_status ( |status| {
381381 status. network = network_name;
@@ -481,7 +481,7 @@ async fn run_client<S: dash_spv::storage::StorageManager>(
481481 for addr_str in addresses {
482482 match addr_str. parse :: < dashcore:: Address < dashcore:: address:: NetworkUnchecked > > ( ) {
483483 Ok ( addr) => {
484- let network = config. network ;
484+ let network = config. network ( ) ;
485485 let checked_addr = addr. require_network ( network) . map_err ( |_| {
486486 format ! ( "Address '{}' is not valid for network {:?}" , addr_str, network)
487487 } ) ;
@@ -508,7 +508,7 @@ async fn run_client<S: dash_spv::storage::StorageManager>(
508508
509509 // Add example addresses for testing if requested
510510 if matches. get_flag ( "add-example-addresses" ) {
511- let network = config. network ;
511+ let network = config. network ( ) ;
512512 let example_addresses = match network {
513513 dashcore:: Network :: Dash => vec ! [
514514 // Some example mainnet addresses (these are from block explorers/faucets)
0 commit comments