diff --git a/src/bdk.udl b/src/bdk.udl index 46a1ead..e9fa4f4 100644 --- a/src/bdk.udl +++ b/src/bdk.udl @@ -49,6 +49,11 @@ enum BdkError { "Rusqlite", }; +dictionary AddressInformation { + u32 index; + string address; +}; + enum Network { "Bitcoin", "Testnet", @@ -127,7 +132,7 @@ interface Wallet { [Throws=BdkError] constructor(string descriptor, string? change_descriptor, Network network, DatabaseConfig database_config); string get_new_address(); - string get_last_unused_address(); + AddressInformation get_last_unused_address(); [Throws=BdkError] u64 get_balance(); [Throws=BdkError] diff --git a/src/lib.rs b/src/lib.rs index 7b58ddb..31e8553 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,6 +13,7 @@ use bdk::keys::bip39::{Language, Mnemonic, WordCount}; use bdk::keys::{DerivableKey, ExtendedKey, GeneratableKey, GeneratedKey}; use bdk::miniscript::BareCtx; use bdk::wallet::AddressIndex; +use bdk::wallet::AddressInfo; use bdk::{ BlockTime, Error, FeeRate, SignOptions, SyncOptions as BdkSyncOptions, Wallet as BdkWallet, }; @@ -26,6 +27,11 @@ uniffi_macros::include_scaffolding!("bdk"); type BdkError = Error; +pub struct AddressInformation { + pub index: u32, + pub address: String, +} + pub enum DatabaseConfig { Memory, Sled { config: SledDbConfiguration }, @@ -243,12 +249,22 @@ impl Wallet { .to_string() } - fn get_last_unused_address(&self) -> String { - self.get_wallet() + // fn get_last_unused_address(&self) -> String { + // self.get_wallet() + // .get_address(AddressIndex::LastUnused) + // .unwrap() + // .address + // .to_string() + // } + + fn get_last_unused_address(&self) -> AddressInformation { + let address_info = self.get_wallet() .get_address(AddressIndex::LastUnused) - .unwrap() - .address - .to_string() + .unwrap(); + return AddressInformation { + index: address_info.index, + address: address_info.address.to_string() + } } fn get_balance(&self) -> Result {