diff --git a/bdk-ffi/src/bdk.udl b/bdk-ffi/src/bdk.udl index c0fa8aa..c586dd2 100644 --- a/bdk-ffi/src/bdk.udl +++ b/bdk-ffi/src/bdk.udl @@ -50,7 +50,8 @@ enum BdkError { dictionary AddressInfo { u32 index; - string address; + Address address; + KeychainKind keychain; }; [Enum] @@ -452,6 +453,8 @@ interface Address { Script script_pubkey(); string to_qr_uri(); + + string as_string(); }; [Enum] diff --git a/bdk-ffi/src/lib.rs b/bdk-ffi/src/lib.rs index 92c8230..6ce82e2 100644 --- a/bdk-ffi/src/lib.rs +++ b/bdk-ffi/src/lib.rs @@ -47,17 +47,20 @@ pub struct ScriptAmount { /// A derived address and the index it was found at. pub struct AddressInfo { - /// Child index of this address + /// Child index of this address. pub index: u32, - /// Address - pub address: String, + /// Address. + pub address: Arc
, + /// Type of keychain. + pub keychain: KeychainKind, } impl From for AddressInfo { - fn from(x: bdk::wallet::AddressInfo) -> Self { + fn from(x: BdkAddressInfo) -> Self { AddressInfo { index: x.index, - address: x.address.to_string(), + address: Arc::new(Address::from(x.address)), + keychain: x.keychain, } } } @@ -347,7 +350,8 @@ impl From for Transaction { } /// A Bitcoin address. -struct Address { +#[derive(Debug, PartialEq, Eq)] +pub struct Address { address: BdkAddress, } @@ -386,6 +390,16 @@ impl Address { fn to_qr_uri(&self) -> String { self.address.to_qr_uri() } + + fn as_string(&self) -> String { + self.address.to_string() + } +} + +impl From for Address { + fn from(address: BdkAddress) -> Self { + Address { address } + } } /// The method used to produce an address. diff --git a/bdk-ffi/src/wallet.rs b/bdk-ffi/src/wallet.rs index 0eafeee..a973b71 100644 --- a/bdk-ffi/src/wallet.rs +++ b/bdk-ffi/src/wallet.rs @@ -655,7 +655,8 @@ mod test { wallet .get_address(AddressIndex::Peek { index: 2 }) .unwrap() - .address, + .address + .as_string(), "bcrt1q5g0mq6dkmwzvxscqwgc932jhgcxuqqkjv09tkj" ); @@ -663,25 +664,38 @@ mod test { wallet .get_address(AddressIndex::Peek { index: 1 }) .unwrap() - .address, + .address + .as_string(), "bcrt1q0xs7dau8af22rspp4klya4f7lhggcnqfun2y3a" ); // new index still 0 assert_eq!( - wallet.get_address(AddressIndex::New).unwrap().address, + wallet + .get_address(AddressIndex::New) + .unwrap() + .address + .as_string(), "bcrt1qqjn9gky9mkrm3c28e5e87t5akd3twg6xezp0tv" ); // new index now 1 assert_eq!( - wallet.get_address(AddressIndex::New).unwrap().address, + wallet + .get_address(AddressIndex::New) + .unwrap() + .address + .as_string(), "bcrt1q0xs7dau8af22rspp4klya4f7lhggcnqfun2y3a" ); // new index now 2 assert_eq!( - wallet.get_address(AddressIndex::New).unwrap().address, + wallet + .get_address(AddressIndex::New) + .unwrap() + .address + .as_string(), "bcrt1q5g0mq6dkmwzvxscqwgc932jhgcxuqqkjv09tkj" ); @@ -690,7 +704,8 @@ mod test { wallet .get_address(AddressIndex::Peek { index: 1 }) .unwrap() - .address, + .address + .as_string(), "bcrt1q0xs7dau8af22rspp4klya4f7lhggcnqfun2y3a" ); @@ -699,13 +714,18 @@ mod test { wallet .get_address(AddressIndex::Reset { index: 0 }) .unwrap() - .address, + .address + .as_string(), "bcrt1qqjn9gky9mkrm3c28e5e87t5akd3twg6xezp0tv" ); // new index 1 again assert_eq!( - wallet.get_address(AddressIndex::New).unwrap().address, + wallet + .get_address(AddressIndex::New) + .unwrap() + .address + .as_string(), "bcrt1q0xs7dau8af22rspp4klya4f7lhggcnqfun2y3a" ); } @@ -729,12 +749,20 @@ mod test { .unwrap(); assert_eq!( - wallet.get_address(AddressIndex::New).unwrap().address, + wallet + .get_address(AddressIndex::New) + .unwrap() + .address + .as_string(), "bcrt1qqjn9gky9mkrm3c28e5e87t5akd3twg6xezp0tv" ); assert_eq!( - wallet.get_address(AddressIndex::New).unwrap().address, + wallet + .get_address(AddressIndex::New) + .unwrap() + .address + .as_string(), "bcrt1q0xs7dau8af22rspp4klya4f7lhggcnqfun2y3a" ); @@ -742,7 +770,8 @@ mod test { wallet .get_address(AddressIndex::LastUnused) .unwrap() - .address, + .address + .as_string(), "bcrt1q0xs7dau8af22rspp4klya4f7lhggcnqfun2y3a" ); @@ -750,7 +779,8 @@ mod test { wallet .get_internal_address(AddressIndex::New) .unwrap() - .address, + .address + .as_string(), "bcrt1qpmz73cyx00r4a5dea469j40ax6d6kqyd67nnpj" ); @@ -758,7 +788,8 @@ mod test { wallet .get_internal_address(AddressIndex::New) .unwrap() - .address, + .address + .as_string(), "bcrt1qaux734vuhykww9632v8cmdnk7z2mw5lsf74v6k" ); @@ -766,7 +797,8 @@ mod test { wallet .get_internal_address(AddressIndex::LastUnused) .unwrap() - .address, + .address + .as_string(), "bcrt1qaux734vuhykww9632v8cmdnk7z2mw5lsf74v6k" ); }