Skip to content

Commit 36f2833

Browse files
committed
Move reading seed bytes out of build_with_store_internal
The VSS store will need access to the seed bytes to derive de-/encryption keys. As we'll need to set up the store before entering `build_with_store_internal`, we now move reading the `EntropySourceConfig` outside as a prefactor.
1 parent 6fe681c commit 36f2833

File tree

1 file changed

+46
-33
lines changed

1 file changed

+46
-33
lines changed

src/builder.rs

Lines changed: 46 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
379386
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>,
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

Comments
 (0)