Skip to content

Commit

Permalink
Add is_change flag to get_new_address
Browse files Browse the repository at this point in the history
A lot of wallets treat change addresses vs external addresses
differently. Being able to specificy what the address is being used for
lets the wallet generate the correct kind.
  • Loading branch information
benthecarman committed Dec 6, 2023
1 parent 6b5d0da commit 463f7ee
Show file tree
Hide file tree
Showing 8 changed files with 16 additions and 12 deletions.
2 changes: 1 addition & 1 deletion bitcoin-rpc-provider/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ impl Signer for BitcoinCoreProvider {
}

impl Wallet for BitcoinCoreProvider {
fn get_new_address(&self) -> Result<Address, ManagerError> {
fn get_new_address(&self, _is_change: bool) -> Result<Address, ManagerError> {
self.client
.lock()
.unwrap()
Expand Down
3 changes: 2 additions & 1 deletion dlc-manager/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,8 @@ pub trait Signer {
/// managing bitcoin addresses and UTXOs.
pub trait Wallet: Signer {
/// Returns a new (unused) address.
fn get_new_address(&self) -> Result<Address, Error>;
/// If `is_change` is set, the address will be used for change.
fn get_new_address(&self, is_change: bool) -> Result<Address, Error>;
/// Generate a new secret key and store it in the wallet so that it can later
/// be retrieved.
fn get_new_secret_key(&self) -> Result<SecretKey, Error>;
Expand Down
4 changes: 2 additions & 2 deletions dlc-manager/src/manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2012,7 +2012,7 @@ where
&counter_sk,
&counter_revocation_sk,
&tx,
&self.wallet.get_new_address()?,
&self.wallet.get_new_address(false)?,
0,
fee_rate_per_vb,
)?
Expand All @@ -2026,7 +2026,7 @@ where
&counter_sk,
&counter_revocation_sk,
&tx,
&self.wallet.get_new_address()?,
&self.wallet.get_new_address(false)?,
CET_NSEQUENCE,
0,
fee_rate_per_vb,
Expand Down
4 changes: 2 additions & 2 deletions dlc-manager/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,10 @@ where
let funding_privkey = wallet.get_new_secret_key()?;
let funding_pubkey = PublicKey::from_secret_key(secp, &funding_privkey);

let payout_addr = wallet.get_new_address()?;
let payout_addr = wallet.get_new_address(false)?;
let payout_spk = payout_addr.script_pubkey();
let payout_serial_id = get_new_serial_id();
let change_addr = wallet.get_new_address()?;
let change_addr = wallet.get_new_address(true)?;
let change_spk = change_addr.script_pubkey();
let change_serial_id = get_new_serial_id();

Expand Down
4 changes: 2 additions & 2 deletions dlc-manager/tests/channel_execution_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -289,8 +289,8 @@ fn channel_execution_test(test_params: TestParams, path: TestPath) {
bitcoin::Network::Regtest,
));

let alice_fund_address = alice_wallet.get_new_address().unwrap();
let bob_fund_address = bob_wallet.get_new_address().unwrap();
let alice_fund_address = alice_wallet.get_new_address(false).unwrap();
let bob_fund_address = bob_wallet.get_new_address(false).unwrap();

sink_rpc
.send_to_address(
Expand Down
4 changes: 2 additions & 2 deletions dlc-manager/tests/manager_execution_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -444,8 +444,8 @@ fn manager_execution_test(test_params: TestParams, path: TestPath) {
bitcoin::Network::Regtest,
));

let alice_fund_address = alice_wallet.get_new_address().unwrap();
let bob_fund_address = bob_wallet.get_new_address().unwrap();
let alice_fund_address = alice_wallet.get_new_address(false).unwrap();
let bob_fund_address = bob_wallet.get_new_address(false).unwrap();

sink_rpc
.send_to_address(
Expand Down
5 changes: 4 additions & 1 deletion mocks/src/mock_wallet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,10 @@ impl Signer for MockWallet {
}

impl Wallet for MockWallet {
fn get_new_address(&self) -> Result<Address, dlc_manager::error::Error> {
fn get_new_address(
&self,
_is_change_address: bool,
) -> Result<Address, dlc_manager::error::Error> {
Ok(get_address())
}

Expand Down
2 changes: 1 addition & 1 deletion simple-wallet/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ where
B::Target: WalletBlockchainProvider,
W::Target: WalletStorage,
{
fn get_new_address(&self) -> Result<Address> {
fn get_new_address(&self, _is_change: bool) -> Result<Address> {
let seckey = SecretKey::new(&mut thread_rng());
let pubkey = PublicKey::from_secret_key(&self.secp_ctx, &seckey);
let address = Address::p2wpkh(
Expand Down

0 comments on commit 463f7ee

Please sign in to comment.