Skip to content

Commit c9dddb1

Browse files
committed
Improve logging in WalletKeysManager
While we cannot get rid of the panics here, we can make sure the errors are logged before we (explicitly) panic.
1 parent dee9791 commit c9dddb1

File tree

2 files changed

+26
-9
lines changed

2 files changed

+26
-9
lines changed

src/builder.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,7 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
470470
cur_time.as_secs(),
471471
cur_time.subsec_nanos(),
472472
Arc::clone(&wallet),
473+
Arc::clone(&logger),
473474
));
474475

475476
// Initialize the network graph, scorer, and router

src/wallet.rs

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,7 @@ where
337337
{
338338
inner: KeysManager,
339339
wallet: Arc<Wallet<D, L>>,
340+
logger: L,
340341
}
341342

342343
impl<D, L: Deref> WalletKeysManager<D, L>
@@ -350,10 +351,10 @@ where
350351
/// `starting_time_nanos`.
351352
pub fn new(
352353
seed: &[u8; 32], starting_time_secs: u64, starting_time_nanos: u32,
353-
wallet: Arc<Wallet<D, L>>,
354+
wallet: Arc<Wallet<D, L>>, logger: L,
354355
) -> Self {
355356
let inner = KeysManager::new(seed, starting_time_secs, starting_time_nanos);
356-
Self { inner, wallet }
357+
Self { inner, wallet, logger }
357358
}
358359

359360
/// See [`KeysManager::spend_spendable_outputs`] for documentation on this method.
@@ -450,20 +451,35 @@ where
450451
}
451452

452453
fn get_destination_script(&self) -> Script {
453-
let address =
454-
self.wallet.get_new_address().expect("Failed to retrieve new address from wallet.");
454+
let address = self.wallet.get_new_address().unwrap_or_else(|e| {
455+
log_error!(self.logger, "Failed to retrieve new address from wallet: {}", e);
456+
panic!("Failed to retrieve new address from wallet");
457+
});
455458
address.script_pubkey()
456459
}
457460

458461
fn get_shutdown_scriptpubkey(&self) -> ShutdownScript {
459-
let address =
460-
self.wallet.get_new_address().expect("Failed to retrieve new address from wallet.");
462+
let address = self.wallet.get_new_address().unwrap_or_else(|e| {
463+
log_error!(self.logger, "Failed to retrieve new address from wallet: {}", e);
464+
panic!("Failed to retrieve new address from wallet");
465+
});
466+
461467
match address.payload {
462468
bitcoin::util::address::Payload::WitnessProgram { version, program } => {
463-
return ShutdownScript::new_witness_program(version, &program)
464-
.expect("Invalid shutdown script.");
469+
return ShutdownScript::new_witness_program(version, &program).unwrap_or_else(
470+
|e| {
471+
log_error!(self.logger, "Invalid shutdown script: {:?}", e);
472+
panic!("Invalid shutdown script.");
473+
},
474+
);
475+
}
476+
_ => {
477+
log_error!(
478+
self.logger,
479+
"Tried to use a non-witness address. This must not ever happen."
480+
);
481+
panic!("Tried to use a non-witness address. This must not ever happen.");
465482
}
466-
_ => panic!("Tried to use a non-witness address. This must not ever happen."),
467483
}
468484
}
469485
}

0 commit comments

Comments
 (0)