@@ -250,14 +250,21 @@ impl NodeBuilder {
250250 pub fn build_with_store < K : KVStore + Sync + Send + ' static > (
251251 & self , kv_store : Arc < K > ,
252252 ) -> 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+ ) ?;
253259 let config = Arc :: new ( self . config . clone ( ) ) ;
254260
255261 let runtime = Arc :: new ( RwLock :: new ( None ) ) ;
256262 build_with_store_internal (
257263 config,
258- self . entropy_source_config . as_ref ( ) ,
259264 self . chain_data_source_config . as_ref ( ) ,
260265 self . gossip_source_config . as_ref ( ) ,
266+ seed_bytes,
267+ logger,
261268 kv_store,
262269 runtime,
263270 )
@@ -377,41 +384,12 @@ impl ArcedNodeBuilder {
377384
378385/// Builds a [`Node`] instance according to the options previously configured.
379386fn 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 > ,
383390 runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > ,
384391) -> 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-
396392 // 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-
415393 let xprv = bitcoin:: util:: bip32:: ExtendedPrivKey :: new_master ( config. network , & seed_bytes)
416394 . map_err ( |e| {
417395 log_error ! ( logger, "Failed to derive master secret: {}" , e) ;
@@ -748,3 +726,38 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
748726 payment_store,
749727 } )
750728}
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