@@ -250,14 +250,21 @@ impl NodeBuilder {
250
250
pub fn build_with_store < K : KVStore + Sync + Send + ' static > (
251
251
& self , kv_store : Arc < K > ,
252
252
) -> Result < Node < K > , BuildError > {
253
+ let logger = setup_logger ( & self . config ) ?;
254
+ let seed_bytes = seed_bytes_from_config (
255
+ & self . config ,
256
+ self . entropy_source_config . as_ref ( ) ,
257
+ Arc :: clone ( & logger) ,
258
+ ) ?;
253
259
let config = Arc :: new ( self . config . clone ( ) ) ;
254
260
255
261
let runtime = Arc :: new ( RwLock :: new ( None ) ) ;
256
262
build_with_store_internal (
257
263
config,
258
- self . entropy_source_config . as_ref ( ) ,
259
264
self . chain_data_source_config . as_ref ( ) ,
260
265
self . gossip_source_config . as_ref ( ) ,
266
+ seed_bytes,
267
+ logger,
261
268
kv_store,
262
269
runtime,
263
270
)
@@ -377,41 +384,12 @@ impl ArcedNodeBuilder {
377
384
378
385
/// Builds a [`Node`] instance according to the options previously configured.
379
386
fn build_with_store_internal < K : KVStore + Sync + Send + ' static > (
380
- config : Arc < Config > , entropy_source_config : Option < & EntropySourceConfig > ,
381
- chain_data_source_config : Option < & ChainDataSourceConfig > ,
382
- gossip_source_config : Option < & GossipSourceConfig > , kv_store : Arc < K > ,
387
+ config : Arc < Config > , chain_data_source_config : Option < & ChainDataSourceConfig > ,
388
+ gossip_source_config : Option < & GossipSourceConfig > , seed_bytes : [ u8 ; 64 ] ,
389
+ logger : Arc < FilesystemLogger > , kv_store : Arc < K > ,
383
390
runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > ,
384
391
) -> Result < Node < K > , BuildError > {
385
- let log_dir = match & config. log_dir_path {
386
- Some ( log_dir) => String :: from ( log_dir) ,
387
- None => config. storage_dir_path . clone ( ) + "/logs" ,
388
- } ;
389
-
390
- // Initialize the Logger
391
- let logger = Arc :: new (
392
- FilesystemLogger :: new ( log_dir, config. log_level )
393
- . map_err ( |_| BuildError :: LoggerSetupFailed ) ?,
394
- ) ;
395
-
396
392
// Initialize the on-chain wallet and chain access
397
- let seed_bytes = match entropy_source_config {
398
- Some ( EntropySourceConfig :: SeedBytes ( bytes) ) => bytes. clone ( ) ,
399
- Some ( EntropySourceConfig :: SeedFile ( seed_path) ) => {
400
- io:: utils:: read_or_generate_seed_file ( seed_path, Arc :: clone ( & logger) )
401
- . map_err ( |_| BuildError :: InvalidSeedFile ) ?
402
- }
403
- Some ( EntropySourceConfig :: Bip39Mnemonic { mnemonic, passphrase } ) => match passphrase {
404
- Some ( passphrase) => mnemonic. to_seed ( passphrase) ,
405
- None => mnemonic. to_seed ( "" ) ,
406
- } ,
407
- None => {
408
- // Default to read or generate from the default location generate a seed file.
409
- let seed_path = format ! ( "{}/keys_seed" , config. storage_dir_path) ;
410
- io:: utils:: read_or_generate_seed_file ( & seed_path, Arc :: clone ( & logger) )
411
- . map_err ( |_| BuildError :: InvalidSeedFile ) ?
412
- }
413
- } ;
414
-
415
393
let xprv = bitcoin:: util:: bip32:: ExtendedPrivKey :: new_master ( config. network , & seed_bytes)
416
394
. map_err ( |e| {
417
395
log_error ! ( logger, "Failed to derive master secret: {}" , e) ;
@@ -748,3 +726,38 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
748
726
payment_store,
749
727
} )
750
728
}
729
+
730
+ fn setup_logger ( config : & Config ) -> Result < Arc < FilesystemLogger > , BuildError > {
731
+ let log_dir = match & config. log_dir_path {
732
+ Some ( log_dir) => String :: from ( log_dir) ,
733
+ None => config. storage_dir_path . clone ( ) + "/logs" ,
734
+ } ;
735
+
736
+ Ok ( Arc :: new (
737
+ FilesystemLogger :: new ( log_dir, config. log_level )
738
+ . map_err ( |_| BuildError :: LoggerSetupFailed ) ?,
739
+ ) )
740
+ }
741
+
742
+ fn seed_bytes_from_config (
743
+ config : & Config , entropy_source_config : Option < & EntropySourceConfig > ,
744
+ logger : Arc < FilesystemLogger > ,
745
+ ) -> Result < [ u8 ; 64 ] , BuildError > {
746
+ match entropy_source_config {
747
+ Some ( EntropySourceConfig :: SeedBytes ( bytes) ) => Ok ( bytes. clone ( ) ) ,
748
+ Some ( EntropySourceConfig :: SeedFile ( seed_path) ) => {
749
+ Ok ( io:: utils:: read_or_generate_seed_file ( & seed_path, Arc :: clone ( & logger) )
750
+ . map_err ( |_| BuildError :: InvalidSeedFile ) ?)
751
+ }
752
+ Some ( EntropySourceConfig :: Bip39Mnemonic { mnemonic, passphrase } ) => match passphrase {
753
+ Some ( passphrase) => Ok ( mnemonic. to_seed ( passphrase) ) ,
754
+ None => Ok ( mnemonic. to_seed ( "" ) ) ,
755
+ } ,
756
+ None => {
757
+ // Default to read or generate from the default location generate a seed file.
758
+ let seed_path = format ! ( "{}/keys_seed" , config. storage_dir_path) ;
759
+ Ok ( io:: utils:: read_or_generate_seed_file ( & seed_path, Arc :: clone ( & logger) )
760
+ . map_err ( |_| BuildError :: InvalidSeedFile ) ?)
761
+ }
762
+ }
763
+ }
0 commit comments