Skip to content

Commit d852c9a

Browse files
committed
wallet: expose next unused address
Which is more idempotent than new_address.
1 parent 7ad0d63 commit d852c9a

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

src/payment/onchain.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ impl OnchainPayment {
6464
Ok(funding_address)
6565
}
6666

67+
/// Retrieve the next unused on-chain/funding address.
68+
pub fn next_address(&self) -> Result<Address, Error> {
69+
let funding_address = self.wallet.get_next_address()?;
70+
log_info!(self.logger, "Generated next funding address: {}", funding_address);
71+
Ok(funding_address)
72+
}
73+
6774
/// Send an on-chain payment to the given address.
6875
///
6976
/// This will respect any on-chain reserve we need to keep, i.e., won't allow to cut into

src/wallet/mod.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,18 @@ impl Wallet {
473473
Ok(address_info.address)
474474
}
475475

476+
pub(crate) fn get_next_address(&self) -> Result<bitcoin::Address, Error> {
477+
let mut locked_wallet = self.inner.lock().unwrap();
478+
let mut locked_persister = self.persister.lock().unwrap();
479+
480+
let address_info = locked_wallet.next_unused_address(KeychainKind::External);
481+
locked_wallet.persist(&mut locked_persister).map_err(|e| {
482+
log_error!(self.logger, "Failed to persist wallet: {}", e);
483+
Error::PersistenceFailed
484+
})?;
485+
Ok(address_info.address)
486+
}
487+
476488
pub(crate) fn get_new_internal_address(&self) -> Result<bitcoin::Address, Error> {
477489
let mut locked_wallet = self.inner.lock().unwrap();
478490
let mut locked_persister = self.persister.lock().unwrap();

0 commit comments

Comments
 (0)