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"
);
}