Use AddressInfo in private methods
This commit is contained in:
parent
6b60914ca1
commit
0ec064ef13
@ -227,7 +227,7 @@ where
|
|||||||
D: BatchDatabase,
|
D: BatchDatabase,
|
||||||
{
|
{
|
||||||
// Return a newly derived address using the external descriptor
|
// Return a newly derived address using the external descriptor
|
||||||
fn get_new_address(&self) -> Result<(Address, u32), Error> {
|
fn get_new_address(&self) -> Result<AddressInfo, Error> {
|
||||||
let incremented_index = self.fetch_and_increment_index(KeychainKind::External)?;
|
let incremented_index = self.fetch_and_increment_index(KeychainKind::External)?;
|
||||||
|
|
||||||
let address_result = self
|
let address_result = self
|
||||||
@ -236,13 +236,16 @@ where
|
|||||||
.address(self.network);
|
.address(self.network);
|
||||||
|
|
||||||
address_result
|
address_result
|
||||||
.map(|address| (address, incremented_index))
|
.map(|address| AddressInfo {
|
||||||
|
address,
|
||||||
|
index: incremented_index,
|
||||||
|
})
|
||||||
.map_err(|_| Error::ScriptDoesntHaveAddressForm)
|
.map_err(|_| Error::ScriptDoesntHaveAddressForm)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the the last previously derived address if it has not been used in a received
|
// Return the the last previously derived address if it has not been used in a received
|
||||||
// transaction. Otherwise return a new address using [`Wallet::get_new_address`].
|
// transaction. Otherwise return a new address using [`Wallet::get_new_address`].
|
||||||
fn get_unused_address(&self) -> Result<(Address, u32), Error> {
|
fn get_unused_address(&self) -> Result<AddressInfo, Error> {
|
||||||
let current_index = self.fetch_index(KeychainKind::External)?;
|
let current_index = self.fetch_index(KeychainKind::External)?;
|
||||||
|
|
||||||
let derived_key = self.descriptor.as_derived(current_index, &self.secp);
|
let derived_key = self.descriptor.as_derived(current_index, &self.secp);
|
||||||
@ -261,29 +264,32 @@ where
|
|||||||
} else {
|
} else {
|
||||||
derived_key
|
derived_key
|
||||||
.address(self.network)
|
.address(self.network)
|
||||||
.map(|address| (address, current_index))
|
.map(|address| AddressInfo {
|
||||||
|
address,
|
||||||
|
index: current_index,
|
||||||
|
})
|
||||||
.map_err(|_| Error::ScriptDoesntHaveAddressForm)
|
.map_err(|_| Error::ScriptDoesntHaveAddressForm)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return derived address for the external descriptor at a specific index
|
// Return derived address for the external descriptor at a specific index
|
||||||
fn peek_address(&self, index: u32) -> Result<(Address, u32), Error> {
|
fn peek_address(&self, index: u32) -> Result<AddressInfo, Error> {
|
||||||
self.descriptor
|
self.descriptor
|
||||||
.as_derived(index, &self.secp)
|
.as_derived(index, &self.secp)
|
||||||
.address(self.network)
|
.address(self.network)
|
||||||
.map(|address| (address, index))
|
.map(|address| AddressInfo { address, index })
|
||||||
.map_err(|_| Error::ScriptDoesntHaveAddressForm)
|
.map_err(|_| Error::ScriptDoesntHaveAddressForm)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return derived address for the external descriptor at a specific index and reset current
|
// Return derived address for the external descriptor at a specific index and reset current
|
||||||
// address index
|
// address index
|
||||||
fn reset_address(&self, index: u32) -> Result<(Address, u32), Error> {
|
fn reset_address(&self, index: u32) -> Result<AddressInfo, Error> {
|
||||||
self.set_index(KeychainKind::External, index)?;
|
self.set_index(KeychainKind::External, index)?;
|
||||||
|
|
||||||
self.descriptor
|
self.descriptor
|
||||||
.as_derived(index, &self.secp)
|
.as_derived(index, &self.secp)
|
||||||
.address(self.network)
|
.address(self.network)
|
||||||
.map(|address| (address, index))
|
.map(|address| AddressInfo { address, index })
|
||||||
.map_err(|_| Error::ScriptDoesntHaveAddressForm)
|
.map_err(|_| Error::ScriptDoesntHaveAddressForm)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -291,14 +297,12 @@ where
|
|||||||
/// available address index selection strategies. If none of the keys in the descriptor are derivable
|
/// available address index selection strategies. If none of the keys in the descriptor are derivable
|
||||||
/// (ie. does not end with /*) then the same address will always be returned for any [`AddressIndex`].
|
/// (ie. does not end with /*) then the same address will always be returned for any [`AddressIndex`].
|
||||||
pub fn get_address(&self, address_index: AddressIndex) -> Result<AddressInfo, Error> {
|
pub fn get_address(&self, address_index: AddressIndex) -> Result<AddressInfo, Error> {
|
||||||
let result = match address_index {
|
match address_index {
|
||||||
AddressIndex::New => self.get_new_address(),
|
AddressIndex::New => self.get_new_address(),
|
||||||
AddressIndex::LastUnused => self.get_unused_address(),
|
AddressIndex::LastUnused => self.get_unused_address(),
|
||||||
AddressIndex::Peek(index) => self.peek_address(index),
|
AddressIndex::Peek(index) => self.peek_address(index),
|
||||||
AddressIndex::Reset(index) => self.reset_address(index),
|
AddressIndex::Reset(index) => self.reset_address(index),
|
||||||
};
|
}
|
||||||
|
|
||||||
result.map(|(address, index)| AddressInfo { index, address })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return whether or not a `script` is part of this wallet (either internal or external)
|
/// Return whether or not a `script` is part of this wallet (either internal or external)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user